学习.NET Winform开发 - 演示System.Windows.Forms.Form类的使用


学习.NET Winform开发 - 展示System.Windows.Forms.Form类的使用

撰写日期:2016/04/20
更新日期:2016/04/22
发布地址:http://www.cnblogs.com/gibbonnet/p/5417191.html

任务场景

基本操作

  • 标题 Form.Text
  • 大小 Form.Size
  • 位置 Form.StartPosition
  • 图标 Form.Icon
  • 总是最前 Form.TopMost

进阶操作

  • 最小化至任务栏 System.Windows.Forms.NotifyIcon
  • 文件拖拽动作支持 Form.AllowDrop, DragOver, DragDrop

DemoForm.cs

效果:
DemoForm

编译: csc DemoForm.cs /target:winexe /win32icon:images/title.ico

基本操作源码

using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;

/**
 * DemoForm.cs
    - 标题
    - 大小
    - 位置
    - 图标
 * csc DemoForm.cs /target:winexe /win32icon:images/title.ico 
 */
namespace gibbon.learning.winform
{
    public class DemoForm : Form
    {
        public DemoForm()
        {
            // set caption
            this.Text = "窗口的标题";
            // CenterParent, CenterScreen, Manual, WindowsDefaultBounds, WindowsDefaultLocation
            this.StartPosition = FormStartPosition.CenterScreen;
            // weight, height
            this.Size = new Size(500, 600);
            // icon
            this.Icon = new System.Drawing.Icon("images/Title.ico");
        }

        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.Run(new DemoForm());
        }
    }
}

最小化至托盘

// file: DemoMinToTray.cs
using System;
using System.Drawing;
using System.Windows.Forms;

public class Form1 : System.Windows.Forms.Form
{
    private System.Windows.Forms.NotifyIcon notifyIcon1;
    private System.Windows.Forms.ContextMenu contextMenu1;
    private System.Windows.Forms.MenuItem menuItem1;
    private System.ComponentModel.IContainer components;

    [STAThread]
    static void Main()
    {
        Application.Run(new Form1());
    }

    public Form1()
    {
        this.components = new System.ComponentModel.Container();
        this.contextMenu1 = new System.Windows.Forms.ContextMenu();
        this.menuItem1 = new System.Windows.Forms.MenuItem();

        // Initialize contextMenu1
        this.contextMenu1.MenuItems.AddRange(
                    new System.Windows.Forms.MenuItem[] {this.menuItem1});

        // Initialize menuItem1
        this.menuItem1.Index = 0;
        this.menuItem1.Text = "E&xit";
        this.menuItem1.Click += new System.EventHandler(this.menuItem1_Click);

        // Set up how the form should be displayed.
        this.ClientSize = new System.Drawing.Size(292, 266);
        this.Text = "Notify Icon Example";

        // Create the NotifyIcon.
        this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components);

        // The Icon property sets the icon that will appear
        // in the systray for this application.
        notifyIcon1.Icon = new Icon("images/title.ico");

        // The ContextMenu property sets the menu that will
        // appear when the systray icon is right clicked.
        notifyIcon1.ContextMenu = this.contextMenu1;

        // The Text property sets the text that will be displayed,
        // in a tooltip, when the mouse hovers over the systray icon.
        notifyIcon1.Text = "Form1 (NotifyIcon example)";

        // Handle the DoubleClick event to activate the form.
        notifyIcon1.DoubleClick += new System.EventHandler(this.notifyIcon1_DoubleClick);

        this.SizeChanged += new System.EventHandler(this.Form1_SizeChanged);
    }

    protected override void Dispose( bool disposing )
    {
        // Clean up any components being used.
        if( disposing )
            if (components != null)
                components.Dispose();

        base.Dispose( disposing );
    }

    #region 隐藏任务栏图标、显示托盘图标
    private void Form1_SizeChanged(object sender, EventArgs e)
    {
        //判断是否选择的是最小化按钮
        if (WindowState == FormWindowState.Minimized)
        {
            //托盘显示图标等于托盘图标对象
            //注意notifyIcon1是控件的名字而不是对象的名字
            // notifyIcon1.Icon = ico;
            //隐藏任务栏区图标
            this.ShowInTaskbar = false;
            //图标显示在托盘区
            notifyIcon1.Visible = true;
        }
    }
    #endregion

    private void notifyIcon1_DoubleClick(object Sender, EventArgs e)
    {
        // Show the form when the user double clicks on the notify icon.

        // Set the WindowState to normal if the form is minimized.
        if (this.WindowState == FormWindowState.Minimized)
            this.WindowState = FormWindowState.Normal;

        // Activate the form.
        this.Activate();

        //任务栏区显示图标
        this.ShowInTaskbar = true;
        //托盘区图标隐藏
        notifyIcon1.Visible = false;
    }

    private void menuItem1_Click(object Sender, EventArgs e) {
        // Close the form, which closes the application.
        this.Close();
    }
}

拖拽操作

public enum DragDropEffects 指定拖拽操作的可能类型

  • All Copy, Move 和Scroll效果的组合
  • Copy drag的数据拷贝至drop的目标
  • Link drag的数据链接至drop的目标
  • Move drag的数据移动至drop的目标
  • None drop的目标不接受数据
  • Scroll The target can be scrolled while dragging to locate a drop position that is not currently visible in the target.
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;

/**
 * DemoForm.cs
    - 标题
    - 大小
    - 位置
    - 图标
 * 演示拖拽效果
 * csc DemoForm.cs /target:winexe /win32icon:images/title.ico
 */
namespace gibbon.learning.winform
{
    public class DemoForm : Form
    {
        public DemoForm()
        {
            // set caption
            this.Text = "窗口的标题";
            // CenterParent, CenterScreen, Manual, WindowsDefaultBounds, WindowsDefaultLocation
            this.StartPosition = FormStartPosition.CenterScreen;
            // weight, height
            this.Size = new Size(500, 600);
            // icon
            this.Icon = new System.Drawing.Icon("images/Title.ico");
            // drap and drop
            this.AllowDrop = true;
            this.DragEnter += this.DemoForm_DragEnter;
            this.DragDrop += this.DemoForm_DragDrop;
        }

        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.Run(new DemoForm());
        }

        private void DemoForm_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
        {
            // Ensure that the list item index is contained in the data.
            string[] s=(string[])e.Data.GetData(DataFormats.FileDrop,false);

            for (int i = 0; i < s.Length; i++)
            {
                Console.WriteLine(s[i]);
            }
        }

        private void DemoForm_DragEnter(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                e.Effect = DragDropEffects.All;
            }
            else
            {
                e.Effect = DragDropEffects.None;
            }
        }
    }
}

外接

编译工具CSC

参考:http://www.cnblogs.com/gibbonnet/p/5420548.html

常用命令:http://www.cnblogs.com/changweihua/archive/2011/04/02/2003844.html

输出图标:/win32icon,例如:csc /win32icon:myicon.ico my.cs

IDE设置图标:http://jingyan.baidu.com/article/7f41ececf50f4c593d095c11.html

为什么双击生成的exe文件时会执行命令行?
csc的编译目标:/target: exe(default)/winexe/library/module/appcontainerexe/winmdobj


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM