我需要一种方法将用户控件传递给用户控件。
我正在使用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
}
答案 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
}