Trang chủ » CSharp » CSharp Kinh nghiệm và Thủ thuật Phần 2

CSharp Kinh nghiệm và Thủ thuật Phần 2


Trước đó : Phần 1

1. duyệt nhanh một điều khiển (controls) trên form

ví dụ sau: duyệt đệ qui các textbox

 

private void ClearForm(Control ctr)
        {
            if (ctr.GetType()==typeof(TextBox))
            {
                ctr.Text = "";
            }
            // Duyệt đệ quy
            foreach (Control childCtr in ctr.Controls)
            {
                ClearForm(childCtr);
            }
        }

2.Tạo hình dáng của form theo ý muốn từ các file ảnh

Có 2 cách để làm việc này:
Cách 1: Bạn dùng Window Region để tạo hình dáng form theo ý muốn.
Cụ thể hơn, bạn có một hình bất kỳ theo ý muốn, các phần không muốn hiển thị sẽ có một màu đặc biệt nào đó (Key color, Transparent coloer), dùng thuật toán tạo Region từ hình đó, set giá trị Region cho form.

public static Region BitmapToRegion(Bitmap bitmap, Color transparencyColor)
{
      if (bitmap == null)
          throw new ArgumentNullException("Bitmap", Strings.BitmapCannotBeNull);
 
      int height = bitmap.Height;
      int width = bitmap.Width;
 
      GraphicsPath path = new GraphicsPath();
 
      for (int j=0; j<height; j++ )
          for (int i=0; i<width; i++)
         {
              if (bitmap.GetPixel(i, j) == transparencyColor)
              { 
                    continue;
              }
 
              int x0 = i;
 
              while ((i < width) && (bitmap.GetPixel(i, j) != transparencyColor))
                     i++;
 
              path.AddRectangle(new Rectangle(x0, j, i-x0, 1));
         }
 
        Region region = new Region(path);
        path.Dispose();
        return region;
    }
}

Cách dùng:

Bitmap background = new Bitmap("background.gif");
this.Region = GraphicsUtility.BitmapToRegion(background, Color.Green);

Cách 2: Dùng Layered windows. Bạn tham khảo cách này ở bài viết này:
http://www.codeproject.com/cs/media/per … _sharp.asp Cách 2 này tốt hơn

3.Ngăn không cho dán vào một TextBox (sử dụng Ctrl + V hay menu ngữ cảnh)

Trước tiên, đặt thuộc tính ContextMenu của TextBox là rỗng, điều này ngăn cản menu ngữ cảnh mặc định hiển thị khi bấm chuột phải vào TextBox. Tiếp theo, phủ quyết phương thức ProcessCmdKey của lớp cơ sở như sau:

protected override bool ProcessCmdKey(( Link & word was banned ) Message msg, Keys keyData)
{
       if(keyData == (Keys.Control | Keys.V))
               return true;
       else return base.ProcessCmdKey(( Link & word was banned ) msg, keyData);
}
Advertisements

Bình luận

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất / Thay đổi )

Connecting to %s