내가 설명하는 동작을 어떻게 처리하는지 보여주는 작은 응용 프로그램을 작성했습니다.
4 개의 컨트롤 (이 예제의 버튼은 원하는 컨트롤 일 수 있음)을 사용하여 기본 폼을 설정했습니다. 그런 다음 나는 선택자의 역할을하는 또 다른 형식을 설정했다. 이 예제에서는 ListBox에 컨트롤 이름이 포함되어 있습니다. 뭔가 더 좋아할 수 있습니다. 현재 포커스가있는 컨트롤을 전달하여 목록에서 이미 선택된 컨트롤을 가질 수도 있습니다. 나는 목록의 첫 번째 컨트롤을 기본값으로 사용했다.
선택기 컨트롤에서 선택한 컨트롤을 보유하기 위해 NextControl이라는 MainForm에 공용 속성을 설정했습니다. List 속성을 설정하여 선택할 수있는 모든 컨트롤에 대한 참조를 보유합니다. 이 메서드를 사용하면 대화 상자가 끝날 때까지 포커스가 다음 컨트롤에 설정되지 않으므로 ShowDialog가 제대로 작동합니다.
MainForm :
이
using System.Collections.Generic;
using System.Windows.Forms;
namespace Tabber
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
ControlList = new List<Control>(new Control[] {button1, button2, button3, button4});
}
private List<Control> ControlList { get; set; }
public Control NextControl { get; set; }
private void MainForm_KeyDown(object sender, KeyEventArgs e)
{
if (e.Modifiers == Keys.Control && e.KeyCode == Keys.Tab)
{
using (var chooseDialog = new Chooser(this, ControlList))
{
if (chooseDialog.ShowDialog() == DialogResult.OK)
{
if (NextControl != null)
{
NextControl.Focus();
}
}
}
}
}
}
}
선택기 :
using System.Collections.Generic;
using System.Windows.Forms;
namespace Tabber
{
public partial class Chooser : Form
{
public Chooser(MainForm sender, List<Control> controls)
{
Sender = sender;
InitializeComponent();
foreach (Control control in controls)
{
listBox1.Items.Add(control);
}
listBox1.DisplayMember = "Name";
listBox1.SetSelected(0, true);
}
private MainForm Sender { get; set; }
private void Chooser_KeyDown(object sender, KeyEventArgs e)
{
if (e.Modifiers == Keys.Control && e.KeyCode == Keys.Tab)
{
if (listBox1.SelectedIndex == listBox1.Items.Count - 1)
{
listBox1.SetSelected(0, true);
}
else
{
listBox1.SetSelected(listBox1.SelectedIndex + 1, true);
}
e.Handled = true;
}
}
private void listBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.ControlKey)
{
Sender.NextControl = (Control) listBox1.SelectedItem;
DialogResult = DialogResult.OK;
Close();
}
}
}
}
당신은 당신의 필요에 따라이를 수정할 수 있습니다. 그것은 나를 위해 초점을 바꿨습니다.
어떤 그래픽 라이브러리를 사용하고 있습니까? WinForms 또는 WPF? –
Ctrl-Tab 대화 상자와 응용 프로그램의 기본 창에 대한 여러 참조가 "양식"으로되어 있기 때문에 winforms 탭을 추가했습니다. –