为什么ShowDialog在我的TextBox中选择文本

本文关键字:选择 文本 TextBox 我的 ShowDialog 为什么 | 更新日期: 2023-09-27 18:25:59

我正在尝试制作一个非常简单的错误弹出窗口。当我调用ShowDialog时,文本框中的所有文本都会被选中。看起来很傻。当我在ShowDialog之前中断时,没有选择任何文本。调用ShowDialog后,所有文本都被选中,而不需要任何用户交互。

    static void ShowError(string error)
    {
        var form = new Form
        {
            Text = "Unexpected Error",
            Size = new System.Drawing.Size(800, 600),
            StartPosition = FormStartPosition.CenterParent,
            ShowIcon = false,
            MinimizeBox = false,
            MaximizeBox = false
        };
        var textBox = new TextBox
        {
            Text = error,
            Dock = DockStyle.Fill,
            Multiline = true,
            ReadOnly = true,
        };
        form.Controls.Add(textBox);
        form.ShowDialog();
    }

为什么ShowDialog在我的TextBox中选择文本

您可以将SelectionStart=0, SelectionLength = 0Enabled = false添加到您的textBox创建代码

好吧,如果您设置TabStop=false;该控件将被取消选择。但是,ReadOnly意味着您的用户可以始终手动选择文本。

来自MSDN-. With the property set to true, users can still scroll and highlight text in a text box without allowing changes.

尝试显式设置SelectionStart,尽管我不确定为什么这是必要的:

static void ShowError(string error)
{
    var form = new Form
    {
        Text = "Unexpected Error",
        Size = new System.Drawing.Size(800, 600),
        StartPosition = FormStartPosition.CenterParent,
        ShowIcon = false,
        MinimizeBox = false,
        MaximizeBox = false
    };
    form.SuspendLayout();
    var textBox = new TextBox
    {
        Text = error,
        Name = "textBox1",
        Dock = DockStyle.Fill,
        Multiline = true,
        ReadOnly = true,
        SelectionStart = 0, // or = error.Length if you prefer
    };
    form.Controls.Add(textBox);
    form.ResumeLayout();
    form.PerformLayout();
    form.ShowDialog();
}