Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 10 của 10
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Xóa phần Text của tất cả control(điểu khiển) trên Form trong lập trình C#

    Vấn đề đặt ra: xóa tất cả nội dung của các textbox trong Form trên.

    Hướng suy nghĩ: A ha, ta đếm có 5 textbox, cứ chơi dòng code này là thỏa đề bài:

    Mã:
    textbox1.Text="";textbox2.Text="";textbox3.Text="";textbox4.Text="";textbox5.Text="";
    OK, đúng rồi đấy, bây giờ nâng cao thêm 1 tí, giả sử trong Form có 100 cái textbox. Hi hi, lúc này làm sao đây?? Không biết có ai can đảm ngồi gõ thủ công không nhỉ? [IMG]images/smilies/Surprised.gif[/IMG]
    Bây giờ, tớ vào vấn đề chính để giải quyết tình huống này, cụ thể như sau: đuyệt đệ quy qua tập hợp các điều khiển trên, đưa thuộc tính Text về "" mỗi khi tìm thấy điều khiển textbox
    Bạn có thể duyệt qua các điều khiển trên Form bằng Form.Controls, tập này chứa tất cả các điều khiển nằm trực tiếp trên bề mặt Form. Tuy nhiên ,nếu vài điểu khiển trong số đó là điều khiển container (GroupBox,Panel, TabPage,..), chúng có thể lại chứa điều khiển nữa. Do đó, cần sử dụng kỹ thuật đệ quy để kiểm tra tập hợp Controls.
    Trở lại tình huống trên, chúng ta sẽ gọi hàm XoaNoiDung một cách đệ quy để xóa phần Text của tất cả các textbox:


    Mã:
            private void XoaNoiDung(Control ctrl)        {            if (ctrl is TextBox)            {                ctrl.Text = string.Empty;            }            foreach(Control i in ctrl.Controls)            {                XoaNoiDung(i);            }        }
    Ok, đã đến lúc thụ lý tình huống Click của button "Xóa" để hoàn thành bài tập nho nhỏ này:

    Mã:
            private void btnXoa_Click(object sender, EventArgs e)        {            XoaNoiDung(this);        }
    Chúc các bạn thành công!

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    cách này kô tối ưu cho lắm [IMG]images/smilies/biggrin.png[/IMG], post lên cho vui !
    Mã:
    public void XoaNoiDung(params TextBox[] textbox)
                {
                    foreach (TextBox txt in textbox)
                    {
                        txt.Text = String.Empty;
                    }
                }

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    private void btnXoa_Click(object sender, EventArgs e)
    {
    XoaNoiDung(this);
    }
    Cho mình hỏi chỗ này chút nhé. Đối tượng this ở đây chỉ đến Control nào thế ?(Form, hay một tập các control sử dụng trong Form...). Mình chưa hiểu rõ cơ chế dùng this trong trường hợp này.

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi abelegreen
    Cho mình hỏi chỗ này chút nhé. Đối tượng this ở đây chỉ đến Control nào thế ?(Form, hay một tập các control sử dụng trong Form...). Mình chưa hiểu rõ cơ chế dùng this trong trường hợp này.
    this ở đây tượng trưng cho đối tượng Form.
    Bạn có thể hiểu Form là 1 control tổng quát nhất, nó chứa đựng tất cả các control khác.

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Em chưa hiểu tại sao đoạn mã trên lại phải dùng đệ quy
    Em nghĩ chỉ cần thế này là đủ
    Mã:
    public void XoaNoiDung()
                {
                    foreach (TextBox txt in this.Controls)
                    {
                        txt.Text = String.Empty;
                    }
                }
    Vì chỉ có mỗi Form là có tâp hợp Controls nên đoạn chương trình của anh sẽ chỉ chạy đệ quy có 1 lần, tương ứng với thủ tục như trên. Thủ tục đệ quy như trên áp dụng được trừ phi 1 Form trở thành một điều khiển của Form khác, nghĩa là nó cũng nằm trong Controls của Form kia. Mà theo em đọc thì hình như không có cái này????

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi hailoc12
    Em chưa hiểu tại sao đoạn mã trên lại phải dùng đệ quy
    Em nghĩ chỉ cần thế này là đủ
    Mã:
    public void XoaNoiDung()
                {
                    foreach (TextBox txt in this.Controls)
                    {
                        txt.Text = String.Empty;
                    }
                }
    Vì chỉ có mỗi Form là có tâp hợp Controls nên đoạn chương trình của anh sẽ chỉ chạy đệ quy có 1 lần, tương ứng với thủ tục như trên. Thủ tục đệ quy như trên áp dụng được trừ phi 1 Form trở thành một điều khiển của Form khác, nghĩa là nó cũng nằm trong Controls của Form kia. Mà theo em đọc thì hình như không có cái này????
    Với đoạn code của em, thì giả sử Form chính chứa label thì những label sẽ có nhãn trống rỗng hết. Không chỉ Form là nơi chứa Controls đâu em, còn có GroupBox, TabPanel,.. nữa. Do đó phải dùng để quy để xóa tận gốc nhãn của textbox.

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Lạ nhỉ, em dùng Object Browser tìm thì chỉ thấy có Form và PropertyGrid là có tập hợp Controls thôi mà. Em đã tạo thử cái panel và 3 cái textbox trên đó, tuy nhiên trong phần khởi tạo của Form không hề thấy có dòng nào add 3 cái textbox đó vào Controls của Panel cả
    Mã nguồn PHP:
    #region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.textBox1 = new System.Windows.Forms.TextBox(); this.textBox2 = new System.Windows.Forms.TextBox(); this.textBox3 = new System.Windows.Forms.TextBox(); this.textBox4 = new System.Windows.Forms.TextBox(); this.textBox5 = new System.Windows.Forms.TextBox(); this.textBox6 = new System.Windows.Forms.TextBox(); this.textBox7 = new System.Windows.Forms.TextBox(); this.textBox8 = new System.Windows.Forms.TextBox(); this.textBox9 = new System.Windows.Forms.TextBox(); this.textBox10 = new System.Windows.Forms.TextBox(); this.button1 = new System.Windows.Forms.Button(); this.panel1 = new System.Windows.Forms.Panel(); this.textBox11 = new System.Windows.Forms.TextBox(); this.textBox12 = new System.Windows.Forms.TextBox(); this.textBox13 = new System.Windows.Forms.TextBox(); this.button2 = new System.Windows.Forms.Button(); this.panel1.SuspendLayout(); this.SuspendLayout(); // // textBox1 // this.textBox1.Location = new System.Drawing.Point(104, 48); this.textBox1.Name = "textBox1"; this.textBox1.Size = new System.Drawing.Size(144, 20); this.textBox1.TabIndex = 0; this.textBox1.Text = "textBox1"; // // textBox2 // this.textBox2.Location = new System.Drawing.Point(88, 96); this.textBox2.Name = "textBox2"; this.textBox2.Size = new System.Drawing.Size(144, 20); this.textBox2.TabIndex = 1; this.textBox2.Text = "textBox2"; // // textBox3 // this.textBox3.Location = new System.Drawing.Point(24, 80); this.textBox3.Name = "textBox3"; this.textBox3.Size = new System.Drawing.Size(144, 20); this.textBox3.TabIndex = 2; this.textBox3.Text = "textBox3"; // // textBox4 // this.textBox4.Location = new System.Drawing.Point(90, 139); this.textBox4.Name = "textBox4"; this.textBox4.Size = new System.Drawing.Size(144, 20); this.textBox4.TabIndex = 3; this.textBox4.Text = "textBox4"; // // textBox5 // this.textBox5.Location = new System.Drawing.Point(-8, 176); this.textBox5.Name = "textBox5"; this.textBox5.Size = new System.Drawing.Size(144, 20); this.textBox5.TabIndex = 4; this.textBox5.Text = "textBox5"; // // textBox6 // this.textBox6.Location = new System.Drawing.Point(-8, 216); this.textBox6.Name = "textBox6"; this.textBox6.Size = new System.Drawing.Size(144, 20); this.textBox6.TabIndex = 5; this.textBox6.Text = "textBox6"; // // textBox7 // this.textBox7.Location = new System.Drawing.Point(114, 163); this.textBox7.Name = "textBox7"; this.textBox7.Size = new System.Drawing.Size(144, 20); this.textBox7.TabIndex = 6; this.textBox7.Text = "textBox7"; // // textBox8 // this.textBox8.Location = new System.Drawing.Point(122, 171); this.textBox8.Name = "textBox8"; this.textBox8.Size = new System.Drawing.Size(144, 20); this.textBox8.TabIndex = 7; this.textBox8.Text = "textBox8"; // // textBox9 // this.textBox9.Location = new System.Drawing.Point(130, 179); this.textBox9.Name = "textBox9"; this.textBox9.Size = new System.Drawing.Size(144, 20); this.textBox9.TabIndex = 8; this.textBox9.Text = "textBox9"; // // textBox10 // this.textBox10.Location = new System.Drawing.Point(152, 224); this.textBox10.Name = "textBox10"; this.textBox10.Size = new System.Drawing.Size(144, 20); this.textBox10.TabIndex = 9; this.textBox10.Text = "textBox10"; // // button1 // this.button1.Location = new System.Drawing.Point(64, 16); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(104, 16); this.button1.TabIndex = 10; this.button1.Text = "button1"; this.button1.Click += new System.EventHandler(this.button1_Click); // // panel1 // this.panel1.Controls.Add(this.textBox13); this.panel1.Controls.Add(this.textBox12); this.panel1.Controls.Add(this.textBox11); this.panel1.Location = new System.Drawing.Point(64, 80); this.panel1.Name = "panel1"; this.panel1.Size = new System.Drawing.Size(176, 152); this.panel1.TabIndex = 11; this.panel1.Paint += new System.Windows.Forms.PaintEventHandler(this.panel1_Paint); // // textBox11 // this.textBox11.Location = new System.Drawing.Point(16, 66); this.textBox11.Name = "textBox11"; this.textBox11.Size = new System.Drawing.Size(144, 20); this.textBox11.TabIndex = 6; this.textBox11.Text = "textBox11"; // // textBox12 // this.textBox12.Location = new System.Drawing.Point(40, 120); this.textBox12.Name = "textBox12"; this.textBox12.Size = new System.Drawing.Size(144, 20); this.textBox12.TabIndex = 7; this.textBox12.Text = "textBox12"; // // textBox13 // this.textBox13.Location = new System.Drawing.Point(24, 8); this.textBox13.Name = "textBox13"; this.textBox13.Size = new System.Drawing.Size(144, 20); this.textBox13.TabIndex = 8; this.textBox13.Text = "textBox13"; // // button2 // this.button2.Location = new System.Drawing.Point(184, 16); this.button2.Name = "button2"; this.button2.Size = new System.Drawing.Size(104, 24); this.button2.TabIndex = 12; this.button2.Text = "button2"; // // Form1 // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(292, 266); this.Controls.Add(this.button2); this.Controls.Add(this.panel1); this.Controls.Add(this.button1); this.Controls.Add(this.textBox10); this.Controls.Add(this.textBox9); this.Controls.Add(this.textBox8); this.Controls.Add(this.textBox7); this.Controls.Add(this.textBox6); this.Controls.Add(this.textBox5); this.Controls.Add(this.textBox4); this.Controls.Add(this.textBox3); this.Controls.Add(this.textBox2); this.Controls.Add(this.textBox1); this.Name = "Form1"; this.Text = "Form1"; this.Load += new System.EventHandler(this.Form1_Load); this.panel1.ResumeLayout(false); this.ResumeLayout(false); } #endregion  
    Em thêm cả một button nữa, tuy rằng thằng này không có tâp hợp Controls nhưng khi truy nhập tới cũng chẳng báo lỗi. Nhưng chương trình của anh thì vẫn chạy đúng. Chẳng hiểu thế nào nữa.?

  8. #8
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mã nguồn PHP:
    'code VB Public Sub Xoa(Co as Byte,Frm as Form) Dim Ctr As Control For Each Ctr in Frm.Controls If Ctr.Tag=Co then Ctr.Text="" Next End Sub  
    [IMG]images/smilies/biggrin.png[/IMG]
    ko biết C# có thuộc tính .Tag ko và công dụng của nó có giống với .Tag trong VB ko,nhưng nếu sử dụng .Tag để phân biệt các Controls thì bạn có thể thao tác bất kì lệnh nào,hoặc xử lý bất kì tình huống nào liên quan đến Control đó chứ ko chỉ Xóa nội dung text

  9. #9
    hay quá đúng cái mình cần ! thanks nhìu nha [IMG]images/smilies/smile.png[/IMG])

  10. #10
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    cho mình hỏi nếu mình muốn xóa nội dung ở 1 số textbox hay label thoy thì làm sao để nó chừa ra, cái vòng foreach đó sửa lại thế nào mong nhận được ý kiến của các bạn, mình xin cám ơn

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •