--------------------------------------------
★ 通过重写窗口过程函数(WndProc)函数,截取窗体消息,如最大.最小化等
const int WM_SYSCOMMAND = 0x112;
const int SC_CLOSE = 0xF060;
const int SC_MINIMIZE = 0xF020;
const int SC_MAXIMIZE = 0xF030;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_SYSCOMMAND)
{
if (m.WParam.ToInt32() == SC_MINIMIZE)
{
MessageBox.Show("最小化!1");
}
if (m.WParam.ToInt32() == SC_MAXIMIZE)
{
MessageBox.Show("最大化!1");
}
if (m.WParam.ToInt32() ==0xF120)
{
MessageBox.Show("还原!1");
}
}
base.WndProc(ref m);
}
--------------------------------------------
★C#实现MDI 多文档界面 应用程序:
主窗体Form_Main:将其IsMdiContainer设定成true,这样MDI主窗体就建立了.
子窗体Form_Child属性:
设置Form_Main它的MDI父窗体:Form_Child.MdiParent=this;
--------------------------------------------
★设置窗体鼠标-形状
this.Cursor = Cursors.属性
★监视鼠标-状态
Button.MouseButtons == MouseButtons.属性
----------------------
★设置控件的透明色
Control.Parent=ParentControl(父控件);
Control.BackColor=Color.Transparent;
----------------------
★字体设置(listViewEx为例)
//FontStyle Fs=FontStyle.Regular;GraphicsUnit Gh=GraphicsUnit.Point;
listViewEx1.Font = new Font("宋体", 9, FontStyle.Regular,
GraphicsUnit.Point);//Font.Unit
----------------------
★合理的管理控件(释放/创建)
control.IsDisposed 控件是否释放
control.Created 控件是否创建并show()
判断窗体是否已经打开:
if (client_Fm == null || client_Fm.IsDisposed)//Client_Form:窗体
{
client_Fm = new Client_Form();
client_Fm.Show();
}
else
client_Fm.Activate();
--------------------------------------------
★绘制UI
e.Graphics.DrawString()字
e.Graphics.DrawLines() 线
e.Graphics.DrawRectangle()方
e.Graphics.DrawImage() image
PaintEventArgs 类: 为 Paint 事件提供数据。
Rectangle 类: 绘制一个矩形。
PaintEventArgs.Graphics.DrawImage: 在指定位置并且按指定大小绘制指定的
Image 的指定部分。
PaintEventArgs..::.ClipRectangle: 获取要在其中进行绘画的矩形
--------------------------------------------
★Form添加背景图片
this.BackgroundImage = imageList1.Images[Index];
再把BackgroundImageLayout属性改为:Stretch
这样在界面上显示的图片就不是小图标了,是大图片
--------------------------------------------
★窗体全屏显示:另外就是调用API函数
WindowState= FormWindowState.Maximized;
FormBorderStyle=FormBorderStyle.None;//此并非真正的全屏
--------------------------------------------
★获取COMBOX指定索引 cb_Name.SelectedIndex = n;//适合用于其它datagridview等
控件
--------------------------------------------
★设置控件焦点:control.fouts();
--------------------------------------------
★设置窗体不让用户改变大小
把窗体的FormBorderStyle属性设为FormBorderStyle.FixedSingle;
--------------------------------------------
★设置Form窗体的特征“
i , StartPosition 窗体第一次出现的位置:如CenterScreen当前窗口居中,
CenterParent为父窗口中心位置。
ii ,FormBorderStyle 指示窗体的边框和标题栏的外观和行为:如None 为无标题栏格
式。
iii,属性Font设置显示控件中的文本的字体;属性CaptionFont 设置标题栏字体,
--------------------------------------------
★frm.ShowDialog()//有模式窗体
frmAbout.Show()//无模式窗体
--------------------------------------------
★键盘,鼠标事件
鼠标事件:"MouseHover"、"MouseLeave"、"MouseEnter"、"MouseMove"、"MouseDown"
和"MouseUp"。
例--MouseDown 鼠标按钮按下事件
e.Button == MouseButtons.Left 左按下
e.Button == MouseButtons.Right 右按下
键盘事件:"KeyDown"、"KeyUp"和"KeyPress"。
先 声明: "组件名称"."事件名称"+= new System.EventHandler("事件函数名称"
);
再 定义: 事件函数····
--------------------------------------------
★Enter控件获取焦点事件中,设置文本全选
textBox1.SelectAll();///textBox1文本全选
textBox1.SelectionStart = 1;/////"1"代表光标在第1个字符之后
form.ActiveControl==control1//判断控件control1是否被选中
--------------------------------------------
★控件(以主窗体Form为例)大小变化时,控件内的子控件安装相应比例缩放
一般使用Anchor/Dock 就可以控制窗体位置和大小,但是这个不能实现控件随窗体缩放比例
自动调整自身大小和位置。所以只能跟踪Resize事件用代码做出相应的调整。
方法代码:
定义2个全局实型变量 float X,Y; 在窗体 load里面初始化 X,Y FormMain_Load(object sender, EventArgs e) { X = this.Width; Y = this.Height; } FormMain_Resize(object sender, EventArgs e) { float newx = ((float)this.Width) / X;//记录变化后窗体长和宽大小 //* 按照需要是否减去状态栏、窗体边框 等的长宽大小 float newy = (float)this.Height /Y; setControls(newx, newy, this); /*如果要过滤一些控件,可以在setControls方法中排除要过滤的方法, */ } //记载控件长宽信息 private void setTag(Control cons) { foreach (Control con in cons.Controls) { con.Tag = con.Width + ":" + con.Height + ":" + con.Left + ":" + con.Top + ":" + con.Font.Size; if (con.Controls.Count > 0) setTag(con); } } //控件大小调整真正实现部分 private void setControls(float newx, float newy, Control cons) { foreach (Control con in cons.Controls) { if (con.Name == "panel5" || con.Name == "panel7" || con.Name == "pictureBox1" || con.Name == "buttonX3") { continue; } string[] mytag = con.Tag.ToString().Split(new char[] { ':' }); float a = Convert.ToSingle(mytag[0]) * newx; con.Width = (int)a; a = Convert.ToSingle(mytag[1]) * newy; con.Height = (int)(a); a = Convert.ToSingle(mytag[2]) * newx; con.Left = (int)(a); a = Convert.ToSingle(mytag[3]) * newy; con.Top = (int)(a); Single currentSize = Convert.ToSingle(mytag[4]) * newy; GraphicsUnit f = con.Font.Unit; con.Font = new Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit); if (con.Controls.Count > 0) { setControls(newx, newy, con); } } }
--------------------------------------------
★ windows 开始按钮效果的 Button
方法一: ToolStrip Test = new ToolStrip(); Test.Dock = DockStyle.None; //放置位置(注意位置不要超过其父控件范围) // Test.Left = 150; // Test.Top = 100; Test.Parent = panel1;//设定他父控件 ToolStripDropDownButton TestButton = new ToolStripDropDownButton("Test"); //设置TestButton的事件 。。。。。。 TestButton.MouseEnter +=..._MouseEnter; TestButton.MouseLeave += ..._MouseLeave; TestButton.DisplayStyle = ToolStripItemDisplayStyle.Text; //给下拉子项添加事件 TestButton.DropDown.Items[0].MouseDown += Too_MouseEnter; Test.Items.Add(TestButton); 方法二:contextMenuStrip1 private void buttonX_Click(object sender, EventArgs e) { int lf = 0; int tp = 0; //control Control cont = buttonX4; while (cont.Parent != this) //如果buttonX被嵌套在多层容器里 { lf += cont.Left; tp += cont.Top; cont = cont.Parent; } lf += this.Left; tp += this.Top - buttonX4.Height; contextMenuStrip1.Show(lf, tp); }
--------------------------------------------
★将Form添加到主窗体进行显示
不能直接把frm.Parent =父容器,会报出无法将顶级控件添加到控件的错误,解决方案:
因为Form默认是顶级窗体,所以加不上去,可以设置其TopLevel属性为False,代码如下:
frmMain frm = new frmMain();
frm.FormBorderStyle = FormBorderStyle.None;
frm.TopLevel = false;
frm.Parent = panel1;
frm.Show();
--------------------------------------------
★
--------------------------------------------
★
--------------------------------------------
★
--------------------------------------------
★
--------------------------------------------
★