gpt4 book ai didi

c# - WinRT XAML 文本框、SelectionStart 和 CR/LF

转载 作者:行者123 更新时间:2023-11-30 13:02:29 25 4
gpt4 key购买 nike

我在我的一个 Windows 商店应用程序 中使用了一个简单的多行 TextBox,我想启用 tab 来缩进文本。

由于 WinRT 在 TextBox 上没有 XAML AcceptsTab 属性,我认为当我检测到 Tab 键击时我必须手动处理它。

问题是:\r\n 似乎被 SelectionStart 属性处理为一个字符而不是两个,我没有得到真正的 char 位置。

我现在唯一的想法是通过解析文本并将每个 SelectionStart 加 1 来规范化 SelectionStart\r\n 我在插入符号前看到的事件。

public static class TextBoxExtension
{
public static int GetNormalizedSelectionStart(this TextBox textBox)
{
int occurences = 0;
string source = textBox.Text;

for (var index = 0; index < textBox.SelectionStart + occurences ; index++)
{
if (source[index] == '\r' && source[index + 1] == '\n')
occurences++;
}
return textBox.SelectionStart + occurences;
}
}

最后 SelectionStart 在操作后被重置为 0,所以我必须将它设置回正确的位置,这次使用非规范化位置。这是来电者:

if (e.Key == VirtualKey.Tab)
{
int cursorIndex = MainTextBox.SelectionStart;
int cursorIndexNormalized = MainTextBox.GetNormalizedSelectionStart();
MainTextBox.Text = MainTextBox.Text.Insert(cursorIndexNormalized, "\t");
MainTextBox.SelectionStart = cursorIndex + 1;
e.Handled = true;
}

它有效,但是......我又重新发明了那个圆形的东西吗?有没有更简洁的方法来做到这一点?

最佳答案

似乎您必须执行“Ctrl + Tab”才能在您的文本框中实际插入一个选项卡。因此你所要做的就是这样

TextBox_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
if (e.KeyCode == Keys.Tab)
{
e.Handled = true;
SendKeys(^{TAB});
}
}

^ 代表 CTRL 键,TAB 代表您的 Tab 键。使用此组合,您可以在应用程序中正常使用 Tab

关于c# - WinRT XAML 文本框、SelectionStart 和 CR/LF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15291600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com