2009-05-02 27 views
6

Tôi đang viết một ứng dụng C# (WinForm) với ListBox có nội dung do người dùng thêm. Bây giờ, tôi có thể có một nút bình thường dưới ListBox để loại bỏ các mục, nhưng tôi muốn có nút ngay bên cạnh nội dung, do đó là bên trong của ListBox.C# - Thêm nút bên trong ListBox

Như thế này:

  • Content 1 | X
  • Nội dung 2 | X
  • ...
  • Nội dung 5 | X

Vấn đề là tôi thiếu kinh nghiệm trong .NET vì vậy tôi không có đầu mối về cách điều này có thể thực hiện được với tất cả các điều khiển tự động đang diễn ra. Tôi đã googled nó, nhưng đã đưa ra không có kết quả có ý nghĩa.

Bất kỳ gợi ý, manh mối hoặc đoạn trích nào để đạt được điều này đều được hoan nghênh! :)

+0

Win Forms hoặc ASP.NET? – Canavar

+0

Và tôi bị downvoted để đọc câu hỏi ....: thở dài: –

+0

@Canavar WinForms. @Deviant Downvoted? – Vectovox

Trả lời

3

Vì vậy, người ta có thể thực hiện kiểm soát tùy chỉnh nhưng đối với ứng dụng của tôi, nó thực sự không đáng để gây rắc rối.

Những gì tôi đã làm là tạo một DataGrid, làm cho nó giống với một ListView nhưng với bùng phát riêng của nó.Tôi đã làm điều này bởi vì DataGrid đã có một buttoncontrol được xây dựng trong các tế bào của nó.

Có, tôi biết, loại tẻ nhạt "hack", nhưng nó hoạt động như một sự quyến rũ! :)

Đạo cụ cho Shay Erlichmen, người đã khiến tôi suy nghĩ về việc mở rộng ListBox của mình. Xem những gì tôi đã làm ở đó? ;)

+1

Có, DataGrids hoạt động tốt cho điều này, mặc dù chúng phức tạp hơn một ListBox. Bạn có thể làm cho nó trông giống như một bảng trong HTML hoặc một số kiểu tương tự. –

0

Tôi không biết tại sao bạn muốn thực hiện cụ thể điều đó? Tôi sẽ đặt một nút ở phía dưới để xóa bất kỳ mục nào đã chọn trong hộp danh sách. Điều đó được coi là cách làm thông thường trừ khi bạn muốn sử dụng jquery và đặt một sự kiện onClick vào hộp danh sách gửi một cuộc gọi để xóa mục nếu nó được lưu trữ trong cơ sở dữ liệu hoặc xóa mục khỏi danh sách trên trang .

+3

Vâng, tôi không bình thường và tôi có xu hướng đi đến lựa chọn nâng cao hơn. Vấn đề là một nút (hoặc iconbutton) ở phía bên là dễ chịu hơn cho mắt và cũng làm giảm số lần nhấp chuột bằng một lần nhấp cho mỗi lần xóa. – Vectovox

1

Giả sử đó là ứng dụng WinForms

Bạn cần có một điều khiển tùy chỉnh cho điều đó. Tôi sẽ kiểm tra xung quanh các nhà cung cấp như http://www.devexpress.com/Products/NET/Controls/WinForms/Editors/editors/ListBoxes.xml có thể ai đó biết về một điều khiển mà cụ thể làm điều đó.

+0

Được rồi, chỉ cần những gì tôi cần nghe, kiểm soát tùy chỉnh nó là :) – Vectovox

+0

Bạn có thể tự kiểm soát, nhưng nó không phải là một nhiệm vụ tầm thường –

2

sử dụng Hệ thống; bằng System.Collections.Generic; bằng System.Windows.Forms;

namespace WindowsFormsApplication11 { public partial class Form1: Form { Danh sách _items = new List();

public Form1() 
    { 
     InitializeComponent(); 

     _items.Add("One"); 
     _items.Add("Two"); 
     _items.Add("Three"); 

     listBox1.DataSource = _items; 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     // The Add button was clicked. 
     _items.Add("New item " + DateTime.Now.Second); 

     // Change the DataSource. 
     listBox1.DataSource = null; 
     listBox1.DataSource = _items; 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     // The Remove button was clicked. 
     int selectedIndex = listBox1.SelectedIndex; 

     try 
     { 
      // Remove the item in the List. 
      _items.RemoveAt(selectedIndex); 
     } 
     catch 
     { 
     } 

     listBox1.DataSource = null; 
     listBox1.DataSource = _items; 
    } 
} 

}

private void button1_Click (object sender, EventArgs e) { // Nút Add được nhấp. // ...

button2.Enabled = true; 

}

private void button2_Click (object sender, EventArgs e) { // Nút Remove được nhấp. // ....

if (listBox1.Items.Count == 0) 
{ 
    button2.Enabled = false; 
} 

}

+0

Nên đọc câu hỏi tốt hơn;) –

+0

Vâng, tôi không nghĩ bạn đọc câu hỏi rất kỹ lưỡng :) – Vectovox

+0

@Alb Câu hỏi nói rằng "do đó là bên trong của ListBox". Dù sao kỹ thuật này của listbox.datasource = list nhỏ hơn nhiều so với clear, add. Vì vậy, vẫn còn câu trả lời là giá trị. – prabhakaran

6

Thay vì ListBox bạn có thể sử dụng ListView, ListView có ability to add custom column types.

+0

ListBox và ListView là dặm ngoài người đàn ông. Có lẽ anh ta nên ném vào một cây kiểm soát cho biện pháp tốt –

+1

ListView trong chế độ báo cáo mà không có tiêu đề với dòng đầy đủ lựa chọn và không đường lưới nhìn và hành xử giống như ListBox. Nó dễ dàng hơn để thêm các nút (hoặc bất kỳ điều khiển khác cho rằng vấn đề) như là một mục phụ, tốt hơn sau đó cố gắng để tạo ra một điều khiển tùy chỉnh. –

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