Net - Simple ListBox And Combobox With MultiColumn

Bộ sưu tập các thư viện hỗ trợ sẳn cho Visual Basic .NET và C#

Các điều hành viên: tungcan5diop, QUANITGROBEST

Nội quy chuyên mục
1. Gửi bài viết tại đây, Tester sẽ chuyển vào trong nếu bài viết đạt yêu cầu.
2. Gửi bài theo mẫu qui định: viewtopic.php?f=2&t=5
[ten][/ten]
[loai][/loai]
[ngonngu][/ngonngu]
[tacgia][/tacgia]
[chucnang][/chucnang]
[end][/end]
Hình đại diện của thành viên
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: Thứ 5 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 times

Net - Simple ListBox And Combobox With MultiColumn

Gửi bài by anhtuyenbk »

Tên: Simple ListBox And Combobox With MultiColumn
Loại: User Control
Ngôn ngữ lập trình: VB.Net
Tác giả: Nguyễn Anh Tuyên
Chức năng: Listbox, Combobox có nhiều cột
Simple ListBox And Combobox With MultiColumn
- Gần đây, mình được yêu cầu viết một cái ListBox hỗ trợ MultiColumn, hôm nay rảnh nên làm luôn và giới thiệu cho các bạn ai có nhu cầu sử dụng.
- Cái tên đã nói lên tất cả, ListBox và Combobox hỗ trợ nhiều Column.
Tập tin đính kèm
AccessSample.rar
(103.01 KiB) Đã tải về 3565 lần
combocol.jpg
Sửa lần cuối bởi 2 vào ngày anhtuyenbk với 0 lần sửa trong tổng số.
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang
tienlbhoc
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 415
Ngày tham gia: Thứ 7 14/07/2007 10:06 pm
Đến từ: Hà Nội
Been thanked: 1 time

Re: Net - Simple ListBox With MultiColumn

Gửi bài by tienlbhoc »

cho chữ dài quá nó chồng lên nhau rất khó coi :)
Diễn đàn và blog phần mềm tự làm :
http://my.opera.com/DienDanTienlbhoc/forums/
http://my.opera.com/tienlbhoc/blog/
Hình đại diện của thành viên
hoangthu1974
Guru
Guru
Bài viết: 813
Ngày tham gia: Thứ 5 09/03/2006 9:30 am
Đến từ: Hà Nội --> Tp. Hồ Chí Minh
Been thanked: 13 times
Tiếp xúc:

Re: Net - Simple ListBox With MultiColumn

Gửi bài by hoangthu1974 »

Rất hay.

Nhưng cái Column khi chứa dữ liệu quá dài sẽ đè lên column kế và dữ liệu khó nhìn. anhtuyenbk có thể sửa để nếu dữ liệu dài quá thì chỉ hiển thị vừa trong cột, phần còn lại thì ẩn đi được không?
Hình đại diện của thành viên
hoangthu1974
Guru
Guru
Bài viết: 813
Ngày tham gia: Thứ 5 09/03/2006 9:30 am
Đến từ: Hà Nội --> Tp. Hồ Chí Minh
Been thanked: 13 times
Tiếp xúc:

Re: Net - Simple ListBox With MultiColumn

Gửi bài by hoangthu1974 »

Mã: Chọn tất cả

    Protected Overrides Sub OnDrawItem(ByVal e As System.Windows.Forms.DrawItemEventArgs)        If Me.Items.Count = 0 Then Return        Dim dt As DataTable = Me.DataSource        e.DrawBackground()        Dim Pn As New Pen(Me.ForeColor)        Dim Br As Brush = Pn.Brush        If dt IsNot Nothing Then            Dim drawRect As RectangleF            Dim row As DataRowView = Me.Items(e.Index)            For Each item As ColumnItem In LstColumn                drawRect = New RectangleF(item.X, e.Bounds.Y, item.Width, e.Bounds.Height)                e.Graphics.DrawString(row(item.Name), Me.Font, Br, drawRect)            Next        Else            e.Graphics.DrawString(Me.Items(e.Index).ToString(), Me.Font, Brushes.Black, 0, e.Bounds.Y)        End If        e.DrawFocusRectangle()    End Sub
Thay đoạn code này trong ListboxMultiColumn.vb để cho ListBoxMultiColumn chỉ hiển thị theo giới hạn của cột và có màu chữ đúng với màu chữ đã chọn.
Hình đại diện của thành viên
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: Thứ 5 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 times

