如何在TextView控件中剪切,复制,粘贴和选择所有内容?

时间:2014-12-18 13:12:59

标签: c# linux gtk monodevelop gtk#

我尝试使用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。有很多东西似乎根本不存在。

2 个答案:

答案 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#程序员,但我试图让你明白你应该做什么。我希望如此 祝你好运