跳不出递归,找高手帮忙。。。
//选择日期时触发private void MonthCalendar_DateChanged(object obj, DateRangeEventArgs args)
{
Control control = (Control)obj;
bool bb = false;
Control cl = new Control();
foreach (Control ctl in this.Controls)
{
bb = quchu(ctl, control);
cl = ctl;
}
if (bb)
{
((TextBox)cl).Text = args.Start.ToString("yyyy-MM-dd");
}
}
//通过递归找到对应的控件
private bool quchu(Control ctls,Control control)
{
if (ctls is TextBox)
{
if (((TextBox)ctls).Name == control.Tag.ToString())
{
return true; //经过调试,程序进入到这个地方返回true,但是跳出此方法之后还是会继续执行下面foreach中的quchu(ctl, control)方法
}
}
else if (ctls.HasChildren)
{
foreach (Control ctl in ctls.Controls)
{
quchu(ctl, control);
}
}
return false;
}
求高手帮忙解决,已经纠结一天了,在线等。。。 递归 c# winform --------------------编程问答-------------------- 给控件赋值,没有必要用递归来做。
直接赋值,代码更清晰,更容易维护,比如:
--------------------编程问答--------------------
private void MonthCalendar_DateChanged(object obj, DateRangeEventArgs args)
{
this.myTextBox.Text = args.Start.ToString("yyyy-MM-dd");
}
这个我不是针对单一的一个文本框控件的,是有很多文本框控件要共用此事件。 --------------------编程问答-------------------- 有没有人可以搭救啊,跪求帮忙啊 --------------------编程问答--------------------
“经过调试,程序进入到这个地方返回true,但是跳出此方法之后还是会继续执行下面foreach中的quchu(ctl, control)方法”那是因为上面的foreach循环还没结束,所以在你返回true时你没有终结上面的foreach,所以quchu方法还会继续调用运行;你可要试试在上面的foreach循环里把判断加进去并跳出循环 --------------------编程问答-------------------- 递归写的有问题,如果先执行的是foreach,当然
//经过调试,程序进入到这个地方返回true,但是跳出此方法之后还是会继续执行下面foreach中的quchu(ctl, control)方法
foreach (Control ctl in ctls.Controls)
{
//在这里要作个判断
quchu(ctl, control);
} --------------------编程问答-------------------- 逻辑问题
--------------------编程问答-------------------- 上面有地方忘了改了
//选择日期时触发
private void MonthCalendar_DateChanged(object obj, DateRangeEventArgs args)
{
Control control = (Control)obj;
bool bb = false;
Control cl = new Control();
foreach (Control ctl in this.Controls)
{
Control bb = quchu(ctl, control);
if(bb!=null)
{
cl = bb;
break;
}
}
if (bb)
{
((TextBox)cl).Text = args.Start.ToString("yyyy-MM-dd");
}
}
//通过递归找到对应的控件
private Control quchu(Control ctls,Control control)
{
Control rectrl =null
if (ctls is TextBox)
{
if (((TextBox)ctls).Name == control.Tag.ToString())
{
rectrl = ctls; //经过调试,程序进入到这个地方返回true,但是跳出此方法之后还是会继续执行下面foreach中的quchu(ctl, control)方法
}
}
else if (ctls.HasChildren)
{
foreach (Control ctl in ctls.Controls)
{
rectrl =quchu(ctl, control);
if(rectrl!=null)
break;
}
}
return rectrl;
}
--------------------编程问答--------------------
//选择日期时触发
private void MonthCalendar_DateChanged(object obj, DateRangeEventArgs args)
{
Control control = (Control)obj;
Control cl = null;
foreach (Control ctl in this.Controls)
{
Control bb = quchu(ctl, control);
if(bb!=null)
{
cl = bb;
break;
}
}
if (c1!=null)
{
((TextBox)cl).Text = args.Start.ToString("yyyy-MM-dd");
}
}
//通过递归找到对应的控件
private Control quchu(Control ctls,Control control)
{
Control rectrl =null
if (ctls is TextBox)
{
if (((TextBox)ctls).Name == control.Tag.ToString())
{
rectrl = ctls; //经过调试,程序进入到这个地方返回true,但是跳出此方法之后还是会继续执行下面foreach中的quchu(ctl, control)方法
}
}
else if (ctls.HasChildren)
{
foreach (Control ctl in ctls.Controls)
{
rectrl =quchu(ctl, control);
if(rectrl!=null)
break;
}
}
return rectrl;
}
哥 我自己搞定了 不过还是谢谢你,方法跟你这种差不多一样 就是取消之前那个bool的全局变量,换成了Control类型的变量,初始值为null,当匹配到一样的时候才将值赋给他,然后始终返回它这个值,这样的话无论它怎么递归都改变不了那个值了,谢谢了哈!!! --------------------编程问答-------------------- 这样看看能用不
Control cl;
private void MonthCalendar_DateChanged(object obj, DateRangeEventArgs args)
{
Control control = (Control)obj;
bool bb = false;
cl = new Control();
foreach (Control ctl in this.Controls)
{
bb = quchu(ctl, control);
//cl = ctl;
if (bb)
{
((TextBox)cl).Text = args.Start.ToString("yyyy-MM-dd");
}
}
}
//通过递归找到对应的控件
private bool quchu(Control ctls, Control control)
{
if (ctls is TextBox)
{
if (((TextBox)ctls).Name == control.Tag.ToString())
{
cl = ctls;
return true; //经过调试,程序进入到这个地方返回true,但是跳出此方法之后还是会继续执行下面foreach中的quchu(ctl, control)方法
}
}
else if (ctls.HasChildren)
{
foreach (Control ctl in ctls.Controls)
{
var bret = quchu(ctl, control);
if (bret) { return bret; }
}
}
return false;
}
补充:.NET技术 , C#