在下面的代码我有2个文本框的列表框,目前它的工作,但我有两个问题
1.suppose我需要拖动超过2个文本框,而不是复制代码我可以写它 以动态的方式支持5个文本框?
这是两个文本框的代码
private void textbox1_PreviewDrop(object sender, DragEventArgs e)
{
string name = e.Data.GetData(DataFormats.StringFormat).ToString();
textbox1.Text += name;
textbox1.Focus();
textbox1.CaretIndex = textbox1.Text.Length;
e.Handled = true;
_UsersList.Remove((User) listbox1.SelectedItem);
}
private void textbox2_PreviewDrop(object sender, DragEventArgs e)
{
string name = e.Data.GetData(DataFormats.StringFormat).ToString();
textbox2.Text += name;
textbox2.Focus();
textbox2.CaretIndex = textbox2.Text.Length;
e.Handled = true;
bool remove = _UsersList.Remove((User)listbox1.SelectedItem);
}
以下代码中的第二个问题我检查文本框是否已经有值,如果是,则不允许拖动(文本框1和2的Or语句) 另一个值,如果我有超过2个文本框,有更好的方法来写它吗?
private void listbox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.AddedItems.Count > 0 && (string.IsNullOrEmpty(textbox1.Text) || string.IsNullOrEmpty(textbox2.Text)))
{
if (listbox1.SelectedItems.Count > 0)
{
var mySelectedItem = listbox1.SelectedItem as User;
... } } }
xaml中的
<TextBox x:Name="textbox1"
AcceptsReturn="True"
AllowDrop="True"
DragOver="textbox1_DragOver"
PreviewDrop="textbox1_PreviewDrop"
<TextBox x:Name="textbox2"
AcceptsReturn="True"
AllowDrop="True"
DragOver="textbox2_DragOver"
PreviewDrop="textbox2_PreviewDrop"
答案 0 :(得分:1)
问题1:是的,您可以创建一个通用方法并传入参数。像这样:
private void textbox_PreviewDrop(object sender, DragEventArgs e)
{
string name = e.Data.GetData(DataFormats.StringFormat).ToString();
TextBox textbox = (TextBox)sender;
textbox.Text += name;
textbox.Focus();
textbox.CaretIndex = textbox.Text.Length;
e.Handled = true;
bool remove = _UsersList.Remove((User)listbox1.SelectedItem);
}
<TextBox x:Name="textbox1"
AcceptsReturn="True"
AllowDrop="True"
DragOver="textbox1_DragOver"
PreviewDrop="textbox_PreviewDrop"
<TextBox x:Name="textbox2"
AcceptsReturn="True"
AllowDrop="True"
DragOver="textbox2_DragOver"
PreviewDrop="textbox_PreviewDrop"
问题2:您的代码看起来正确。您必须为每个文本框检查Null / Empty。我没有看到更好的方法。
答案 1 :(得分:1)
为所有textBox提供 一个公共处理程序 。您可以从发件人获取textBox:
private void textbox_PreviewDrop(object sender, DragEventArgs e)
{
TextBox textBox = (TextBox)sender;
string name = e.Data.GetData(DataFormats.StringFormat).ToString();
textBox.Text += name;
textBox.Focus();
textBox.CaretIndex = textBox.Text.Length;
e.Handled = true;
bool remove = _UsersList.Remove((User)listbox1.SelectedItem);
}