Re: Net - Simple ListBox With MultiColumn

Gửi bài by anhtuyenbk »

Thank hoangthu1974 đã fix giùm :D
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang
tindl88
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 363
Ngày tham gia: Thứ 7 26/04/2008 6:10 pm
Has thanked: 16 times
Been thanked: 10 times

Re: Net - Simple ListBox With MultiColumn

Gửi bài by tindl88 »

Em mù .NET
Cái này xài cho VB6 dc không anh. Nhìn đã quá.
cứng nhắc...vớ vẩn
tienlbhoc
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 415
Ngày tham gia: Thứ 7 14/07/2007 10:06 pm
Đến từ: Hà Nội
Been thanked: 1 time

Re: Net - Simple ListBox With MultiColumn

Gửi bài by tienlbhoc »

không dùng được đâu :)
Diễn đàn và blog phần mềm tự làm :
http://my.opera.com/DienDanTienlbhoc/forums/
http://my.opera.com/tienlbhoc/blog/
Hình đại diện của thành viên
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: Thứ 5 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 times

Re: Net - Simple ListBox With MultiColumn

Gửi bài by anhtuyenbk »

Cái này chỉ dùng cho Net thôi, ko dùng được cho VB6 đâu.
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang
Hình đại diện của thành viên
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: Thứ 5 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 times

Re: Net - Simple ListBox And Combobox With MultiColumn

Gửi bài by anhtuyenbk »

Đã làm thì làm cho tới cùng.
Tiếp tục tung ra phiên bản Combobox hỗ trợ MultiColumn up ở trang đầu tiên.
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang
Hình đại diện của thành viên
Dang Minh Du
Thành viên ưu tú
Thành viên ưu tú
Bài viết: 531
Ngày tham gia: Thứ 4 02/04/2008 2:08 pm
Đến từ: RGames Team
Has thanked: 3 times
Been thanked: 17 times
Tiếp xúc:

Re: Net - Simple ListBox And Combobox With MultiColumn

Gửi bài by Dang Minh Du »

tindl88 đã viết:Em mù .NET
Cái này xài cho VB6 dc không anh. Nhìn đã quá.
Tự viết 1 cái mà sài đi :) (kế thừa mấy cái mà viết lại thui :D )
~°Dòng Sông Mùa Thu°~
Studying...!
tienlbhoc
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 415
Ngày tham gia: Thứ 7 14/07/2007 10:06 pm
Đến từ: Hà Nội
Been thanked: 1 time

Re: Net - Simple ListBox And Combobox With MultiColumn

Gửi bài by tienlbhoc »

xem code listbox này rồi , code của bác tuyên có 30 dòng đổ lại thôi ;)) . Bảo bác anhtuyen đóng gói thành dll để mình dùng với , ai dè lão lại lười , vậy thì buộc lòng mình phải .... convert sang c# xài đỡ thôi >:)
Diễn đàn và blog phần mềm tự làm :
http://my.opera.com/DienDanTienlbhoc/forums/
http://my.opera.com/tienlbhoc/blog/
Hình đại diện của thành viên
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: Thứ 5 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 times

Re: Net - Simple ListBox And Combobox With MultiColumn

Gửi bài by anhtuyenbk »

tienlbhoc đã viết:xem code listbox này rồi , code của bác tuyên có 30 dòng đổ lại thôi ;)) . Bảo bác anhtuyen đóng gói thành dll để mình dùng với , ai dè lão lại lười , vậy thì buộc lòng mình phải .... convert sang c# xài đỡ thôi >:)
Net có hỗ trợ thừa kế nên mới 30 dòng.
Chứ còn VB6 à ko hỗ trợ thừa kế, viết 1000 dòng ko biết đủ chưa đó >:) >:)
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang
ShareToShare
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 168
Ngày tham gia: Thứ 5 27/11/2008 4:04 pm
Has thanked: 1 time

Re: Net - Simple ListBox And Combobox With MultiColumn

Gửi bài by ShareToShare »

