-
c#命名空间
当程序文件非常多时,可以使用文件夹以树状的结构组织和管理程序文件。
对于c#工程,文件夹还会影响源代码的默认的命名空间。在项目的子文件夹下新增程序源代码文件,则源代码的命名空间就是”项目默认命名空间.子文件夹名“,
而且子文件夹中的资源文件在编译后的程序集中的资源名称也是”项目默认命名空间.子文件夹名.资源文件名“。
注意:在修改文件夹的名称后,该文件夹下的源码并不会自动更新其命名空间,但此后新增的源代码中的命名空间包含了新的文件夹名称。
-
窗体文件的主要属性
窗体文件指的定义窗体的文件,其文件属性的内涵如下图2所示。通过点击解决方案资源管理器(如图1)下的某个窗体文件,则可以显示相应的文件属性(如图2)。这与点击设计器中窗体界面的效果是不一样的。即窗体属性和窗体文件的属性是不一样的。
图1 图2
------------------------------------------------分割线-------------------------------------------------------
Combobox控件属性(simple下的列表是默认展开的)
-
用户界面事件处理
- 鼠标事件
在c#窗体软件开发中,通过绑定控件的MouseDown事件或重写OnMouseDown方法来处理鼠标按下事件。
MouseMove事件 OnMouseMove方法 鼠标移动事件
MouseUp事件 OnMouseUp方法 松开事件
MouseWheel事件 OnMouseWheel方法 鼠标滚轮事件
- 键盘事件
KeyDown(Up)事件 OnkeyDown(Up)方法 键盘按键按下(松开)事件
绑定事件的KeyPress事件或重写OnKeyPress方法来处理键盘字符事件
~~~~~~~~KeyDown事件和KeyPress事件的区别~~~~~~~~~~~~~~
用户按下的任何按键都会触发KeyDown事件,包括字符键、功能键、光标键等,该事件 的参数是按键的编码。
用户只有按下字符键才会触发KeyPress事件,该事件的参数是按键的字符数据(char类型)。此外各种输入法输入的非英文字符也会触发KeyDown事件,比如用户使用的中文输入法输入一个汉字,则会触发一个(>>>自己试验了下对于中文输入法输入一个汉字会触发两次KeyPress事件,不知道有什么方法可以解决这种情况????输入英文和数字只触发一次)KeyPress事件,事件的参数就是汉字的编码。
What's the difference between KeyDown and KeyPress in .NET? - Stack Overflow
http://stackoverflow.com/questions/1367700/whats-the-difference-between-keydown-and-keypress-in-net
There is apparently a lot of misunderstanding about this!
The only practical difference between KeyDown
and KeyPress
is that KeyPress
relays the character resulting from a keypress, and is only called if there is one.
In other words, if you press A on your keyboard, you'll get this sequence of events:
- KeyDown: KeyCode=Keys.A, KeyData=Keys.A, Modifiers=Keys.None
- KeyPress: KeyChar='a'
- KeyUp: KeyCode=Keys.A
But if you press Shift+A, you'll get:
- KeyDown: KeyCode=Keys.ShiftKey, KeyData=Keys.ShiftKey, Shift, Modifiers=Keys.Shift
- KeyDown: KeyCode=Keys.A, KeyData=Keys.A | Keys.Shift, Modifiers=Keys.Shift
- KeyPress: KeyChar='A'
- KeyUp: KeyCode=Keys.A
- KeyUp: KeyCode=Keys.ShiftKey
If you hold down the keys for a while, you'll get something like:
- KeyDown: KeyCode=Keys.ShiftKey, KeyData=Keys.ShiftKey, Shift, Modifiers=Keys.Shift
- KeyDown: KeyCode=Keys.ShiftKey, KeyData=Keys.ShiftKey, Shift, Modifiers=Keys.Shift
- KeyDown: KeyCode=Keys.ShiftKey, KeyData=Keys.ShiftKey, Shift, Modifiers=Keys.Shift
- KeyDown: KeyCode=Keys.ShiftKey, KeyData=Keys.ShiftKey, Shift, Modifiers=Keys.Shift
- KeyDown: KeyCode=Keys.ShiftKey, KeyData=Keys.ShiftKey, Shift, Modifiers=Keys.Shift
- KeyDown: KeyCode=Keys.A, KeyData=Keys.A | Keys.Shift, Modifiers=Keys.Shift
- KeyPress: KeyChar='A'
- KeyDown: KeyCode=Keys.A, KeyData=Keys.A | Keys.Shift, Modifiers=Keys.Shift
- KeyPress: KeyChar='A'
- KeyDown: KeyCode=Keys.A, KeyData=Keys.A | Keys.Shift, Modifiers=Keys.Shift
- KeyPress: KeyChar='A'
- KeyDown: KeyCode=Keys.A, KeyData=Keys.A | Keys.Shift, Modifiers=Keys.Shift
- KeyPress: KeyChar='A'
- KeyDown: KeyCode=Keys.A, KeyData=Keys.A | Keys.Shift, Modifiers=Keys.Shift
- KeyPress: KeyChar='A'
- KeyUp: KeyCode=Keys.A
- KeyUp: KeyCode=Keys.ShiftKey
Notice that KeyPress
occurs in between KeyDown
and KeyUp
, not after KeyUp
, as many of the other answers have stated, that KeyPress
is not called when a character isn't generated, and that KeyDown
is repeated while the key is held down, also contrary to many of the other answers.
Examples of keys that do not directly result in calls to KeyPress
:
- Shift, Ctrl, Alt
- F1 through F12
- Arrow keys
Examples of keys that do result in calls to KeyPress
:
- A through Z, 0 through 9, etc.
- Spacebar
- Tab (KeyChar='\t', ASCII 9)
- Enter (KeyChar='\r', ASCII 13)
- Esc (KeyChar='\x1b', ASCII 27)
- Backspace (KeyChar='\b', ASCII 8)
For the curious, KeyDown
roughly correlates to WM_KEYDOWN
, KeyPress
to WM_CHAR
, and KeyUp
to WM_KEYUP
. WM_KEYDOWN
can be called fewer than the the number of key repeats, but it sends a repeat count, which, IIRC, WinForms uses to generate exactly one KeyDown per repeat.