自定义文本框中的SelectAll方法(Winforms .NET 7)

r3i60tvu  于 2023-01-21  发布在  .NET
关注(0)|答案(1)|浏览(143)

我做了一个自定义文本框,这是一个面板内的文本框。
我尝试执行的是[CustomTextBox name].SelectAll();,它返回[TextBox nameInsideCustomControl].SelectAll();
[...]只是个名字。
我该如何实现它?
我试过:

[Category("Custom")]
public void SelectAll
{
    get { textBox1.SelectAll(); }
}

但我觉得这样不对。
答案:public void SelectAll() => textBox1.SelectAll();。它是一个方法,不是属性。-dr.null

pqwbnv8z

pqwbnv8z1#

您有一个继承自PanelCustomTextBox,并且希望能够选择它所包含的TextBox中的所有文本。

为了达到这个目的,首先确保CustomTextBox公开了一个名为SelectAll的公共方法,该方法将命令转发到它包含的私有TextBox。但是 * 除此之外 * 您还需要确保内部TextBox接收焦点 * 或 * 将内部TextBoxHideSelection属性设置为false。否则,您可能仍然看不到高亮显示的选择。

自定义文本框示例

public partial class CustomTextBox : Panel
{
    public void SelectAll()
    {
        textBox1.SelectAll();
        // Ensure text box gets the focus.
        textBox1.Focus();
    }
    public void LoadTestData() => 
        textBox1.Text = "Don't forget to give Focus to the TextBox!";
    public CustomTextBox()
    {
        BackColor= Color.Azure;
        label1 = new System.Windows.Forms.Label();
        textBox1 = new System.Windows.Forms.TextBox();

        #region I N I T I A L I Z E
        SuspendLayout();

        label1.AutoSize = true;
        label1.Location = new System.Drawing.Point(12, 17);
        label1.Size = new System.Drawing.Size(143, 25);
        label1.TabIndex = 0;
        label1.Text = "Custom Text Box";

        textBox1.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)));
        textBox1.Location = new System.Drawing.Point(190, 17);
        textBox1.Multiline = true;
        textBox1.Size = new System.Drawing.Size(206, 126);
        textBox1.TabIndex = 1;
        textBox1.HideSelection = false;

        Controls.Add(textBox1);
        Controls.Add(label1);
        Name = "CustomTextBox";
        Size = new System.Drawing.Size(424, 157);
        ResumeLayout(false);
        PerformLayout();
        #endregion I N I T I A L I Z E
    }
    private Label label1;
    private TextBox textBox1;
}

最小测试代码

public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();
        customTextBoxPanel.LoadTestData();
        buttonSelectAllTest.Click += onClickSelectAllTest;
    }

    private void onClickSelectAllTest(object? sender, EventArgs e)
    {
        customTextBoxPanel.SelectAll();
    }
}

相关问题