我有TextBox我需要格式化文本,如果它放在ctrl + v
中我试过了:
String str = Clipboard.GetText();
(sender as TextBox).Text += str.Replace("\r\n\r\n", "\r\n");
但此代码抛出异常
答案 0 :(得分:1)
在TextChanged事件处理程序中格式化文本。
评论后更新:
您无需执行任何操作,只需处理textchange事件:
XAML:
<TextBox x:Name="tbTarget" TextChanged="tbTarget_TextChanged" />
代码:
void tbTarget_TextChanged(object sender, TextChangedEventArgs e)
{
Dim tb = (TextBox)sender;
tb.Text = tb.Text.ToUpper();
}
如果TextBox仅用于文本粘贴,则cosider将其IsReadOnly
属性设置为true。
上次评论后更新:
将以下内容添加到您的代码类中:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataObject.AddPastingHandler(tb,
new DataObjectPastingEventHandler(tb_Pasting));
}
private void tb_Pasting(object sender, DataObjectPastingEventArgs e)
{
if (e.SourceDataObject.GetDataPresent(DataFormats.Text))
{
var text =
(string)e.SourceDataObject.GetData(DataFormats.Text) ?? string.Empty;
e.DataObject = new DataObject(DataFormats.Text, text.ToUpper());
}
}
}
答案 1 :(得分:0)
我有TextBox我需要格式化 文本,如果它被放入ctrl + v
考虑处理TextChanged event?
答案 2 :(得分:0)
首先,您必须通过监视Windows消息来捕获粘贴事件。
以下事情未经测试。
private const int WM_PASTE = 0x0302;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_PASTE)
{
//Paste Event
}
}
在粘贴事件中,您可以在textBox中获取当前文本。这里从clipbord粘贴的文本可能会插入到文本框中,或者它仍然会在剪贴板中,您可以轻松地测试它。
如果粘贴了文字,则可以textBox1.Text
或Clipboard.getText()
。然后编辑文本并将其放回文本框中。