Showing posts with label toolbox. Show all posts

Chú ý khi sử dụng ProgressBar

thuvienwinform - Khi sử dụng ProgressBar để hiển thị phần trăm công việc đã hoàn thành trong chương trình làm nó trở nên đẹp mắt hơn rất nhiều, nhưng kéo theo chương trình sẽ chạy chậm hơn rất nhiều nếu không sử dụng điều khiển này đúng cách!
Ví dụ: https://www.dropbox.com/s/nk8hnadpxo3r6n2/ThuVienWinform-ChuYKhiSuDungProgressBar.rar?dl=0
Trong tệp ví dụ này mình chạy vòng for 10000000 lần (for(int i = 1; i <= 10000000; i++) và dùng 1 ProgressBar để hiện thị xem vòng for chạy được bao nhiêu phần trăm rồi.

Trường hợp 1: ProgressBar.Maximum = 10000000; (cứ i tăng là cập nhật ProgressBar.Value - Cập nhật ProgressBar 10000000 lần).
Trường hợp 2: ProgressBar.Maximum = 100; (Tính toán cập nhật ProgressBar đúng 100 lần).
Với trường hợp 1 tốn 15s, trường hợp 2 chưa đến 1s. Vậy chứng tỏ rằng mỗi lần cập nhật ProgressBar.Value tốn rất rất nhiều thời gian, có lẽ vì liên quan đến đồ họa :3

Kết: Vị vậy khi sử dụng điều khiển này cần tính toán làm sao cho số lần cập nhật ProgressBar.Value không quá nhiều lần mà vẫn hiển thị được phần trăm công việc đang thực hiện

Thêm thuộc tính, sự kiện cho các điểu khiển trong winform

thuvienwinform - Apply Attributes in Windows Forms Controls (áp dụng các thuộc tính vào các điều khiển trong winform) sẽ giúp chúng ta thêm những sự kiện, thuộc tính chúng ta cần vào các control này. Ví dụ như thêm tính năng chuẩn hóa cho textBox, hoặc giới hạn độ dài cho textBox. Rất tiện trong quá trình code và sau này, tức là dùng cho được nhiều sản phẩm. Chính vì sự hữu ích này, hôm nay mình xin được chia sẻ cách thêm thuộc tính và sự kiện cho các điều khiển trong winform.


Tải về project demo: https://www.dropbox.com/s/6ih1d0oephk97r2/thuvienwinform-ThemThuocTinhChoControl.rar (46KB)

Bài viết này sẽ giới thiệu việc thêm tính năng chuẩn hóa và giới hạn độ dài cho TextBox. Gồm 2 phần
- Phần I: Thêm thuộc tính, sự kiện cho 1 điều khiển dựa trên lớp kế thừa
- Phần II: Tạo 1 điều khiển chứa nhiều điều khiển (từ các điều khiển đã có)

Chú ý: nếu tải về mở ra lỗi thì ấn F5 cho nó chạy sẽ hết lỗi (Do nó chưa nạp các điều khiển tự tạo vào)
- Để đọc code dễ ấn chuột phải vào code -> Outlining -> Collapse to Definitions (Ctrl + M,O).
- Để xem code của cotrol không có Design: ấn F7 hoặc ấn vào Switch to code...

I. Thêm thuộc tính, sự kiện cho 1 điều khiển

1. Thêm thuộc tính


- Rất đơn giản thôi. Đầu tiên thêm 1 class với tên: MyTextBox

- Class này kế thừa của TextBox


- Sau đó ta thêm các thuộc tính cho MyTextBox như sau:

[Category("Thuộc tính xây dựng thêm")]
[Description("Chuẩn hóa văn bản nhập vào. Viết hoa kí tự sau dấu cách")]
[DefaultValue(true)]
public bool ChuanHoa
{
    get;
    set;
}

private DoDai _doDai;//Cái này phục vụ cho việc thêm sự kiện sau này
[Category("Thuộc tính xây dựng thêm")]
[Description("Định độ dài cho văn bản \nNgắn: 30 kí tự\nBình thường: 60 kí tự\nDài:255 kí tự")]
public DoDai ĐộDài
{
    get { return _doDai; }
    set{_doDai = value;}
}

Với DoDai là 1 enum

public enum DoDai
{
    Ngắn,
    BìnhThường,
    Dài,
    TốiĐa
}

Trở lại phần thiết kế ta đã có được như này


2. Xây dựng chức năng chuẩn hóa, giới hạn độ dài

a. Chuẩn hóa
- Chúng ta sẽ chuẩn hóa sau khi nhập chữ vào MyTextBox xong. Sử dụng sự kiện LostFocus và ấn nút Enter để thực hiện chuẩn hóa. this.Text = ChuanHoaXau(this.Text);

protected override void OnLostFocus(EventArgs e)
{
    base.OnLostFocus(e);
    ThucHienChuanHoa();
}

protected override void OnKeyDown(System.Windows.Forms.KeyEventArgs e)
{
    base.OnKeyDown(e);
    //Ấn enter
    if (e.KeyCode == System.Windows.Forms.Keys.Enter)
        ThucHienChuanHoa();
}

private void ThucHienChuanHoa()
{
    //Chuẩn hóa xâu trong textBox
    this.Text = ChuanHoaXau(this.Text);//Các hàm còn lại xem trong project demo nha
    //Đưa con trỏ nhấp nháy về cuối dòng
    this.Select(this.Text.Length, this.Text.Length);
}

Kết quả:


b. Giới hạn độ dài
- Để giới hạn độ dài ta sử dụng sự kiện TextChanged
protected override void OnTextChanged(EventArgs e)
{
    base.OnTextChanged(e);
    int doDaiToiDa = 0;
    switch (ĐộDài)
    {
        case DoDai.Ngắn         : doDaiToiDa = 30; break;
        case DoDai.BìnhThường   : doDaiToiDa = 60; break;
        case DoDai.Dài          : doDaiToiDa = 255; break;
        default: break;
    };
    if (ĐộDài != DoDai.TốiĐa)
        if (this.Text.Length > doDaiToiDa)
            ThietLapDoDai(doDaiToiDa);
}

/// <summary>
/// Thiết lập độ dài kí tự trong textBox
/// </summary>
/// <param name="ddtd">Độ dài tối đa cho phép</param>
private void ThietLapDoDai(int ddtd)
{
    //Dữ lại đoạn văn bản cho phép
    this.Text = this.Text.Substring(0, ddtd);
    //Đưa con trỏ nhấp nháy về cuối dòng
    this.Select(ddtd, ddtd);
}

- Cách này khá thủ công như có lẽ như vậy sẽ dễ hiểu hơn. Để tối ưu thì ta sửa luôn việc set get biến Text của TextBox. Chuẩn hóa luôn khi set get

3. Bắt sự kiện thay đổi giá trị ĐộDài

a. Sử dụng delegate EventHandler
- Tạo sự kiện
public event EventHandler ThayDoiDoDai;//Khai báo sự kiện

- Code cho sự kiện
protected virtual void OnThayDoiDoDai()
{
    EventHandler handler = this.ThayDoiDoDai;
    if (handler != null)
    {
        handler(this, EventArgs.Empty);
    }
}

- OK. Đã có sự kiện! Bây giờ đặt vào chỗ cần thực hiện sự kiện. Đó là khi giá trị ĐộDài thay đổi. Là lúc nào nhỉ?? Chính là lúc set get giá trị cho nó
public DoDai ĐộDài
{
    get { return _doDai; }
    set
    {
        _doDai = value;
        //Mỗi khi thay đổi giá trị -> set, get 1 lần => chính là sự kiện thay đổi giá trị
        OnThayDoiDoDai();
    }
}


b. Tạo lớp kế thừa của EventHandler để tạo thêm các giá trị cho sự kiện
- Ví như sự kiện CellClick của DataGridView có thể lấy giá trị hàng (e.RowIndex). Vậy làm như thế nào để thêm các thuộc tính cho sự kiện. Ta cần tạo 1 lớp kế thừa của thằng EventHandler như sau:
//Tạo class bằng file mới hoặc trong cùng class MyTextBox đều được. Xem thêm trong project demo
public class ThayDoiGiaTriDoDai : EventArgs
{
    public DoDai GiaTriDoDai { get; set; }
    public bool DuocChuanHoa { get; set; }
    public string ThongTinChoSuKien
    {
        get { return "Sự kiện thay đổi giá trị độ dài của MyTextBox"; }
    }
}

- Thêm sự kiện sử dụng lớp kế thừa này
[Category("Sự kiện Xây dựng thêm")]
[Description("Bắt sự kiện thay đổi độ dài. Dùng class kế thừa")]
public event EventHandler<ThayDoiGiaTriDoDai> ThayDoiDoDaiDungClass;//Khai báo sự kiện
/// <summary>
/// Code cho sự kiện
/// </summary>
/// <param name="s">Nạp giá trị đầu vào để hiển thị ra khi sử dụng sự kiện</param>
protected virtual void OnThayDoiDoDai(ThayDoiGiaTriDoDai s)
{
    EventHandler<ThayDoiGiaTriDoDai> handler = this.ThayDoiDoDaiDungClass;
    if (handler != null)
    {
        handler(this, s);
    }
}

- OK bây giờ sửa lại lúc set get là được
public DoDai ĐộDài
{
    get { return _doDai; }
    set
    {
        _doDai = value;
        //Mỗi khi thay đổi giá trị -> set, get 1 lần => chính là sự kiện thay đổi giá trị
        SuKien = new ThemThuocTinhChoControl.ThayDoiGiaTriDoDai();
        SuKien.GiaTriDoDai = this.ĐộDài;
        SuKien.DuocChuanHoa = this.ChuanHoa;
        OnThayDoiDoDai(SuKien);
    }
}

- Kết quả:



II. Tạo UserControl từ các control khác

- Trong thực tế có nhiều form ta có các kiểu bố trí giống nhau, có sự kết hợp của nhiều control giống nhau. Ví dụ như tập hợp các textBox để nhập thông tin họ tên ngày sinh,...thì ta chỉ cần tạo 1 lần vào sử dụng cho các form khác nhau. Để thực hiện việc này ta làm như sau:

- Tạo 1 UserControl

- Sau đó thì kéo các điều khiển khác vào

- Ok có thể nói là xong rùi nhưng ta muốn thêm các thuộc tính, sự kiện cho thằng này thì làm tương tự phần I là OK.
- Ví dụ thêm thuộc tính tự động Anchor:
public bool TuDongDanCachCacPhanTu
{
    get { return _tuDongDanCachCacPhanTu; }
    set 
    { 
        _tuDongDanCachCacPhanTu = value;
        if (_tuDongDanCachCacPhanTu)
        {
            this.Anchor = AnchorStyles.Bottom | AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;//This ở đây là UserCOntrol
            this.myTextBox1.Anchor = AnchorStyles.Bottom | AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
            this.myTextBox2.Anchor = AnchorStyles.Bottom | AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
        }
        else
        {
            this.Anchor = AnchorStyles.Top | AnchorStyles.Left;
            this.myTextBox1.Anchor = AnchorStyles.Top | AnchorStyles.Left;
            this.myTextBox2.Anchor = AnchorStyles.Top | AnchorStyles.Left;
        }
    }
}
- Sau khi đã thêm tạo được các file cs chỉ cần thêm vào các project khác là ok.

Nếu thấy hữu ích hãy để lại bình luận hoặc ấn G+. Cảm ơn các bạn đã đọc bài viết
4/25/2014
Đăng bởi :

Hint Text | Gợi ý trong textbox

Hint text (water text) trong C#

Có 2 cách để giải quyết vấn đề này

Cách 1: yêu cầu đã cài DotnetBar: http://thuvienwinform.blogspot.com/p/blog-page.html

Đề có chữ gợi ý trong textBox rất đơn giản, ta sẽ sử dụng control textBoxX của DotnetBar
Chỉ cần gõ chữ gợi ý vào phần waterMark Text của textBoxX là được



Chú ý: nếu cài DotnetBar rùi mà không thấy control textBoxX thì xem phần "- Thêm ToolBox của DotNetBar vào Visual Studio:" tại: http://thuvienwinform.blogspot.com/p/blog-page.html#Huong-dan-add-control-dotnetbar




Cách 2: không cần cài DotnetBar

- Nhưng mình nghĩ thì cài DotnetBar luôn đi vì nó có nhiều cái sẵn có rất hay!
- Để thực hiện công viện này với textbox mặc định của visual thì cần thiết kế 1 lớp, đó là watermark: http://www.codeproject.com/Articles/27849/WaterMark-TextBox-For-Desktop-Applications-Using-C
10/13/2013
Đăng bởi :
Nhãn :

Control NotifyIcon trong C# | Tạo icon trên khay hệ thống

Đầy đủ cách sử dụng NotifyIcon trong C#



Các Icon trong khay hệ thống (có thể kéo ra ngoài)
- Demo NotifyIcon: https://www.dropbox.com/s/v1ajn6w6suzidiu/NotifyIcon-thuvienwinform.rar
- Sử dụng cơ bản giống như trong demo.
- Tác dụng chính của nó là để kích hoạt lại Form khi nó bị ẩn xuống (Hide). Các thuộc tính của nó như sau:

Tên thuộc tính
Chức năng
(name)
Tên của NotifyIcon. Nó như tên biến vậy
BallootipIcon
Biểu tượng thông báo hiện ra khi ấn vào Icon này (phải kết hợp sự kiện Click)
BalloontipText
Chữ hiện ra khi ấn vào Icon
ContextMenuStrip
Menu lựa chọn khi ấn chuột phải vào Icon
ContextMenuTitile
Tiêu để chữ hiện ra khi tác động vào Icon
Icon
Icon (biểu tượng) hiện ở khay hệ thống
Text
K có tác dụng lắm J

- 2 Sự kiện hay sử dụng đối với NotifyIcon là: Click và MouseDoubleClick.
+ Click: sự kiện khi ấn vào biểu tượng trong khay hệ thống
+ DoubleClick: khi click kép vào nó (để hiện Form trở lại)

9/26/2013
Đăng bởi :
Nhãn :

Thuộc tính và sự kiện của form

Form thiết kế

 I. Các thuộc tính của form


 Các thuộc tính

Thuộc tính
Chức năng
(name)
Tên Form. Nó như một biến vậy. Quan trọng
AllowDrop
Cho phép kéo thả
AutoSizeMode
+GrowOnly: cho phép thay đổi kích thước form
+GrowAndShrink: không cho phép thay đôi kích thước form
BackColor
Màu nền Form
ContexMenuStrip
Menu xuất hiện khi chuột phải lên Form
Cursor
Con trỏ chuột khi rê trên form
KeyPreview
Cho phép nhận phím hay không (cái này kết hợp với sự kiện nhận phím)
Opacity
Độ trong suốt của form
ShowInTaskbar
Hiện thị ở thanh taskbar khi chạy form (true/false)
StartPosition
Vị trí xuất hiện của form
+CenterScreen: Giữa màn hình
+CenterParent: Giữa Form gọi ra nó (form cha)
TopMost
Hiển thị đè lên các form khác
WindowState
Trạng thái của form
Text
Chữ hiển thị khi form chạy

Ngoài việc chỉnh trực tiếp ta có thể dùng code. VD:
Form1.Text = "Tên Form 1";
Form1.ActiveForm.TopMost = true;
...

II. Các sự kiện trên form



Các sự kiện trên form ít khi được sử dụng. Một số sự kiện thường được sử dụng đó là:
+ DragDrop: kéo thả đối tượng vào Form
+ Keyup: xác định phím ấn.



































9/18/2013
Đăng bởi :
Nhãn :

Các sự kiện giống nhau của các control trong C#

Sự kiện
Điều kiện xẩy ra
Click
Ấn vào control đó
DoubleClick
Nháy kép vào control đó
KeyDown
Bắt đầu ấn phím
KeyUp
Đẵ ấn phím xong
KeyPress
Trong khi ấn phím
MouseDown
Ấn chuột
MouseUp
Thả chuột
MouseHover
Rê chuột qua control
MouseLeave
Rê chuột ra khỏi control
Đăng bởi :
Nhãn :

Các thuộc tính giống nhau của các control trong C#

Thuộc tính
Chức năng
(name)
Tên đại diện cho control đó. Nó như một tên biến vậy. Rất quan trọng
Achor
Cố định control này khi thay đổi kích thước form
BackColor
Màu nền của control đó
BackgroundImage
Hình nền của control đó
ContextMenuStrip
Menu khi ấn chuột phải lên control
Cursor
Hình con chuột khi rê lên control
Dock
Gần giống với Anchor nhưng nó sẽ chiếm toàn bộ phần được được đặt. VD chọn Dock là bottom thì toàn bộ phần dưới form sẽ không đặt được phần từ khác
Enabled
Có cho phép sử dụng nó hay không.
Font
Chứa các thuộc tính về màu, cỡ, kiểu chữ mô tả (hoặc nội dung, giá trị) control đó
Location
Vị trí của control đó trên form
Tag
Nội dung đánh dấu của control đó. Nó giúp control có hai giá trị miêu tả. Tag khồn được hiện thị
Text
Nội dung miêu tả control đó. Hoặc chính là giá trị của nó (với textbox)
TextAlign
Căn lề nội chữ miêu tả của control đó
Visible
Hiển thị nó lên form hay không.
Đăng bởi :
Nhãn :

CheckBox trong C#


Chức năng: Tạo lựa chọn. Làm điều kiện để thực hiện bước kế tiếp (rất hay gặp: "I Agree..." khi cài đặt phần mềm).
Vậy chúng ra hãy cùng xem nó có gì và có thể làm những gì nhé!

I. Các thuộc tính của checkBox (properties).


Thuộc tính
Chức năng
(name)
Nó như một tên biến đại diện cho checkbox này. Rất quan trọng
BackColor
Màu nền checkbox
Checked
Đã chọn (check) hay chưa. (true/false)
CheckStale
Gần giống Checked nhưng có thêm  Indenterminate
Enabled
Có cho phép check hay không (true/false)
Text
Nội dung hiện ra bên cạnh checkbox nhằm mô tả textbox

Các thuộc tính còn lại tham khảo tại: http://thuvienwinform.blogspot.com/2013/09/cac-thuoc-tinh-giong-nhau-cua-cac.html
II. Các sự kiện của checkBox



Sự kiện của checkbox được dùng nhiều nhất có lẽ là sự kiện CheckedChange: là sự kiện xẩy ra khi thay đổi trạng thái (chọn hoặc không chọn) của checkbox.
Ngoài ra còn một số sự kiện như MouseHover, MouseLeave...Tham khảo thêm tại: http://thuvienwinform.blogspot.com/2013/09/cac-su-kien-giong-nhau-cua-cac-control.html
Đăng bởi :
Nhãn :

Textbox trong C#

Textbox C#

Đầy đủ về textBox trong C#


Demo Textbox C#: https://www.dropbox.com/s/0szsc8q1m1s6jrx/TextBox-thuvienwinform.blogspot.com.rar
Chức năng chính: Textbox chủ yếu là để nhập dữ liệu đầu vào, ngoài ra còn có thể dùng để xuất dữ liệu.

TextBox là một control vừa có khả năng xuất thông tin, vừa có khẳ năng nhập thông tin! Chúng ta hãy cùng xem nó có gì và có thể làm những gì nhé.

I. Các thuộc tính của Textbox

Các thuộc tính textbox



Tên thuộc tính
Chức năng
(name)
Tên của textbox (như kiểu tên biến vậy). Nó rất quan trọng
Autocomplete
(Sẽ nói ở dưới)
BackColor
Màu nên của texbox
BorderStyle
Kiều viền texbox
Cursor
Con trỏ chuột khi rể chuột qua texbox
Enabled
Cho phép copy chữ và sửa trong texbox hay không (true/false)
Font
Các thuộc tính trong này cho phép thay đổi kiểu chữ, cỡ chữ…trong textbox
ForeColor
Màu chữ trong textbox
Multiline
Cho phép nhiều dòng
PaswordChar
Khi nhập vào sẽ được mã hóa thánh dấu *
ReadOnly
Gần giống Enabled. Nhưng vẫn có thể bôi đen copy được
ScrollBars
Khi chữ vượt quá kích thước textbox thì sẽ xuất hiện thanh cuộn. Nên bật Multiline
Text
Nội dung (giá ttrị) trong textbox. Kiểu dũ liệu: string
Visible
True: hiện trên form.
False: Ẩn trên form
WordWrap
Ngắt dòng khi chạm lề

Một số thuộc tính cơ bản của textbox
Tham khảo thêm: http://thuvienwinform.blogspot.com/2013/09/cac-thuoc-tinh-giong-nhau-cua-cac.html
- Ngoài ra cũng có thể thay đổi các thuộc tính băng code. VD: Texbox1.text = "abc"; Textbox1.Enabled = true;...

Chức năng Autocomplete gợi ý, tự hoàn thiện của textbox C#:
- Đây là chức năng gợi ý (hoặc tự hoàn thiện) từ khi gõ.
- Nó gồm có 3 thuộc tính:
+ AutocompleteCustomSocure: Là nơi chứa những từ gợi ý. Khi gõ vào những từ gần giống trong này thì nó sẽ xuất hiện gọi ý. (chỉ dùng làm nguồn cho chế độ CustomSoure)
+ AutocompleteMode: kiểu gợi ý. Có 3 chế độ là
++ Suggest: gợi ý ở dạng danh sách, muốn chọn phải ấn chuột hoặc ấn phím di chuyển
++ Append: khi gõ từ gần đúng thì nó sẽ hoàn thiện luôn
++ SuggestAppend: (nên dùng) nó kết hơp cả 2 cái trên. Tức là sẽ vừa hiện thị danh sách gợi ý vừa hoàn thiện luôn.
+AutocompleteSoure:
++CustomSoure: sẽ lấy những từ đã gõ trong AutocompleteCustomSocure để gợi ý
++HistoryList: lấy những từ đã gõ để gợi ý
++…


II. Các sự kiện của textbox

Các sự kiện texbox

- Cũng giống như button, để thêm sự kiện cho texbox thì chỉ cẩn nháy đúp chuột vào tên sự kiện cần thêm vào là xong!
Một số sự kiện thường dùng
- TextChanged: sự kiện xẩy ra khi chữ trong textbox thay đổi
- KeyUp: sự kiện khi đang gõ chữ trong textbox (bắt đầu ấn nút). Ứng dụng rất lơn. VD: khi ấn Enter thì chuyển chữ trong textbox vào một biến chẳng hạn
- Ngoài ra còn có KeyDown, KeyPress,..cũng có chức năng gần tương tự(?)   
- MouseHover, MouseLeave tương tự phần button
- Tham khảo thêm: http://thuvienwinform.blogspot.com/2013/09/cac-su-kien-giong-nhau-cua-cac-control.html
9/17/2013
Đăng bởi :
Nhãn :

Nhận ngay 100$ cho VPS

Mua hàng ủng hộ page

Ủng hộ page

Nhãn

Code (45) Team Foundation Server (17) Database (14) News (14) product (13) toolbox (10) Linq (9) SoftDesign (8) XNA (6) API (5) Project (5) item (4)

- Bản quyền thuộc về Thư Viện WinForm - Giao diện: Metrominimalist - Thiết kế: Johanes Djogan -