01/10/2018, 14:03

Tạo sự kiện cho nút chưa tồn tại

Tình hình là mình khởi tạo một chuỗi lệnh tạo sự kiện khi ấn một nút sẽ xuất hiện thêm các nút khác trong bài.
Nhưng mình muốn tạo một chuỗi sự kiện chờ sẵn khi để bắt sự kiện các nút được tạo ra.
Các bạn có ai biết về vấn đề này mong chỉ giáo cho mình.

Quân viết 16:08 ngày 01/10/2018

Bạn biết tạo nút để hiện ra mà lại không làm sao gắn sự kiện click vào được à, lạ thật

viết 16:16 ngày 01/10/2018

k hiểu cái cụm chuỗi lệnh tạo sự kiện của bạn nghĩa là gì luôn, mình hiểu nó thành 1 đống lệnh để tạo 1 sự kiện nhưng đọc tiêu đề với lời giải thích thì k thấy đúng lắm.

Tóm lại, bạn muốn click 1 button rồi tự nó sinh ra nhiều button khác và muốn thêm sự kiện vào các nút này.
Bạn bảo nó chưa xuất hiện nên k biết thêm sự kiện như nào. Vậy bạn add sự kiện vào lúc nó xuất hiện đi.

Hướng đi: Click button -> Gọi function tạo button -> Trong function này tạo button xong rồi tạo sự kiện cho button. Không có tý bất đồng bộ nào, code chạy từ trên xuống dưới luôn.

Vuio viết 16:13 ngày 01/10/2018

Tiếng Việt không có khi để nhé
Ý bạn là gán sự kiện cho nút khi tạo ra tự động chứ không phải khi design ?
Nếu thế thì bạn tham khảo code Delphi của mình rồi chuyển sang C# nhé.

Trước tiên tạo 1 thủ tục trước, thủ tục này phải giống với sự kiện của nút cần tạo, ở đây mình lấy sự kiện Click cho dễ

procedure NewButtonClick(Sender:TObject);    //    Tự tạo bằng code nhé
begin
    (Sender as TButton).Color:=clRed;
end;

Sau đó đến phần tạo nút tự động

var
    Button2:TButton;
begin
    Button2:=TButton.Create(Self);
    Button2.Color:=clBlue;
    
    //    Khúc này là gán sự kiện Click cho nút mới tạo
    Button2.OnClick:=NewButtonClick;
end;
Văn Dương viết 16:05 ngày 01/10/2018

Tạo sự kiện cho nút thì phải biết tham số của kiểu delegate mà dùng để khai báo event của nút. Nếu nhớ không nhầm thì nó sẽ là (object sender, RountedEventArgs e).

Từ kiểu tham số này viết 1 hàm có kiểu tham số tương đương. Hàm này sẽ thực thi khi event được gọi.

private void ButtonHanler(object sender, RountedEventArgs e){
    //......
}

Bây giờ đăng ký hoặc gỡ bỏ sự kiện cho nút:

Button mybutton = new Button();
mybutton.Click+=ButtonHander; // += thì đăng ký thêm một lần. -= thì gỡ bỏ một lần.

Nếu bạn đang code tay. Có thể viết tên button sau đó “.” Và chọn đến Click hình tia sét (biểu tượng của event sẽ là tia sét màu vàng). Viết thêm +=. VS nó sẽ nhắc bạn ấn tab 2 lần để tạo ra 1 hàm cho sự kiện.

Shop Pulp viết 16:08 ngày 01/10/2018

Mình đã làm được các bạn ạ. Đây là code của mình:

  void LoadPhong() {
        flowLayoutPanel1.AutoScroll = true;
        GetAllDichVu();
        List<Phong> phongList = PhongDAO.Instance.LoadPhongList();
        foreach (Phong item in phongList) {
            Button newbtn = new Button();
            int anh;
            if (item.TinhTrang == 1) {

                anh = 1;
                newbtn.Visible = true;
            }
            else if(item.TinhTrang == 2) {
                anh = 0;
                newbtn.Visible = false;
            }
            else
            {
                anh = 0;
                newbtn.Visible = true;
            }
            newbtn.Text = item.TenPhong;
            newbtn.Name = item.TenPhong;             
            newbtn.FlatStyle = FlatStyle.Standard;
            newbtn.ImageList = imageList1;
            newbtn.ImageIndex = anh;
            newbtn.Size = new System.Drawing.Size(170, 170);
            newbtn.ImageAlign = ContentAlignment.MiddleCenter;
            newbtn.TextAlign = ContentAlignment.TopLeft;
            newbtn.Font = new System.Drawing.Font("Microsoft Sans Serif", 18, FontStyle.Bold);
            newbtn.ForeColor = Color.Teal;
            newbtn.BackColor = Color.LightBlue;
            newbtn.Click += newbtn_Click;
            newbtn.Tag = item;
            flowLayoutPanel1.Controls.Add(newbtn);
            newbtn.Click += new System.EventHandler(this.ButtonClick);
        }
    }
    //Su kien click vao phong
    void ButtonClick(object sender, EventArgs e) {
        Button currentbutton = (Button)sender;
        txtTenPhong.Text = (currentbutton.Text);
    }
Bài liên quan
0