m.cafe.daum.net/smbitpro/R7EG/3#attach
Form 속성
이번에는 Form의 속성에 대해 살펴보기로 하자.
동작 관련
속성명 |
형식 |
설명 |
AllowDrop |
bool |
사용자가 파일 등을 마우스로 끌어다 놓기를 허용 여부 Control에서 상속 |
AutoValidate |
AutoValidate |
포커스가 변경될 때 이 컨테이너 컨트롤에 대한 유효성 검사가 자동으로 수행되는지 여부 ContainerControl에서 상속 |
ContextMenuStrip |
ContextMenuStrip |
이 컨트롤과 연결된 ContextMenuStrip Control에서 상속 |
DoubleBuffered |
bool |
이 컨트롤을 그리기 작업을 할 때 깜빡이는 것을 줄이기 위해 보조 버퍼를 사용할 지를 결정하는 속성 Control에서 상속 |
Enabled |
bool |
사용자와 상호 작용이 가능한지 여부 Control에서 상속 |
ImeMode |
ImeMode |
IME 입력기 모드 |
1. AllowDrop
먼저 Label(빨간색)컨트롤과 PictureBox(파란색)컨트롤을 폼에 배치를 하자.
Form1의 속성 창에서 AllowDrop을 True 설정한다.
Form1의 속성 창 중에 번개 표시(이벤트)를 선택한 후 DragOver와 DragDrop에 대한 이벤트 핸들러를 추가한다.
DragOver는 사용자가 파일 등을 마우스로 끌고 있는 경우에 발생하는 이벤트이고 DragDrop은 끌고 있는 상태에서 마우스를 놓았을 때 발생하는 이벤트이다.
Form1.Designer.cs의 InitializeComponent()메서드 내부에 자동으로 다음과 같은 코드가 추가되었음을 확인할 수 있을 것이다.
this.AllowDrop = true; this.DragDrop += new System.Windows.Forms.DragEventHandler(this.Form1_DragDrop); this.DragOver += new System.Windows.Forms.DragEventHandler(this.Form1_DragOver); |
그리고, Form1.cs에는 DragDrop과 DragOver 이벤트 핸들러가 만들어 진 것을 확인할 수 있다.
DragOver 이벤트 핸들러에서는 마우스 커서의 표시를 변경하여 끌어다 놓기 작업 중임을 사용자가 인지할 수 있게 하고 DragDrop 이벤트 핸들러에서는 끌어다 놓은 파일을 PicutreBox 컨트롤에 보여주고 파일명을 Label컨트롤에 보여주도록 하는 코드를 작성하자. 끌어다 놓기 작업을 통해 여러 개의 파일을 끌어다 놓을 수 있지만 여기에서는 하나만 끌어다 놓는다는 가정하에서 작업을 하도록 하겠다.
private void Form1_DragOver(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.Bitmap)|| e.Data.GetDataPresent(DataFormats.FileDrop)) { e.Effect = DragDropEffects.Copy; } else { e.Effect = DragDropEffects.None; } }
private void Form1_DragDrop(object sender, DragEventArgs e) { string[] fname = e.Data.GetData(DataFormats.FileDrop) as string[]; pictureBox1.Image = Image.FromFile(fname[0]); int lastindex = fname[0].LastIndexOf('\\'); label1.Text = fname[0].Substring(lastindex+1); } |
참고로, AllowDrop 속성은 Control 클래스에서 파생된 속성이기 때문에 Button컨트롤이나 LixtBox등의 다른 컨트롤들에서도 동일한 매커니즘을 사용할 수 있다.
2.AutoValidate
이는 컨테이너 컨트롤 클래스의 속성으로 포커스가 변경이 되었을 때 유효성 검사를 수행 여부를 결정한다.
이 속성에 대입할 수 있는 값은 Disable, EnablePreventFocusChange, EnalbeAllowFocusChange, Inherit 이 있다.
열거형 멤버 |
설명 |
Disable |
유효성 검사를 수행하지 않음 |
EnablePreventFocusChange |
포커스를 잃으면 유효성 검사가 수행 됨 |
EnableAllowFocusChange |
유효성 검사가 수행되지만 실패시에 Validated이벤트 발생 안 함 |
Inherit |
부모 컨테이너에서 상속을 받으며 없으면 EnablePreventFocusChange |
3. ContextMenuStrip
ContextMenuStrip은 특정 컨트롤에 마우스가 위치한 상태에서 오른쪽 마우스 버튼을 눌렀을 때 보이는 메뉴를 말한다. Windows Forms 응용을 만들 경우에 각 컨트롤에서 할 수 있는 작업에 대한 ContextMenuStrip을 제공을 하여 높은 접근성을 제공할 수 있다.
이 속성 또한 Control클래스에서 상속을 받았다.
이에 대해 간단히 살펴보기로 하자.
먼저 도구상자의 ContextMenuStrip을 선택하여 Form1에 끌어다 놓기 작업을 하자. 그리고 ContextMenuStrip에 Test1과 Test2에 해당하는 ToolStripMenuItem을 추가하자. 단순히 Test1과 Test2를 입력만 하면 자동화에 의해 ToolStripMenuItem은 추가 된다. 그리고, Test1과 Test2의 ToolStripMenuItem을 더블 클릭하여 Click이벤트 핸들러를 추가하자.
Form1.Designer.cs파일의 InitializeComponent()메서드에 자동 추가된 코드이다.
// contextMenuStrip1 this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.Test1ToolStripMenuItem, this.Test2ToolStripMenuItem}); this.contextMenuStrip1.Name = "contextMenuStrip1"; this.contextMenuStrip1.Size = new System.Drawing.Size(153, 70); // Test1ToolStripMenuItem this.Test1ToolStripMenuItem.Name = "Test1ToolStripMenuItem"; this.Test1ToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.Test1ToolStripMenuItem.Text = "Test1"; this.Test1ToolStripMenuItem.Click += new System.EventHandler(this.Test1ToolStripMenuItem_Click); // Test2ToolStripMenuItem this.Test2ToolStripMenuItem.Name = "Test2ToolStripMenuItem"; this.Test2ToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.Test2ToolStripMenuItem.Text = "Test2"; this.Test2ToolStripMenuItem.Click += new System.EventHandler(this.Test2ToolStripMenuItem_Click); |
Form1.cs의 Test1과 Test2의 ToolStripMenuItem의 Click 이벤트 핸들러 내부에 메시지 박스가 뜨는 코드를 추가해 보자.
private void Test1ToolStripMenuItem_Click(object sender, EventArgs e) { MessageBox.Show("Test1 클릭"); }
private void Test2ToolStripMenuItem_Click(object sender, EventArgs e) { MessageBox.Show("Test2 클릭"); } |
마지막으로 form1의 ContextMenuStrip속성을 contextMenuStrip1을 선택한 후 실행해 보자. Shift+F10을 누르거나 마우스 우측 버튼을 누르면 ContextMenuStrip이 뜨는 것을 확인할 수 있을 것이다. 또한, Test1 과 Test2를 선택하면 메시지 박스가 뜨는 것도 확인할 수 있을 것이다.
4. DoubleBuffered
이 속성은 컨트롤에 무효화 영역이 발생하여 그리기 작업을 할 때 깜빡이는 현상을 줄이기 위해 내부적으로 보조 버퍼를 사용할 것인지 여부에 관련된 속성이다.
5. Enabled
이 속성은 컨트롤이 사용자와 상호 작용이 가능한지를 결정하는 속성이다. 예를 들면 버튼과 같은 컨트롤이 화면에는 보이지만 클릭이 되지 않는 것이 Enalbed 속성이 false인 경우이다.
6. ImeMode
IME 모드는 사용자의 키보드 입력을 한글이나 일본어 등으로 변환할 것인지 여부에 대한 모드 설정이다.
설정할 수 있는 값의 종류는 MSDN을 참고하기 바란다.
http://msdn.microsoft.com/ko-kr/library/system.windows.forms.imemode(v=VS.80).aspx
'개발언어 > C#' 카테고리의 다른 글
[C#] (강의) 2. Form 속성(창 스타일) (0) | 2021.04.12 |
---|---|
[C#] (강의) 2. Form 속성(디자인,기타) (0) | 2021.04.12 |
[C#] (강의) 1.Forms 개요2 (0) | 2021.04.12 |
[C#] (강의) 1.Forms 개요 (0) | 2021.04.12 |
[C#] Windows Forms 속성 (0) | 2021.04.12 |