如何在button_click方法中引用变量值

时间:2014-12-14 06:35:45

标签: c# methods buttonclick ref

我有一个构造一种特殊消息框的类。 在该类中,其中一个参数是我在构造函数中引用的变量 但是我需要在构造函数中识别该变量,更具体地说,当我单击一个按钮时。

我看了一下方法行为,并注意到为了让方法从变量中识别一个值,我必须像这样引用它。

static void SetString1(ref string value)
{
if (value == "cat") // Test parameter value
{
    Console.WriteLine("Is cat");
}
value = "dog"; // Assign parameter to new value
}

我想做同样的事情,但是按一下按钮点击方法,但是如果我尝试引用变量'vaviavixa',它会给我“buttonRight_click匹配的委托System.eventhandler没有重载”。这意味着什么,我应该如何成功地引用变量?

private void buttonRight_Click(object sender, System.EventArgs e, ref int variavelcaixa)
    {
        if (checkBox1.Checked == true)
        { variavelcaixa = 1; }
        else { variavelcaixa = 0; }
    }

编辑: 我在特殊消息框类中的代码如下:

     public partial class BetterDialog : Form
   {
    public int variavelcaixa;
 static public DialogResult ShowDialog(string title, string largeHeading, string smallExplanation,
        string leftButton, string rightButton, Image iconSet, ref int variavelcaixa)
    {
        using (BetterDialog dialog = new BetterDialog(title, largeHeading, smallExplanation, leftButton,
            rightButton, iconSet, ref variavelcaixa))
        {
            DialogResult result = dialog.ShowDialog();
            return result;
        }
    }

    /// <summary>
    /// The private constructor. This is only called by the static method ShowDialog.
    /// </summary>
    private BetterDialog(string title, string largeHeading, string smallExplanation,
        string leftButton, string rightButton, Image iconSet, ref int variavelcaixa)
    {
        this.Font = SystemFonts.MessageBoxFont;
        this.ForeColor = SystemColors.WindowText;

        InitializeComponent();
  //A bunch of graphic design
    }

在构造函数之外有按钮单击方法

    private void buttonRight_Click(object sender, System.EventArgs e)
    {
        if (checkBox1.Checked == true)
        { variavelcaixa = 1; }
        else { variavelcaixa = 0; }
    }

在主类上我只需添加ref variavelcaixa,并将特定变量附加到消息框对象

MsgBoxCheck.MessageBox dlg = new MsgBoxCheck.MessageBox();
                string icone = "C:\\warning.png";
                DialogResult result = BetterDialog.ShowDialog("Alert",
      "main message in message box",
      "some secondary message",
      "", "Ok", System.Drawing.Bitmap.FromFile(icone), ref Variables.checkbox53naomostrarnovamente);

1 个答案:

答案 0 :(得分:1)

按钮点击事件处理程序必须具有函数签名(object sender, System.EventArgs e) MSDN Reference。这就是为什么当你试图让你的处理程序接受第三个参数时,会出现错误。

解决此问题的一种方法是使变量variavelcaixa可供处理程序方法访问。您可以通过将其声明为类中的全局变量来完成此操作。然后,您可以在构造函数中以及在事件处理程序方法中为其分配。请注意,执行此操作后,不应将ref int variavelcaixa传递给事件处理程序方法。

基本上,在您致电showDialog并传入ref参数后,您需要将其分配给方法正文中的类变量variavelcaixaref Variables.checkbox53naomostrarnovamente会引用checkbox53naomostrarnovamente,而不是您的变量。因此,请将您的代码更改为:

static public DialogResult ShowDialog(string title, string largeHeading, string smallExplanation, string leftButton, string rightButton, Image iconSet, ref int p_variavelcaixa)
{
    using (BetterDialog dialog = new BetterDialog(title, largeHeading, smallExplanation, leftButton,
        rightButton, iconSet, ref p_variavelcaixa))
    {
        variavelcaixa = p_variavelcaixa;
        DialogResult result = dialog.ShowDialog();
        return result;
    }
}

请注意,我已将ref参数重命名为p_variavelcaixa,以帮助消除混淆。您可能还需要查看this demo以了解变量 - 参数。