分享
 
 
 

DotNET WinForm FAQ 16个(下)

王朝system·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

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函数之后。

总的看来,整个Winform部分始终透着Hejlsberg设计VJ++中WFC库的气息,现在还没有任何线索能证明dotnet是照搬WFC库,但我还是相信Delphi和VJ++的用户会更容易感受到Hejlsberg的设计风格,比如事件委托在几年前就被视为领先而严重违背“纯Java”原则而使开发人员陷入尴尬,现在我们可以很自然的享受这种特性,但另一方面dotnet和Java或Delphi似乎靠得更近些,你几乎不能像MFC时代那样去从源代码中找寻秘密和内幕了。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有