如何编辑要插入TextBox的文本?

时间:2011-01-10 16:05:14

标签: c# wpf textbox

我有TextBox我需要格式化文本,如果它放在ctrl + v

我试过了:

  String str = Clipboard.GetText();
  (sender as TextBox).Text += str.Replace("\r\n\r\n", "\r\n");

但此代码抛出异常

错误:Why doesn't Clipboard.GetText work?

3 个答案:

答案 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.TextClipboard.getText()。然后编辑文本并将其放回文本框中。