在我的应用程序中,我有一个用户控件,当我点击我的应用程序的添加按钮时。应该为用户控件创建一个对象,并且创建的用户控件副本应该添加到面板控件.i做了所有这些...但我的问题是添加button.i有一个重置按钮。当我点击这个按钮时,它应该重置添加到面板的所有用户控件,我该怎么做。 任何人都有自己的想法。请帮助我
我的重置代码是
foreach (Control x in bodyPanel.Controls)
{
if (x is TimerUserControl)
{
obj_TimerUserControl.ResetControl();
}
}
当我执行此操作时,最后创建的对象只会被重置。正常运行正常。在此代码片段中,Resetcontrol()是一个在TimerUserControl中声明的方法。
答案 0 :(得分:0)
实现目标的最简单方法似乎是使用" ResetControl"创建一个界面。作为一种方法。让所有各种控件实现此接口,而不是检查控件是否类型" TimerUserControl"你要检查这个类型是否是你的界面。
public interface IResetable
{
void ResetControl();
}
.....
foreach(var control in bodyPanel.Controls)
{
var resetable = control as IResetable;
if (resetable != null)
resetable.ResetControl();
}
答案 1 :(得分:0)
你的问题不是那么清楚。但我试着描述我理解的东西。据我了解,可能有2个概率..
概率 - 1:你有一个你称之为"用户控制"当这个类被实例化时(创建了这个对象的新实例-In Net framework都是对象),并且实例化对象将自己初始化/实现为父对象..
在用户/开发人员需要时添加到父级后,实例化对象可以使用一些过滤器选项(即索引号)设置为其初始值的默认值
PROBABILITY-2:父对象删除所有添加的元素
这两个概率可以用同样的方式解决..
这里有一些示例代码:
//This is sample parent object
public class Container : Panel
{
// In your situation this list is your controls
public List<NumBox> Elements { get; set; }
public Container()
{
}
public Container( List<NumBox> numericBoxList )
{
this.Elements.AddRange( numericBoxList ) ;
}
public void Add ( NumBox numericBoxInstance )
{
// we check that elements has our numbox instance or not..
// if our instance is not in the elements then find method returns null
if (this.Elements.Find( numericBoxInstance ) == null)
{
this.Elements.Add ( numericBoxInstance )
}
public void DeleteElement ( NumBox numboxInstance )
{
this.Elements.Remove (numboxInstance );
}
public void DeleteAllElements ()
{
this.Elements = null;
// The IENumerable objects such as Lists can be easily set the object to the
// "initialization moment" - something like just create a new and empty object -
// with assigning to "null"..CSharp compiler as clever as understand that you want clear all
}
public void UpdateElement (int indexNo, NumBox updatedNumBox)
{
this.Elements[indexNo] = updatedNumBox;
}
// And The Sample Child object
public class NumBox : TextBox
{
public NumBox()
{
}
public NumBox ( int value )
{
this.Text = value.ToString();
}
//overloads for other numeric options such as short, long, decimal, float etc.
public void Reset()
{
this.Text = null;
}
// Some Other Useful Methods that you need in the project
}
样本用法:
int i = 12345;
var box = new NumBox (i);
var parent = new Container();
parent.Add( box );
var j = parent.Elements.FindIndex ( box );
// FindIndex is a built-in IENumerable method like Find() or others that you can see in Intellisense
if (j > = 0)
{
parent.Elements[j].Reset();
}
var box1 = new NumBox(987654);
parent.UpdateElement(j, box1);
parent.DeleteAllElements();
希望这个样本启发你的方式..
答案 2 :(得分:0)
在重置按钮处理程序下面写下面的代码,它将修复问题
foreach (Control ctrl in bodyPanel.Controls)
{
if (ctrl.GetType().Name == "TimerUserControl")
{
TimerUserControl obj = ctrl as TimerUserControl;
obj.ResetControl();
}
}