các bác có ai biết viết cái Combobox with MultiColumn trong datagridview ( của C# ) không vậy ??
Nếu có thì share cho mọi người dùng với . Còn không có thì mình cùng bắt tay vào làm và thảo luận được không ???
Hình đại diện của thành viên
NoBi
Quản trị
Quản trị
Bài viết: 970
Ngày tham gia: Thứ 3 18/03/2008 1:22 pm
Đến từ: Sài Gòn
Has thanked: 57 times
Been thanked: 66 times
Tiếp xúc:

Re: Net - Simple ListBox And Combobox With MultiColumn

Gửi bài by NoBi »

File đính kèm ở trên có luôn Combobox with MultiColumn rồi. Chỉ cần bỏ công convert qua C#.
:>
ShareToShare
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 168
Ngày tham gia: Thứ 5 27/11/2008 4:04 pm
Has thanked: 1 time

Re: Net - Simple ListBox And Combobox With MultiColumn

Gửi bài by ShareToShare »

cái này mình thử chuyển sang C# nhưng xuất hiện các lỗi sau : mọi người chú ý tới
phần màu đỏ đậm thôi

Mã: Chọn tất cả

public class ComboBoxMultiCol:System.Windows.Forms.ComboBox    {        public ComboBoxMultiCol()        {            this.DrawMode =    System.Windows.Forms.DrawMode.OwnerDrawFixed;        }        protected override voidOnDrawItem(System.Windows.Forms.DrawItemEventArgs e)    {        //Ko co item thoat ra ngoai                if(this.Items.Count == 0) return;         //       [b][color=#FF0000] DataTable dt = this.DataSource;[/color][/b]        e.DrawBackground();        //Draw du lieu trong table        if (dt != null & dt.Rows.Count > 0){            DataRowView row = this.[b][color=#FF0000]Items[/color][/b](e.Index);// chổ này báo Items là property mà dùng như một method            foreach (ColumnItem item in LstColumn)            {                //Ve cac Tex len dong               e.Graphics.DrawString([b][color=#FF0000]row(item.Name)[/color][/b], this.Font, brush, newRectangleF(item.X + 20, e.Bounds.Y, item.Width, e.Bounds.Height)); //chổ này báo là row dùng như 1 method            }        }        else {           //e.Graphics.DrawLine(Pens.Red, 0, e.Bounds.Y + e.Bounds.Height - 2,//e.Bounds.Width, e.Bounds.Y + e.Bounds.Height - 2)            //Draw du lieu binh thuong           e.Graphics.DrawString(this.[b][color=#FF0000]Items[/color][/b](e.Index).ToString(), this.Font, brush,0, e.Bounds.Y); // Items dùng như 1 method        }        e.DrawFocusRectangle();        base.OnDrawItem(e);    }        public override string Text        {            get { return base.Text; }            set { base.Text = "a"; }        }        SolidBrush brush = newSolidBrush(Color.Black);        //co ve text        public override System.Drawing.Color ForeColor        {            get { return base.ForeColor; }            set            {                base.ForeColor = value;                brush.Color = value;            }        }        //Quan ly column item        private class ColumnItem        {            internal string Name;            internal int Width;            internal int X;            public ColumnItem(string pName, int pWidth)            {                this.Name = pName;                this.Width = pWidth;            }            public int GetXWidth()            {                return X + Width;            }        }        //Danh sách các column        List<ColumnItem> LstColumn = new List<ColumnItem>();        //Add Column        public void AddColumn(string Name, int Width)        {            ColumnItem p = new ColumnItem(Name, Width);            if (LstColumn.Count == 0)            {                p.X = 0;            }            else            {                p.X =    [b][color=#FF0000]LstColumn[/color][/b](LstColumn.Count - 1).GetXWidth();// LsrColums dùng như một method            }            LstColumn.Add(p);        }        //Xoa tat ca Column        public void ClearAllColumn()        {            LstColumn.Clear();        }        private void InitializeComponent()        {            this.SuspendLayout();            //            //ComboBoxMultiCol            //            this.DropDownStyle =    System.Windows.Forms.ComboBoxStyle.DropDownList;             this.ResumeLayout(false);        } 
ai biết thì làm ơn fix lại dùm
thanks!
betapcode
Bài viết: 4
Ngày tham gia: Thứ 6 26/03/2010 11:50 am

Re: Net - Simple ListBox And Combobox With MultiColumn

Gửi bài by betapcode »

anhtuyenbk đã viết:Đã làm thì làm cho tới cùng.
Tiếp tục tung ra phiên bản Combobox hỗ trợ MultiColumn up ở trang đầu tiên.
AnhtuyenBK ơi ! Em dow bản mới này của anh về chạy được rồi. Em sài cái Combo của anh trả về 1 Datarowview lên em sài cái chuyển đổi DirectCast để lấy Mã Add vào CSDL được rồi, nhưng khi em Edit dữ liệu từ FORM thì nó báo lỗi. Anh giúp em với.
HoangTuBe
Thành viên tích cực
Thành viên tích cực
Bài viết: 180
Ngày tham gia: Thứ 5 02/04/2009 1:38 pm
Has thanked: 10 times
Been thanked: 2 times

Re: Net - Simple ListBox And Combobox With MultiColumn

Gửi bài by HoangTuBe »

Xin chào!

Đúng đây là cái mình đang tìm hiểu. Nhưng hỏi hoài không ai hướng dẫn hết. Hôm nay thấy bài viết nào quá đúng ý. Nhưng đọc cũng không hiểu hết được cái nguyên lý hoạt động và kế thừa như thế nào.
Bạn nào có thể giải thích sơ lược giúp mình 2 cái control này với.
Xin chân thành cám ơn!
HoangTuBe
Thành viên tích cực
Thành viên tích cực
Bài viết: 180
Ngày tham gia: Thứ 5 02/04/2009 1:38 pm
Has thanked: 10 times
Been thanked: 2 times

Re: Net - Simple ListBox And Combobox With MultiColumn

Gửi bài by HoangTuBe »

Chào các bạn!

Trong khi mình DrawString thì có một số trường hợp số ký tự chữ vượt quá độ rộng của rectangle. Vậy làm thế nào để kiểm tra chự có vượt quá độ rộng rectangle hay không, nếu có thì chỉ DrawString vừa đủ và có kèm theo dấu "...".
Mong các bạn giúp đỡ.
muaphonui_2010
Thành viên ưu tú
Thành viên ưu tú
Bài viết: 553
Ngày tham gia: Thứ 6 26/11/2010 1:15 pm
Đến từ: TP.HCM
Has thanked: 190 times
Been thanked: 36 times
Tiếp xúc:

Re: Net - Simple ListBox And Combobox With MultiColumn

Gửi bài by muaphonui_2010 »

anhtuyenbk đã viết:Tên: Simple ListBox And Combobox With MultiColumn
Loại: User Control
Ngôn ngữ lập trình: VB.Net
Tác giả: Nguyễn Anh Tuyên
Chức năng: Listbox, Combobox có nhiều cột
Simple ListBox And Combobox With MultiColumn
- Gần đây, mình được yêu cầu viết một cái ListBox hỗ trợ MultiColumn, hôm nay rảnh nên làm luôn và giới thiệu cho các bạn ai có nhu cầu sử dụng.
- Cái tên đã nói lên tất cả, ListBox và Combobox hỗ trợ nhiều Column.
Với bài mẫu này mình về mình chỉnh thuộc tính của ComboBoxMultiCol1 : DropDownstyle = DropDown ( nguyên văn của nó là DropDownList) thì không được.( với mục đích là để gỏ vào và cho nó tìm đến mục mình cần)
Vậy cho mình hỏi : mình muốn cai ComboBoxMultiCol1 cho phép mình gõ vào và lọc dần đến mục mình cần.( chứ combobox 1000 dòng thì lôi chuột chắc đuối mất hjhhj)
Mình thấy nó hiện nhiều cột như vậy là hay rồi , nhưng làm thế nào để cho nó cho ta gõ vào và khi chọn ( hay enter) thì nó chỉ lấy 1 cột thôi. ( có nghĩa là hiện thì nhiều cột nhưng chỉ lấy 1 cột thôi.
Chứ nếu hiện nhiều trường vô 1 cột và lấy y chan cột đó thì combobox bình thường cũng làm được , bằng cách ở query ta tạo 1 trường ghép nối các trường khác lại và từ trường ghép này ta cho ra Combobox.
hoangchung333
Bài viết: 2
Ngày tham gia: Thứ 4 04/12/2013 8:30 pm

Re: Net - Simple ListBox With MultiColumn

Gửi bài by hoangchung333 »

Thay đoạn code này trong ListboxMultiColumn.vb để cho ListBoxMultiColumn chỉ hiển thị theo giới hạn của cột và có màu chữ đúng với màu chữ đã chọn.
Cái "ListboxMultiColumn.vb " nằm ở đâu vậy anh. cảm ơn nhiều
Đăng trả lời

Quay về