将变量从用户控件传递到用户控件

时间:2017-01-18 22:40:40

标签: c# winforms

我需要一种方法将用户控件传递给用户控件。

我正在使用Windows窗体。

例如。假设我在用户控件1中有一个单选按钮,我希望用户控制2调用并查看是否在用户控件1上选中了该单选按钮。我将如何引用它?

对于一些示例代码:

  

这是UserControl1

public void radioButton1_CheckedChanged(object sender, EventArgs e)
{

}
  

这是UserControl2

 private void button4_Click(object sender, EventArgs e)
{

            if (radioButton1.Checked)
               //do something
            else
               //do something
        }

2 个答案:

答案 0 :(得分:3)

好像你的表单上有两个不相关的用户控件。而UserControl2(UC2)应该改变它的行为是UserControl1(UC1)上发生的事情。这意味着您应该在UC1上有一个事件,如果radiobutton1检查状态更改将触发。您还需要公开radiobutton状态。您可以使用自定义EventArgs或使用公共属性执行此操作:

  

的UserControl1

public event EventHandler SomethingChanged;

private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
   if (SomethingChanged != null)
       SomethingChanged(this, EventArgs.Empty);
}

public bool IsSomethingEnabled => radioButton1.Checked;

UC2应该允许改变它的行为。这可以通过公共财产来完成

  

UserControl2

public bool UseCoolFeature { get; set; }

private void button4_Click(object sender, EventArgs e)
{
    if (UseCoolFeature)
       //do something
    else
       //do something else
}

最后一步 - 协调器将管理两个用户控件。这是你的形式。订阅UC1的活动并更改UC2的状态:

  

表格

private void userControl1_SomethinChanged(object sender, EventArgs e)
{
    userControl2.UseCoolFeature = ((UserControl1)sender).IsSomethingEnabled;
}

您甚至可以使用就地事件处理程序:

userControl1.SomethingChanged += (s,e) =>
     userControl2.UseCoolFeature = userControl1.IsSomethingEnabled;

答案 1 :(得分:-2)

您可以将值存储在会话中:

  

的UserControl1

public void radioButton1_CheckedChanged(object sender, EventArgs e)
{
    Session["radioButton1Checked"] = radioButton1.Checked;
}
  

UserControl2

private void button4_Click(object sender, EventArgs e)
{
    if (Session["radioButton1Checked"] != null && (bool)Session["radioButton1Checked"])
       //do something
    else
       //do something
}