DotNET WinForm FAQ 16个(下)

类别:.NET开发 点击:0 评论:0 推荐:

 

9.     如何制作一个MDI的窗体

1.     建立一个新的Windows Application项目

2.     分别加入两个窗体Form1 Form2

3.     设置Form1IsMdiContainer属性为True。使它成为MDI主窗体。

4.     Form2中加入一个RichTextBox控件,并设置Dock为:Fill

5.     Tools 窗体中拖一个MainMenu到窗体Form1,然后建立一个菜单File|Windows|Help三个菜单项,File中包括NewExit菜单项;Windows中包括CascadeHorizontal等。

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.     WindowsCascade等菜单项中加入以下代码:

     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.NETIDE方式下那么简洁。

 

10.     如何将你的窗体不显示在任务条上.

当窗体的边界风格是Tools Window时它都不会出现在任务条上的.另外上面标题5中介绍的方法不仅窗体看不见,也不会出现在任务条上.

    如果你现在在Dotnet的世界,这件事也变的简单,任何的Winform窗体现在都有ShowInTaskbar属性,所以你只要简单的设置这个属性就可以了。同样你可以选择在属性窗口中将ShowInTaskbarTrue改为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.     如何修改控制窗体的尺寸和长宽尺寸.

主要是修改WinformSize, 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控件,分别在属性窗口中设置TreeViewDock属性为::Left;设置ListView控件的Dock属性为:Fill

3 F5 运行

 

15.     如何设置初始的启动窗体

无论是C#还是Visual BasicWinform项目中你都可以在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.NETIDE窗体中,当你设置完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库,但我还是相信DelphiVJ++的用户会更容易感受到Hejlsberg的设计风格,比如事件委托在几年前就被视为领先而严重违背“纯Java”原则而使开发人员陷入尴尬,现在我们可以很自然的享受这种特性,但另一方面dotnetJavaDelphi似乎靠得更近些,你几乎不能像MFC时代那样去从源代码中找寻秘密和内幕了。

本文地址:http://com.8s8s.com/it/it46280.htm