c# - 关于 TabControl 中事件特殊性的问题

标签 c# winforms event-handling tabcontrol

下面我有一个关于一个特殊问题的小演示。

using System;
using System.Windows.Forms;

namespace WindowsApplication1
{
    public class TestForm : Form
    {
        private System.Windows.Forms.TabControl tabControl1;
        private System.Windows.Forms.TabPage tabPage1;
        private System.Windows.Forms.TabPage tabPage2;
        private System.Windows.Forms.TextBox textBox1;

        public TestForm()
        {
            //Controls
            this.tabControl1 = new System.Windows.Forms.TabControl();
            this.tabPage1 = new System.Windows.Forms.TabPage();
            this.tabPage2 = new System.Windows.Forms.TabPage();
            this.textBox1 = new System.Windows.Forms.TextBox();

            // tabControl1
            this.tabControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                        | System.Windows.Forms.AnchorStyles.Left)
                        | System.Windows.Forms.AnchorStyles.Right)));
            this.tabControl1.Controls.Add(this.tabPage1);
            this.tabControl1.Controls.Add(this.tabPage2);
            this.tabControl1.Location = new System.Drawing.Point(12, 12);
            this.tabControl1.Name = "tabControl1";
            this.tabControl1.SelectedIndex = 0;
            this.tabControl1.Size = new System.Drawing.Size(260, 240);
            this.tabControl1.TabIndex = 0;
            this.tabControl1.Selected += new System.Windows.Forms.TabControlEventHandler(this.tabControl1_Selected);

            // tabPage1
            this.tabPage1.Controls.Add(this.textBox1);
            this.tabPage1.Location = new System.Drawing.Point(4, 22);
            this.tabPage1.Name = "tabPage1";
            this.tabPage1.Size = new System.Drawing.Size(252, 214);
            this.tabPage1.TabIndex = 0;
            this.tabPage1.Text = "tabPage1";

            // tabPage2
            this.tabPage2.Location = new System.Drawing.Point(4, 22);
            this.tabPage2.Name = "tabPage2";
            this.tabPage2.Size = new System.Drawing.Size(192, 74);
            this.tabPage2.TabIndex = 1;
            this.tabPage2.Text = "tabPage2";

            // textBox1
            this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                        | System.Windows.Forms.AnchorStyles.Right)));
            this.textBox1.Location = new System.Drawing.Point(6, 38);
            this.textBox1.Name = "textBox1";
            this.textBox1.Size = new System.Drawing.Size(240, 20);
            this.textBox1.TabIndex = 0;

            // TestForm
            this.ClientSize = new System.Drawing.Size(284, 264);
            this.Controls.Add(this.tabControl1);
            this.Name = "Form1";
            this.Text = "Form1";
        }

        //Tab Selected
        private void tabControl1_Selected(object sender, EventArgs e)
        {
            this.Text = "TextBox Width: " + this.textBox1.Width.ToString();
        }
    }

    //Main
    static class Program
    {
        static void Main()
        {
            Application.Run(new TestForm());
        }
    }

}

如果运行上面的 C# 代码,您将得到一个包含选项卡控件的小窗体。在选项卡控件中,第一个选项卡上有一个文本框。如果您按照以下步骤操作,您将看到问题:

  1. 选择 tabPage2(textBox1 的宽度在表单标题中报告)
  2. 调整表单大小
  3. 选择tabPage1(报告了错误的textBox1宽度)

有什么想法吗?文本框显然比所报告的要大。如果您再次单击 tabPage2,则会更新正确的尺寸。显然有一个事件更新了textBox1的宽度。我可以在选择 tabPage1 时触发此操作吗?

最佳答案

首先,感谢完整的程序 - 它让我们更容易弄清楚发生了什么!

虽然文本框不可见,但其大小并未调整。当您选择 tabPage1 时,Selected 事件会在控件变得可见并且文本框再次布局之前触发。

现在,这就是发生这种情况的原因 - 但您的真实情况是什么?如果您确实想捕获控件大小的变化,请订阅它们的 Resize 事件。如果没有,您能否详细解释一下您想要实现的目标?

关于c# - 关于 TabControl 中事件特殊性的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/227485/

相关文章:

node.js - 在 Node.js 中,什么是并行执行(显式和隐式)的,什么是顺序执行的?

qt - 如何在托管 C++ (C++/CLI) 中将 Qt 信号映射到事件

c# - 为树节点创建列表

c# - 使用C#在xml文档中获取特定值

c# - 如何使用 SQL 查询 DataGridView?

c# - 使动态表单控件永久化

c# - 如何在wpf中的窗口中设置多个Datacontext

c# - 在 Windows Mobile 中管理网络状态的最佳方式

c# - 基于 XSD 创建表单生成 XML 的智能方式

javascript - 在同一个 javascript 事件处理程序中调用不同的函数