2013-07-30 38 views
7

Trong C# (.NET 4.5) Tôi muốn đăng ký một sự kiện trong khi đang tạo đối tượng.Đăng ký sự kiện khi tạo đối tượng trong C#

Sau đây, tất nhiên, sẽ làm việc:

CheckBox c = new CheckBox(); 
c.Name = "TheCheckBox"; 
c.Checked += c_Checked; 

Nhưng muốn tìm hiểu xem nó có thể làm điều gì đó dọc theo dòng:

CheckBox c = new CheckBox() { 
    Name = "TheCheckBox", 
    Checked += c_Checked 
} 

Post-thảo luận chỉnh sửa: Điều này để thực hiện là một cái gì đó như:

MyUniformGrid.Add(new CheckBox() { 
    Name = "TheCheckBox", 
    Checked += CheckHandler 
}); 
+0

nếu đó là điều khiển riêng của bạn, bạn sẽ có thể có một 'Func <> 'như là đối số cho các nhà xây dựng và thiết lập nó có – Default

+0

@Default bạn có thể gửi câu trả lời với mã ví dụ? – mbaytas

Trả lời

12

Không, không may là đăng ký sự kiện không được hỗ trợ trong bộ khởi tạo đối tượng. Nó sẽ làm cho nó thực sự đơn giản để tạo giao diện đồ họa trong một số trường hợp, nhưng không có ...

Ngôi nhà nửa chặng đường là:

Checkbox c = new CheckBox { Name = "TheCheckBox" }; 
c.Checked += c_Checked; 

(Lý tưởng nhất là đổi tên c_Checked để một tên mà thực sự là có ý nghĩa - Tôi ghét các tên do VS tạo ra ở đây ...)

+0

Cảm ơn rất nhiều. Tôi biết về giải pháp nửa chừng, nhưng nó không hiệu quả với tôi. Những gì tôi muốn làm là một cái gì đó như 'MyUniformGrid.Add (mới CheckBox() {Checked + = CheckHandler}); – mbaytas

+3

@baytas: Đúng - về cơ bản thì sẽ không. Bạn có thể treo lên một phương pháp mở rộng để cho phép: 'MyUniformGrid.Add (new CheckBox(). Với (c => c.Checked + = CheckHandler))' nếu điều đó sẽ giúp ... –

+1

@baytas Một lớp lót không phải luôn luôn có thể đọc được, btw. – Leri

0

Nếu bạn có quyền kiểm soát các điều khiển, bạn luôn có thể thiết lập trình xử lý sự kiện trong hàm tạo. Một cái gì đó như:

public class Program 
{ 
    private static void Main(string[] args) 
    { 
     Checkbox checkbox = new Checkbox(OnChecked); 
     checkbox.TriggerChecked(); 
    } 

    private static void OnChecked(object sender, EventArgs args) 
    { 
     Console.WriteLine("triggered event"); 
    } 
} 

public class Checkbox 
{ 
    public event EventHandler<EventArgs> Checked; 

    public Checkbox(EventHandler<EventArgs> eventHandler) 
    { 
     Checked += eventHandler; 
    } 


    public void TriggerChecked() 
    { 
     var handler = Checked; 
     if (handler != null) 
      handler(this, new EventArgs()); 
    } 
} 
+0

Trong trường hợp của tôi, tôi tốt hơn là chỉ làm những việc theo cách thông thường (khối mã đầu tiên trong câu hỏi). Tuy nhiên, điều này là mới đối với tôi và tôi luôn sẵn lòng học những thứ mới. Cảm ơn bạn đã cho thấy. – mbaytas

Các vấn đề liên quan