У меня есть пользовательский элемент управления, производный от 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");
}
}
}