如何在TextView控件中剪切,复制,粘贴和select全部内容?

我试图剪切,复制,粘贴,并select所有与TextView的Gtk控制。 为什么TextView控件? 因为我似乎无法得到血腥的TextEditor控制去多行!

无论如何…我如何:

从TextView控件中剪切文本?

从TextView控件复制文本?

文本粘贴到TextView控件中?

在TextView控件中select所有文本?


以下是我所尝试的:1小时的谷歌search。

和这个:

TextView tv = ...; TextIter start, end; if (tv.Buffer.GetSelectionBounds(start, end)) { String selected = tv.Buffer.GetText(start, end); Clipboard clipboard = tv.GetClipboard(Gdk.Selection.Clipboard); clipboard.Text = selected; } 

从: https : //stackoverflow.com/questions/26308501/gtk-textview-copy-and-paste – 但这显然不起作用(因此我的问题)。

我也发现这个: http : //docs.go-mono.com/ ?link=T%3aGtk.TextView Mono GTK C#文档。 有这么多东西,似乎是不存在的。

Solutions Collecting From Web of "如何在TextView控件中剪切,复制,粘贴和select全部内容?"

基本上你应该使用TextView基础TextBuffer

选择

要剪切,复制和粘贴,首先我们应该选择我们想要复制的部分(或者检查缓冲区是否已经有一些选择),选择一个部分我们应该从缓冲区获得一个类型为TextIter的迭代器,这里是我们如何做到这一点:

以下是SelectAll的一个例子:

 var start = textview.Buffer.GetIterAtOffset (0); var end = textview.Buffer.GetIterAtOffset (0); end.ForwardToEnd (); textview.Buffer.SelectRange (start, end); 

这里是一个例子是从文本中选择范围[2,4]:

 var start = textview.Buffer.GetIterAtOffset (0); start.ForwardChars (2); var end = textview.Buffer.GetIterAtOffset (0); end.ForwardChars (4); textview.Buffer.SelectRange (start, end); 

TextIter有范围选择的广泛方法,例如ForwardChars()有一个双向的BackwardChars()方法。

要检查我们的HasSelection是否有任何选择,我们应该使用HasSelection属性:

 var hasSelection = textview.Buffer.HasSelection; 

使用剪贴板

现在我们有了一个选定的文本,我们可以简单地将它用于剪贴板操作。

以下是切割选定范围的示例[2,4]:

  var clipboard = textview.GetClipboard (Gdk.Selection.Clipboard); var start = textview.Buffer.GetIterAtOffset (0); start.ForwardChars (2); var end = textview.Buffer.GetIterAtOffset (0); end.ForwardChars (4); textview.Buffer.SelectRange (start, end); textview.Buffer.CutClipboard (clipboard, true); 

复制Cutting非常相似,我们应该只用CutClipboard替换CopyClipboard

以下是复制选定范围[2,4]的示例:

  var clipboard = textview.GetClipboard (Gdk.Selection.Clipboard); var start = textview.Buffer.GetIterAtOffset (0); start.ForwardChars (2); var end = textview.Buffer.GetIterAtOffset (0); end.ForwardChars (4); textview.Buffer.SelectRange (start, end); textview.Buffer.CopyClipboard (clipboard, true); 

最后从剪贴板粘贴东西与剪切/复制非常相似

这里是一个从剪贴板粘贴一些文本到位置0的例子:

 var pasteLocation=textview.Buffer.GetIterAtOffset (0); textview.Buffer.SelectRange (pasteLocation, pasteLocation); textview.Buffer.PasteClipboard (clipboard); 

最后的例子:

作为最后一个例子,我们将文本设置为123456 ,然后从中删除34 ,并将其粘贴在开头,最后的文本应该是341256

 void TextViewSample () { textview.Buffer.Text = "123456"; var clipboard = textview.GetClipboard (Gdk.Selection.Clipboard); var start = textview.Buffer.GetIterAtOffset (0); start.ForwardChars (2); var end = textview.Buffer.GetIterAtOffset (0); end.ForwardChars (4); textview.Buffer.SelectRange (start, end); var hasSelection = textview.Buffer.HasSelection; textview.Buffer.CutClipboard (clipboard, true); var pasteLocation = textview.Buffer.GetIterAtOffset (0); textview.Buffer.SelectRange (pasteLocation, pasteLocation); textview.Buffer.PasteClipboard (clipboard); } 

实际上button1(复制),button2(粘贴)等,然后你可以阅读用户输入(TextField **。Text **),然后它放在一个数组 ,然后你可以显示你的数组对于输出(粘贴)以及复制/粘贴选定部分的输入(不是全部),可以存储索引(从哪个索引到结束索引被选中)以及在这些索引(选定索引)之间读取/写入数据,并将用户输入在阵列和享受它! 我不是交流#程序员,但我试图让你明白你应该做什么,我希望如此好运