winforms 基于来自其他用户控件的用户控件值禁用/启用按钮C#

lp0sw83n  于 2022-11-16  发布在  其他
关注(0)|答案(3)|浏览(150)

我有一个用户控件,其中有一个按钮,如果我从其他用户控件更改状态值,该按钮应启用/禁用。
有没有人能帮助我知道我如何才能做到这一点?如何捕捉启用/禁用按钮上更改的布尔值?
用户控制1工具

public Utilitaires()
    {
        InitializeComponent();

        PanelSlider_Utils.Controls.Add(new TCP());
    }

    //My button btnUndo created from the Visual interface

    public void btnUndo_Click(object sender, EventArgs e)
    {
      my code...
    }

用户控制2 TCP

//My method which should by the bool canredo change the enabled state of my button btnredo Usercontrol1

    public void Redo_CanRedoChanged(object Sender, bool CanRedo)
    {

     UTILS foo = new UTILS();

        foo.btnRedo.Enabled = CanRedo;// This is my problem to reach the button btnRedo UserControl 1
    }

对不起,我的英语...!谢谢

tp5buhyn

tp5buhyn1#

好了劳伦特,这就解决了:由于它可能很复杂,我详细地介绍了所有的步骤,以供将来的读者参考。
首先,我创建了一个名为UserControl 1的UserControl;它只包含一个名为button 1的按钮。我将为您的两个用户使用此UserControl以保持简单。
为了使UserControl 1在左侧的工具箱中就绪,我编译了程序(F5)并停止它。现在,我将两个UserControl从工具箱拖到空Form 1中。因此,自动创建的示例是userControl 11和userControl 12。我将使第一个控件成为第二个控件。
将此程式码加入UserControl.cs的开头(在建构函式之前):

public bool ButtonEnable
    {
        get => button1.Enabled;
        set { button1.Enabled = value; }
    }

    public UserControl1 InControl { get; set; }

bool会让按钮的状态可供任何其他对象存取。我说的是'public',但如果您在相同的方案中工作,'internal'就足够了。不要使用'private',否则它将无法存取。
InControl属性将设置应由当前UserControl控制的其他示例。
现在,我双击UserControl 1中的按钮来生成委托,完成如下:

private void Button1_Click(object sender, EventArgs e)
    {
        if (InControl != null)
        {
            InControl.ButtonEnable = !InControl.ButtonEnable;
        }
    }

这将切换受控按钮的状态。
现在,让我们返回Form1.cs并通过添加第二行来修改构造函数:

public Form1()
    {
        InitializeComponent();
        userControl11.InControl = userControl12;
    }

完成后,第一个UserControl的按钮将切换第二个UserControl的状态。

wn9m85ua

wn9m85ua2#

如果您要做的只是启用/禁用控件,请尝试:

// this is usually done by creating a control in
// the Winforms designer, not in directly in your code:
Usercontrol1 myUserControl = new Usercontrol1();

// class variable

bool controlEnabled = true;



public void btnUndo_Click(object sender, EventArgs e)
{
    // As an example, this will toggle the control from
    // enabled to disabled.
    controlEnabled = !controlEnabled;
    myUserControl.Enabled = controlEnabled;             
}

// Additional info: if you want to disable only a button in your 
// user control then create a public method to disable the button
// ex:
public class MyUserControl 
{
  // other stuff
  public void EnableMyButton(bool enable)
  { 
      MyButton.Enable = enable;
  }
}

public void btnUndo_Click(object sender, EventArgs e)
{
    // As an example, this will toggle the control from
    // enabled to disabled.
    controlEnabled = !controlEnabled;
    myUserControl.EnableMyButton(controlEnabled);             
}
7uhlpewt

7uhlpewt3#

感谢@ken和@fredy给我指明了一条路。我找到了另一个适合我的解决方案:
用户控件1实用程序

public static Utils Current = null;

public Utilitaires()
{
    InitializeComponent();

    PanelSlider_Utils.Controls.Add(new Tcp());

    Current = this;
}

//My button btnUndo created from the Visual interface

public void btnUndo_Click(object sender, EventArgs e)
{
  my code...
}

用户控件2 TCP

public Utils UndoRedo = Utils.Current;

public void Redo_CanRedoChanged(object Sender, bool CanRedo)
{

 UndoRedo.btnRedo.Enabled = CanRedo;

}

再次感谢您的帮助!

相关问题