读书人

在设置Form的MinimumSize属性时如果

发布时间: 2012-05-22 18:18:54 作者: rapoo

在设置Form的MinimumSize属性时,如果使Form不被激活?
用Refactor看了Form的源码,在设置MinimumSize属性时,最终会调用系统的SetWindowPos方法,并且nFlags中没有加SWP_NOACTIVATE,应该是这个方法导致Form被激活的?请问有什么办法在设置MinimumSize属性时不激活窗口?我试过了捕获WM_ACTIVATE消息,却不管用。请高手帮忙!

[解决办法]
最小化时Form的Enabled=false可以吗?
[解决办法]
不知道是否可行,不过你可以考虑保存前次激活窗口,最小化后再次激活前次窗口。
[解决办法]
捕获WM_GETMINMAXINFO消息自己来处理。
[解决办法]
是想在设置MinimumSize时禁止执行Activated里的代码?
最简单的办法,变通一下好了,加个委托,以及焦点重新指定一下

C# code
Form1:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;namespace WindowsApplication66{    public partial class Form1 : Form    {        Form2 F = null;        bool Cancel = false;        public Form1()        {            InitializeComponent();            (F = new Form2(new EventHandler(ActivatedControl))).Show();        }        void ActivatedControl(object sender, EventArgs e)        {            if (Cancel)                throw new Exception("CancelContinue");        }        void button1_Click(object sender, EventArgs e)        {            try            {                Cancel = true;                F.MinimumSize = new Size(100, 100);                this.Focus();            }            finally            {                this.Focus();            }        }    }}Form2:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Runtime.InteropServices;namespace WindowsApplication66{    public partial class Form2 : Form    {        int Count = 0;        EventHandler FActivatedControl = null;        public Form2(EventHandler EH)        {            InitializeComponent();            FActivatedControl = EH;        }        void Form2_Activated(object sender, EventArgs e)        {            try            {                if (FActivatedControl != null)                    FActivatedControl(null, null);                this.Text = "第" + (++Count).ToString() + "激活";            }            catch (Exception ex)            {                if (ex.Message == "CancelContinue")                    return;            }        }        void Form2_Deactivate(object sender, EventArgs e)        {            try            {                if (FActivatedControl != null)                    FActivatedControl(null, null);                // 如果失去焦点事件里也有代码要控制            }            catch (Exception ex)            {                if (ex.Message == "CancelContinue")                    return;            }        }        void Form2_Shown(object sender, EventArgs e)        {            try            {                if (FActivatedControl != null)                    FActivatedControl(null, null);                // 如果显示窗口事件里也有代码要控制            }            catch (Exception ex)            {                if (ex.Message == "CancelContinue")                    return;            }        }    }}
[解决办法]
学习!

读书人网 >C#

热点推荐