Как сделать TableLayoutPanel фокусируемым - PullRequest
0 голосов
/ 20 октября 2019

У меня есть пользовательский элемент управления, производный от TableLayoutPanel. Я хочу сделать это фокусируемым, но TableLayoutPanel - нет. Как я могу это сделать? Если я не могу сделать элемент управления, полученный из TableLayoutPanel, сам по себе, как я могу его обойти?

В приведенном ниже примере я просто добавил TableLayoutPanel непосредственно, чтобы показать, что табуляция через форму фокусирует два элемента. ComboBox, но не мой элемент управления на основе TableLayoutPanel. В этом случае он имеет функциональность кнопок, которая, конечно, тривиальна и, скорее всего, будет заменена существующим элементом управления Button в реальном приложении, но только для демонстрационных целей.

using System;
using System.Drawing;
using System.Windows.Forms;

namespace TestCustomComboBox
{
    /// <summary>
    /// Description of MainForm.
    /// </summary>
    public class MainForm : Form
    {
        ComboBox comboBox1;
        ComboBox comboBox2;
        TableLayoutPanel tableLayoutPanel1;
        Label label1;

        public MainForm()
        {
            comboBox1 = new ComboBox();
            comboBox2 = new ComboBox();
            tableLayoutPanel1 = new TableLayoutPanel();
            label1 = new Label();
            tableLayoutPanel1.SuspendLayout();
            SuspendLayout();

            comboBox1.FormattingEnabled = true;
            comboBox1.Location = new Point(82, 45);
            comboBox1.Name = "comboBox1";
            comboBox1.Size = new Size(121, 21);
            comboBox1.TabIndex = 0;

            comboBox2.FormattingEnabled = true;
            comboBox2.Location = new Point(96, 99);
            comboBox2.Name = "comboBox2";
            comboBox2.Size = new Size(121, 21);
            comboBox2.TabIndex = 1;

            tableLayoutPanel1.ColumnCount = 1;
            tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
            tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 20F));
            tableLayoutPanel1.Controls.Add(label1, 0, 0);
            tableLayoutPanel1.Location = new Point(45, 149);
            tableLayoutPanel1.Name = "tableLayoutPanel1";
            tableLayoutPanel1.RowCount = 1;
            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 20F));
            tableLayoutPanel1.Size = new Size(200, 25);
            tableLayoutPanel1.TabIndex = 2;

            label1.AutoEllipsis = true;
            label1.BackColor = SystemColors.Window;
            label1.BorderStyle = BorderStyle.FixedSingle;
            label1.Dock = DockStyle.Fill;
            label1.Location = new Point(0, 0);
            label1.Margin = new Padding(0);
            label1.Name = "label1";
            label1.Size = new Size(200, 100);
            label1.TabIndex = 0;
            label1.Text = "This is a placeholder for my own control";
            label1.TextAlign = ContentAlignment.MiddleLeft;
            label1.Click += justToShowThatThisIsAControl;

            StartPosition = FormStartPosition.CenterScreen;
            AutoScaleDimensions = new SizeF(6F, 13F);
            AutoScaleMode = AutoScaleMode.Font;
            ClientSize = new Size(284, 261);
            Controls.Add(tableLayoutPanel1);
            Controls.Add(comboBox2);
            Controls.Add(comboBox1);
            Name = "MainForm";
            Text = "TestCustomComboBox";
            tableLayoutPanel1.ResumeLayout(false);
            ResumeLayout(false);
        }

        void justToShowThatThisIsAControl(object sender, EventArgs e)
        {
            MessageBox.Show("Boo");
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...