目录
1. 如何设置一个From的边界
1. 如何设置一个From的边界
2.
如何建立一个透明的
From
3.
如何设置窗体在屏幕中的位置
4.
如何使最小化和最大化按钮不可用
5.
如何使一个窗体不见
6.
如何设置使窗体成为非矩形的
.
7.
如何使一个窗体在屏幕的最顶端
.
8.
如何显示一个
Model
和非
Model
的窗体
9.
如何制作一个
MDI
的窗体
10.
如何将你的窗体不显示在任务条上
.
11.
如何制作一个带启动屏幕的窗体
.
12.
如何使你的窗体
TrayIcon.
13.
如何修改控制窗体的尺寸和长宽尺寸
.
14.
如何建立一个
Windows Explorer
风格的窗体
.
15.
如何设置初始的启动窗体
16.
如何建立一个有背景图像的窗体
1.
如何设置一个
Form
的边界
form
总共有
7
种不同的边界风格让你设置,你可以在设计时刻也可以运行时通过代码动态的来设置它。这
7
种边界风格分别是:
none (System.Windows.Forms.FormBorderStyle.None )
fixed 3D (System.Windows.Forms.FormBorderStyle.Fixed3D)
fixed Dialog (System.Windows.Forms.FormBorderStyle.FixedDialog)
fixed Single(System.Windows.Forms.FormBorderStyle.FixedSingle)
fixed Tool Window(System.Windows.Forms.FormBorderStyle.FixedToolWindow)
sizable(system.windows.forms.formborderstyle.sizable)
sizable Tool Window
(system.windows.forms.formborderstyle.sizabletoolwindow)
在设计方式下在
vs.net IDE
的
Properties window
中设置
FormBorderStyle
属性就可以了
.
在运行方式下你可以用代码来完成
:
dlgbx1.formborderstyle = System.Windows.Forms.FormBorderStyle.FixedDialog
这七种边界类型 VB6 中就有 , 没有什么大的变化 , 运行方式下你需要对照不同的枚举变量进行设置 .
这七种边界类型 VB6 中就有 , 没有什么大的变化 , 运行方式下你需要对照不同的枚举变量进行设置 .
2.
如何建立一个透明的
Form
你可以通过两种方法在设计时刻和运行时刻来做到这一点
.
设计时刻
,
你可以在
vs.net IDE
的
Properties window,
设置
Opacity
属性达到这个效果
.
这个值从
0.0
到
1.0 . 0
表示完全透明
,1.0
表示完全不透明
.
运行时刻你可以用下面的编码设置窗体的
opactiy
属性来做到
.
具体
:
frmtransparentform.opacity = 0.76; ( C# )
看得出现在很简单了
,
你已经不用再去了解什么
alpha
变量了
.
透明始终只是一种效果
,
不要滥用它
.
3.
如何设置窗体在屏幕中的位置
你可以设置窗体的
startposition
属性
,vs.net
一般给你一个保守的选项
” WindowsDefaultLocation“
这样系统在
Load
窗体时将根据用户当前的计算机设置来确定一个值
,
你也可以在设计时将它改成另一个值
”Center”.
如果你一定要在设计方式下确定窗体在屏幕出现的位置你可以先设置
startposition
为
manual,
然后设置
location
的
x
和
y
的值
.
运行时用代码实现似乎更简洁一些
:
Form1.Location = new Point (100, 100) ( VB.NET )
当然你也可以分别修改的 Location 的 X 和 Y 值 , 对应的是窗体的 Left 和 Top 属性 , 比如 :
当然你也可以分别修改的 Location 的 X 和 Y 值 , 对应的是窗体的 Left 和 Top 属性 , 比如 :
form1.left += 200 ( VB.NET )
form1.top -= 100 ( VB.NET )
另外一个属性将也将影响窗体在屏幕的位置
:desktoplocation
这个属性主要是在你设置窗体的位置相对于任务栏时非常实用
(
当你把任务条放在屏幕的顶或左边时
,
其实相应改动了
desktop coordinates (0,0)),
你可以这样设置这个不出现在设计属性窗口中的属性
,
form1.desktoplocation = new Point (100,100)
窗体在屏幕中的位置将主要取决于各自用户具体的硬件和设置情况
,
所以保守的作法是用默认的
” WindowsDefaultLocation”
或
”Center”;
专业的作法是自己先获取系统的设置然后编码动态计算后进行设置
,
不然很容易在屏幕上找不到你的窗体
.
4.
如何使最小化和最大化按钮不可用
在设置窗体的
form.minimizebox
和
form.maximizebox
当为
True
时表示显示
,False
时表示不可
.
用编程方式见下
:
frmmaxmin.minnimizebox = False ( VB.NET)
frmmaxmin.maxmnimizebox = True ( VB.NET )
5.
如何使一个窗体不见
我想最直接的办法是你调用
Hide()
方法来做到这一点
.
不过我想提供另一种方法
,
看了之后你会获得一些其它的启发
. ( VB.NET )
Private Const WS_EX_TOOLWINDOW As Int32 = &H80
Private Const WS_POPUP As Int32 = &H80000000
Private Const WS_VISIBLE As Int32 = &H10000000
Private Const WS_SYSMENU As Int32 = &H80000
Private Const WS_MAXIMIZEBOX As Int32 = &H10000
Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams
Get
Dim cp As System.Windows.Forms.CreateParams
cp = MyBase.CreateParams
cp.ExStyle = WS_EX_TOOLWINDOW
cp.Style = WS_POPUP Or WS_VISIBLE Or WS_SYSMENU Or WS_MAXIMIZEBOX
cp.Height = 0
cp.Width = 0
Return cp
End Get
End Property
原来是把
Height
和
Width
都设置成
0
,我想这种方式和
Hide()
调用的底层可能是不同的。
6.
如何设置使窗体成为非矩形的
这个问题我想我提供的不是最专业的作法
,
至少它还不能达到我期望的那样
,
也就是说它在某些事件中它还会变回矩形
.
但至少我可以告诉你:如果试图调用原来的
win32’s API SetWindowRng
是不行的
,
我曾如此的尝试过
.
现在你可能需要知道有关窗体的
Region
属性
' // ( VB.NET )
Public Sub SetWindowRegion()
Dim FormPath As System.Drawing.Drawing2D.GraphicsPath
Dim Reg As Drawing.Region
Dim lRet As Long
FormPath = New Drawing2D.GraphicsPath()
FormPath.AddEllipse(New Rectangle(0, 0, 250, 120))
Me.Region = New Region(FormPath)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.Region = Nothing
SetWindowRegion()
End Sub
Protected Overrides Sub OnResize(ByVal e As System.EventArgs)
Me.Region = Nothing
SetWindowRegion()
End Sub
7.
如何使一个窗体在屏幕的最顶端
这是很实用的一个功能
,
现在你不用在调用其它
api
了
,
只用设置
topmost
属性为
True
就可以了
.
对于这个属性在设计时刻和运行时刻都是可以进行修改的
.
代码方式
:
myTopForm.TopMost = True ( VB.NET)
8.
如何显示一个
Model
和非
Model
的窗体
model
和
modeless
的窗体主要将取决于你的应用
,
最多的是用在显示对话框
.
当你需要
model
的窗体时你调用
myform. ShowDialog
而非
Model
的调用
MyForm.Show,
对于
ShowDialog
有一个可选参数
ower
可以让你为一个窗体建立父子关系
.
比如
:
' Visual Basic
Private Sub mnuAbout_Click(…args…)
Dim f As New FormOption
f.ShowDialog Me
End Sub
有一点需要注意的是对于 ShowDialog 来说 , 当执行到这一句 , 窗体显示 , 但这之后的代码将不会执行 , 只到窗口关闭之后才继续执行 , 而对于 Show 来说是即时的 , 显示窗体之后将立即执行下面的代码 .
Private Sub mnuAbout_Click(…args…)
Dim f As New FormOption
f.ShowDialog Me
End Sub
有一点需要注意的是对于 ShowDialog 来说 , 当执行到这一句 , 窗体显示 , 但这之后的代码将不会执行 , 只到窗口关闭之后才继续执行 , 而对于 Show 来说是即时的 , 显示窗体之后将立即执行下面的代码 .
9.
如何制作一个
MDI
的窗体
1.
建立一个新的
Windows Application
项目
2.
分别加入两个窗体
Form1
、
Form2
3.
设置
Form1
的
IsMdiContainer
属性为
True
。使它成为
MDI
主窗体。
4.
在
Form2
中加入一个
RichTextBox
控件,并设置
Dock
为:
Fill
5.
在
Tools
窗体中拖一个
MainMenu
到窗体
Form1
,然后建立一个菜单
File|Windows|Help
三个菜单项,
File
中包括
New
、
Exit
菜单项;
Windows
中包括
Cascade
、
Horizontal
等。
6.
设置
Windows
菜单项的
MdiList
属性=
True
,
这样每一个
MDI
子窗口将自动加在
Windows
菜单项下面。
7.
双击
New
菜单项,然后加入以下代码:
private void menuNew_Click(object sender, System.EventArgs e)
{
Form2 NewMdiChild ;
NewMdiChild = new Form2() ;
NewMdiChild.MdiParent = this ;
NewMdiChild.Show() ;
}
8.
在
Windows
的
Cascade
等菜单项中加入以下代码:
private void menuWindowCasca_Click(object sender, System.EventArgs e)
{
this.LayoutMdi( MdiLayout.Cascade) ;
}
另外还有以下常用的
:
this.layoutmdi(mdilayout.tilehorizontal);
this.layoutmdi(mdilayout.tilevertical);
9. F5
运行。
最终版的
vs.net
不知是否会有一个通用的模板,不过用完全手工的方式产生一个
MDI
的窗口,显得有些繁琐,不如
VS.NET
的
IDE
方式下那么简洁。
10.
如何将你的窗体不显示在任务条上
当窗体的边界风格是
tools Window
时它都不会出现在任务条上的
.
另外上面标题
5
中介绍的方法不仅窗体看不见
,
也不会出现在任务条上
.
如果你现在在
Dotnet
的世界,这件事也变的简单,任何的
Winform
窗体现在都有
ShowInTaskbar
属性,所以你只要简单的设置这个属性就可以了。同样你可以选择在属性窗口中将
ShowInTaskbar
由
True
改为
False
。或是用代码的方式:
MyTaskBarFrm.ShowInTaskbar = false ; ( C# )
11.
如何制作一个带启动屏幕的窗体
需要你准备两个
winform
的窗体,一个叫它:
splashscreen
,把它做成一个漂亮的窗体。然后你需要一个主窗体叫它:
form1
吧,然后在这个窗体加入下面的代码。
// ( C# )
protected override void OnLoad ( System.EventArgs e )
{
//make load take a long time
Thread.Sleep(2000);
base.OnLoad(e);
}
然后在
main
中加入这样的代码:
[STAThread]
static void Main()
{
SplashScreen splashForm = new SplashScreen();
splashForm.Show();
Form1 mainForm = new Form1() ;
mainForm.Load += new EventHandler(splashForm.MainScreen_Load);
Application.Run(mainForm);
}
不要忘了加上对
threading
的引用:
using System.Threading;
12.
如何使你的窗体
TrayIcon
实现这个功能你可以运用
notifyicon
控件来达到,从
tools Windows
中将
NotifyIcon
拖到你的窗体上然后在下面的事件加入如下代码,
F5
。
' // VB.NET
Private mIconA As Icon = New Icon("Icon1.ico")
Private mIconB As Icon = New Icon("Icon2.ico")
Private mIconDisplayed As Boolean
Public Sub New()
MyBase.New
Form1 = Me
'This call is required by the Win Form Designer.
InitializeComponent
'TODO: Add any initialization after the InitializeComponent() call
'this form isn't used directly so hide it immediately
Me.Hide()
'setup the tray icon
Initializenotifyicon()
End Sub
Private Sub Initializenotifyicon()
'setup the default icon
notifyicon = New System.Windows.Forms.NotifyIcon()
NotifyIcon.Icon = mIconA
NotifyIcon.Text = "Right Click for the menu"
NotifyIcon.Visible = True
mIconDisplayed = True
'Insert all MenuItem objects into an array and add them to
'the context menu simultaneously
Dim mnuItms(3) As MenuItem
mnuItms(0) = New MenuItem("Show Form...", New EventHandler(AddressOf Me.ShowFormSelect))
mnuItms(0).DefaultItem = True
mnuItms(1) = New MenuItem("Toggle Image", New EventHandler(AddressOf Me.ToggleImageSelect))
mnuItms(2) = New MenuItem("-")
mnuItms(3) = New MenuItem("Exit", New EventHandler(AddressOf Me.ExitSelect))
Dim notifyiconMnu As ContextMenu = New ContextMenu(mnuItms)
notifyicon.ContextMenu = notifyiconMnu
End Sub
Public Sub ShowFormSelect(ByVal sender As Object, ByVal e As System.EventArgs)
'Display the settings dialog
Dim SettingsForm As New SettingsForm()
SettingsForm.ShowDialog()
End Sub
Public Sub ToggleImageSelect(ByVal sender As Object, ByVal e As System.EventArgs)
'called when the user selects the 'Toggle Image' context menu
'determine which icon is currently visible and switch it
If mIconDisplayed Then
'called when the user selects the 'Show Form' context menu
NotifyIcon.Icon = mIconB
NotifyIcon.Text = "Sad"
mIconDisplayed = False
Else
NotifyIcon.Icon = mIconA
NotifyIcon.Text = "Happy"
mIconDisplayed = True
End If
End Sub
Public Sub ExitSelect(ByVal sender As Object, ByVal e As System.EventArgs)
'called when the user selects the 'Exit' context menu
'hide the tray icon
NotifyIcon.Visible = False
'close up
Me.Close()
End Sub
'Form overrides dispose to clean up the component list.
Public Overloads Overrides Sub Dispose()
MyBase.Dispose()
components.Dispose()
End Sub
图标文件你自己准备了,如果成功你可以看到有关
NotifyIcond
的各种功能了。
13.
如何修改控制窗体的尺寸和长宽尺寸
主要是修改
winform
的
size, Width
和
Height
属性。同样它们都是可以在设计和运行时刻进行修改和设置。
form1.size = New System.Drawing.Size(100, 100) ( VB.NET )
form1.width += 100 (VB.NET )
form1.height -= 20 (VB.NET )
14.
如何建立一个
Windows Explorer
风格的窗体
1.
建立一个新的
windows Application
2.
从
toolbox
窗口拖一个
treeview
控件、、一个
splitterk
控件、一个
listview
控件,分别在属性窗口中设置
treeview
的
dock
属性为::
left
;设置
listview
控件的
dock
属性为:
fill
3
:
F5
运行
15.
如何设置初始的启动窗体
无论是
c#
还是
visual Basic
的
Winform
项目中你都可以在
Solution Explorer
窗口中右键你的
Project
,然后选择属性,从你
Project
的属性页中选择你启动的窗体或是
Main()
方法。
有些不同的是在目前的
vs.net Beta2
中
C#
项目会自动产生
Main()
方法,
Visual Basic.Net
的项目中你必须自己添加
Main()
代码,
C#
中你可以将
Form1
改成任何你可以启动的窗体名:
// ( C# )
static void Main()
{
Application.Run(new Form1());
}
16.
如何建立一个有背景图象的窗体
现在的
winform
中所有的窗体都有一个
backgroundimage
属性,只用对它赋值就可以了。普通窗体可以在运行模式也可以在运行模式完成这个设置。比如在
initializecomponent()
或窗体的构造函数中加入这样的代码:
this.backgroundimage = new Bitmap("C://DotNetApp//WinForm//Tile.bmp" ) ;
对于
MDI
的主窗体要麻烦一些,在
VS.NET
的
IDE
窗体中,当你设置完
IsMdiContainer
属性为
True
后,你需要查看一下
InitializeComponent()
中是否有这样的代码
( C# )
:
this.mdiClient1.Dock = System.Windows.Forms.DockStyle.Fill;
this.mdiClient1.Name = "mdiClient1";
或是在窗口的属性窗口组合框中看到
mdiclient1 System.Windows.Forms.mdiClient.
这就是主
MDI
窗口,不过我没有在
dotnet
的文档中找到任何有关
System.Windows.Forms.mdiClient
的说明。然后你可以在
InitializeComponent()
或窗体的构造函数中加入这样的代码
( C# )
:
this.mdiclient1.backgroundimage = new Bitmap("C://DotNetApp//WinForm//Tile.bmp" ) ;
网上有一个
ImageView
的例子,里面演示了给
MDI
主窗体中背景上加入一行
Logo
文字的方法,这样使你的
MDI
窗体看起来很商业化,具体的你可以这样做:
1
.
先在
VS.NET
自动产生代码的
InitializeComponent
中看是否有这样的语句
( C# )
:
this.controls.addrange(new System.Windows.Forms.Control[] {this.mdiClient1});
又是这个
mdiClient
(
haha
)
2
.
建立以下两个函数用于显示这个
Logo
字符:
// ( C# )
protected void Mdi_OnPaint ( Object s, System.Windows.Forms.PaintEventArgs e )
{
Control c = (Control)s;
Rectangle r1 = c.ClientRectangle;
r1.Width -= 4;
r1.Height -= 4;
Rectangle r2 = r1;
r2.Width -= 1;
r2.Height -= 1;
Font f = new Font("Tahoma", 8);
String str = "MyWinform.NET ?2001 MyWinform Application V1.0";
StringFormat sf = new StringFormat();
sf.Alignment = StringAlignment.Far;
sf.LineAlignment = StringAlignment.Far;
e.Graphics.DrawString(str, f, new SolidBrush(SystemColors.ControlDarkDark), r1, sf);
e.Graphics.DrawString(str, f, new SolidBrush(SystemColors.ControlLight), r2, sf);
}
protected void Mdi_OnResize ( Object s , System.EventArgs e )
{
Control c = (Control)s;
c.Invalidate();
}
3
.
在
InitializeComponent()
或窗体的构造函数中加入这样的代码:
( C# )
this.Controls[0].Paint += new PaintEventHandler( Mdi_OnPaint ) ;
this.Controls[0].Resize += new EventHandler( Mdi_OnResize ) ;
注意将它加在
InitializeComponent()
后面或是在
InitializeComponent
函数中
this.Controls.AddRange
函数之后。