#c# #wpf #xaml
Вопрос:
У меня есть проект C# WPF, у меня 4 ячейки, и я попытался вставить в эти ячейки некоторый код(например , PIN-код), но когда я нажал CTRL V, его первая цифра скопирована только в первую ячейку. Как я могу это решить?
.файл xaml
<StackPanel Style="{DynamicResource HorizontalPanel}" >
<Menu>
<MenuItem Command="ApplicationCommands.Paste" />
</Menu>
<Border Style="{DynamicResource DigitBorder}">
<TextBox Style="{DynamicResource Digit1Text}" Name="Digit1" TextChanged="Digit1_TextChanged" />
</Border>
<Border Style="{DynamicResource DigitBorder}">
<TextBox Style="{DynamicResource Digit2Text}" Name="Digit2" TextChanged="Digit2_TextChanged"/>
</Border>
<Border Style="{DynamicResource DigitBorder}">
<TextBox Style="{DynamicResource Digit3Text}" Name="Digit3" TextChanged="Digit3_TextChanged"/>
</Border>
<Border Style="{DynamicResource DigitBorder}">
<TextBox Style="{DynamicResource Digit4Text}" Name="Digit4" TextChanged="Digit4_TextChanged"/>
</Border>
</StackPanel>
файл .xaml.cs:
}
public PasswordScreen(object object1, object object2, ConnectorAction connectorAction)
{
InitializeComponent();
Digit1.Focus();
Object1 = object1;
Object2 = object2;
ConnectorAction = connectorAction;
MenuItem pasteMenuItem = new MenuItem();
pasteMenuItem.Command = ApplicationCommands.Paste;
}
private void Digit1_TextChanged(object sender, TextChangedEventArgs e)
{
if (Digit1.Text.Length == 1)
{
Digit2.Focus();
}
}
то же самое для Digit2_TextChanged,Digit3_TextChanged,Digit4_TextChanged
Я не понимаю, как я улавливаю здесь пин — код и вставляю номера каждого номера на разные ячейки? подчеркнутый текст
Ответ №1:
Если я правильно понял, вы хотите вставить 4-значный pin-код и каждую цифру в одно текстовое поле.
Одним из способов может быть обработка его в измененном тексте текстового поля (пример для первого текстового поля, для других изменений текстового поля, необходимых, если все текстовые поля должны поддерживать разделение).:
private void Digit1_TextChanged(object sender, TextChangedEventArgs e)
{
if (Digit1.Text.Length <= 1)
return;
string text = Digit1.Text;
Digit2.Text = text[1].ToString();
if (text.Length > 2)
Digit3.Text = text[2].ToString();
if (text.Length > 3)
Digit4.Text = text[3].ToString();
Digit1.Text = text[0].ToString();
}
Или напишите собственную команду для вставки, которую можно вызвать нажатием кнопки или ярлыком:
private void MenuItem_Click(object sender, RoutedEventArgs e)
{
if (!Clipboard.ContainsText())
return;
string clipboardText = Clipboard.GetText();
if (string.IsNullOrEmpty(clipboardText))
return;
int length = clipboardText.Length;
if (length > 0)
Digit1.Text = clipboardText[0].ToString();
if (length > 1)
Digit2.Text = clipboardText[1].ToString();
if (length > 2)
Digit3.Text = clipboardText[2].ToString();
if (length > 3)
Digit4.Text = clipboardText[3].ToString();
}
Комментарии:
1. Как menuitem_click обрабатывает Ctrl V ?
2. @Andy как я уже упоминал выше, это предназначалось для использования с нажатием кнопки также в качестве возможности. Событие textbox должно разделить текст, если он больше 1 символа.