簡體   English   中英

如何在事件處理程序中更改value參數?

[英]How do I change a value argument from within an event handler?

我通過引用將bool傳遞給另一個類中的方法,以便可以從方法內部更改它(-原始參數)。

我還希望一個事件(通過該方法預訂)可以更改它。

這樣做:

class myCheckBox : CheckBox
{
    bool b1;
    public myCheckBox(ref bool b)
    {
        b1 = b;
        this.CheckedChanged += new EventHandler(myCheckBox_CheckedChanged);
    }

    void myCheckBox_CheckedChanged(object sender, EventArgs e)
    {
        b1 = Checked;
    }
}

沒有幫助,因為b1只是b的副本。

有什么辦法嗎: ref b1 = ref b; 如果沒有,我該如何解決?

(這些示例僅用於解釋問題。)

通常,您需要將一個具有布爾屬性的參數傳遞給事件處理程序,該屬性可以由事件處理程序修改:

public class MyEventArgs : EventArgs
{
    public bool Value { get; set; }
}

public class MyClass
{
    public void method1(ref bool b)
    {
        MyEventArgs e = new MyEventArgs()
        {
            Value = b
        };
        eventMethod(e);

        b = e.Value;
    }

    void eventMethod(MyEventArgs e)
    {
        e.Value = false;
    }
}

您可能還想看看.NET中建立的標准事件處理程序模式: 如何:發布符合.NET Framework准則的事件(C#編程指南)

傳遞包含該字段的類(表示該字段的字符串),然后保存它們而不是b1。 然后使用反射。

請參見如何創建對值字段的引用

b1設為班級的公共場所。

或者是私有的,具有帶有公共獲取者和公共制定者的財產。

好吧,當在控制台應用程序中復制代碼時(必須更改為靜態函數和var b1,當然),可以從Main調用時按需要運行:

bool b = true;
method1(ref b);
Console.writeLine(b1);

打印'false'...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM