我有一个构造一种特殊消息框的类。 在该类中,其中一个参数是我在构造函数中引用的变量 但是我需要在构造函数中识别该变量,更具体地说,当我单击一个按钮时。
我看了一下方法行为,并注意到为了让方法从变量中识别一个值,我必须像这样引用它。
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);
答案 0 :(得分:1)
按钮点击事件处理程序必须具有函数签名(object sender, System.EventArgs e)
MSDN Reference。这就是为什么当你试图让你的处理程序接受第三个参数时,会出现错误。
解决此问题的一种方法是使变量variavelcaixa
可供处理程序方法访问。您可以通过将其声明为类中的全局变量来完成此操作。然后,您可以在构造函数中以及在事件处理程序方法中为其分配。请注意,执行此操作后,不应将ref int variavelcaixa
传递给事件处理程序方法。
基本上,在您致电showDialog
并传入ref
参数后,您需要将其分配给方法正文中的类变量variavelcaixa
。 ref 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以了解变量 - 参数。