Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么ShowDialog在我的文本框中选择文本?_C#_.net_Winforms - Fatal编程技术网

C# 为什么ShowDialog在我的文本框中选择文本?

C# 为什么ShowDialog在我的文本框中选择文本?,c#,.net,winforms,C#,.net,Winforms,我有一个非常简单的错误,我正试图弹出。当我调用ShowDialog时,文本框中的所有文本都被选中。看起来很傻。当我在ShowDialog之前打断时,不会选择任何文本。调用ShowDialog后,将选择所有文本,无需任何用户交互 static void ShowError(string error) { var form = new Form { Text = "Unexpected Error", S

我有一个非常简单的错误,我正试图弹出。当我调用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();
    }

您可以将
SelectionStart=0、SelectionLength=0
Enabled=false
添加到文本框创建代码中

尝试显式设置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();
} 

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


从MSDN-
。当属性设置为true时,用户仍可以滚动并突出显示文本框中的文本,而不允许进行更改。

已尝试修改选择,但无效。正如我所说,在ShowDialog之前,没有选择,即SelectedText==“”、SelectionStart==0和SelectionLength==0。Enabled=false可以工作,但它会使文本变为灰色,我希望用户能够复制/粘贴错误。@MattChambers我通过添加
SelectionStart=0,SelectionLength=0尝试了您的代码,它工作了!这一定是个bug。它仅适用于SelectionStart=0;SelectionLength=0与此无关。但我再次确认,在调用ShowDialog之前,即使没有SelectionStart=0,SelectionStart==0!在模态表单中的所有我的文本框中将TabStop设置为false效果很好。这是史蒂夫在下面提出的,对我来说似乎是最好的选择。