我尝试使用TextView Gtk控件剪切,复制,粘贴和选择所有内容。为什么TextView控件?因为我似乎无法让血腥的TextEditor控件进入多线!
无论如何......我如何:
从TextView控件剪切文本?
从TextView控件中复制文本?
将文本粘贴到TextView控件中?
在TextView控件中选择所有文本?
<小时/> 这是我尝试过的: 1小时的谷歌搜索。
和此:
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#docs。有很多东西似乎根本不存在。
答案 0 :(得分:8)
基本上,您应该使用TextBuffer
中的基础TextView
。
要剪切,复制和粘贴,首先我们应该选择我们想要复制的部分(或检查并查看缓冲区是否已经有一些选择),选择一个部分我们应该得到一个类型{{1的迭代器来自缓冲区,我们可以这样做:
以下是 SelectAll 的示例:
TextIter
这是一个例子,用于从文本中选择范围[2,4]:
var start = textview.Buffer.GetIterAtOffset (0);
var end = textview.Buffer.GetIterAtOffset (0);
end.ForwardToEnd ();
textview.Buffer.SelectRange (start, end);
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()
是否有任何选择,我们应该使用TextBuffer
属性:
HasSelection
现在我们有了一个选定的文本,我们可以简单地将它与剪贴板操作一起使用。
以下是切割所选范围[2,4]的示例:
var hasSelection = textview.Buffer.HasSelection;
复制与剪切非常相似,我们只应将 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);
替换为CutClipboard
:
以下是复制所选范围[2,4]的示例:
CopyClipboard
最后粘贴来自剪贴板的内容非常类似于剪切/复制
以下是从剪贴板到位置0的粘贴一些文字的示例:
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);
作为最后一个例子,我们将文字设置为 123456 ,然后从中剪切 34 并将其粘贴在开头,最终文字应该像 341256 :
var pasteLocation=textview.Buffer.GetIterAtOffset (0);
textview.Buffer.SelectRange (pasteLocation, pasteLocation);
textview.Buffer.PasteClipboard (clipboard);
答案 1 :(得分:0)
您可以使用一些按钮来执行此操作!实际上是button1(复制),button2(粘贴)等 然后你可以阅读用户输入(TextField **。文字**)然后把它放在数组中 之后,您可以显示您的数组输出(粘贴) 并且对于复制/粘贴输入的选定部分(不是全部),您可以存储索引(从索引到选择结束索引)和在索引之间读取/写入数据(选择索引)并将用户输入放入数组中并享受它! 我不是一个c#程序员,但我试图让你明白你应该做什么。我希望如此 祝你好运