如何在c#中将用户控件的控件重置为初始状态

时间:2014-05-04 14:18:54

标签: c# winforms user-controls

在我的应用程序中,我有一个用户控件,当我点击我的应用程序的添加按钮时。应该为用户控件创建一个对象,并且创建的用户控件副本应该添加到面板控件.i做了所有这些...但我的问题是添加button.i有一个重置按钮。当我点击这个按钮时,它应该重置添加到面板的所有用户控件,我该怎么做。 任何人都有自己的想法。请帮助我

我的重置代码是

foreach (Control x in bodyPanel.Controls)
{
    if (x is TimerUserControl)
    {
       obj_TimerUserControl.ResetControl();
    }
}

当我执行此操作时,最后创建的对象只会被重置。正常运行正常。在此代码片段中,Resetcontrol()是一个在TimerUserControl中声明的方法。

3 个答案:

答案 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();
    }
}