【问题标题】:Passing Variables from User Control to User Control将变量从用户控件传递到用户控件
【发布时间】:2017-01-19 08:33:00
【问题描述】:

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

我正在使用 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
        }

【问题讨论】:

  • userControl1 与 userControl2 的关系如何?是儿童控制吗?还是在表单上独立使用两个控件?还是 WebForms 还是 WInForms?

标签: c# winforms


【解决方案1】:

您的表单上似乎有两个不相关的用户控件。 UserControl2 (UC2) 应该改变它的行为是在 UserControl1 (UC1) 上发生的事情。这意味着您应该在 UC1 上有一个 事件,如果 radiobutton1 选中状态发生更改,它将触发。您还需要公开单选按钮状态。您可以使用自定义 EventArgs 或公共属性:

用户控件1

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 应该允许改变它的行为。这可以通过公共财产来完成

用户控件2

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;

【讨论】:

  • 这还没转移。我必须在 UserControl2 中添加一些东西吗?
  • @user7427899 你能回答我的问题吗
  • 我对你的意思感到困惑?我猜你的意思是我必须在 UserControl2 中引用“IsSomethingEnabled”?
  • @user7427899 UC1 与 UC2 的关系如何?
  • UC1 包含一个单选按钮,该按钮影响按钮在 UC2 上的操作。
【解决方案2】:

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

用户控件1

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

用户控件2

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

【讨论】:

  • 当前上下文中不存在会话。
  • 我不好,我想到了asp用户控件...请添加您的技术,例如winforms,asp之类的...
  • 此建议适用于 asp.net 网络表单
  • @Karl,您应该删除此答案,因为它与此问题无关。他问题中的第二行表示 windows 窗体。
猜你喜欢
  • 1970-01-01
  • 2016-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-01
  • 1970-01-01
相关资源
最近更新 更多