各位,谁知道如何调用windows系统自带的copy,paste,cut????????

ZC747 2004-10-17 08:32:25
我想在自己的windows菜单上,添加像系统编辑菜单的那种菜单,请问各位谁用过,感激不尽!!
请大家帮帮忙!!!
...全文
304 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
BearRui 2004-10-18
  • 打赏
  • 举报
回复
Clipboard。

如果是控制richtextbox的话就可以直接调用richtextbox的方法:

richtextbox.Cut();
richtextbox.Copy();
richtextbox.Paste();
cjzlxy 2004-10-18
  • 打赏
  • 举报
回复
帮你顶...
yaopeng117 2004-10-18
  • 打赏
  • 举报
回复
学习。
hanbinghai 2004-10-18
  • 打赏
  • 举报
回复
复制:
object s = "看看";
Clipboard.SetDataObject(s.ToString());
粘贴:
IDataObject iData = Clipboard.GetDataObject();

// Determines whether the data is in a format you can use.
if(iData.GetDataPresent(DataFormats.Text))
{
// Yes it is, so display it in a text box.
this.richTextBox1.Text = (String)iData.GetData(DataFormats.Text);
}

帮助里搜索Clipboard看看使用方法
lbx1979 2004-10-18
  • 打赏
  • 举报
回复
其实menu也是对应着一个对象的,
鼠标右键的context menu还不是在一个对象里触发后也会不一样吗
你要做的是获取当前的对象,然后调用Clipboard的方法
ZC747 2004-10-18
  • 打赏
  • 举报
回复
我觉得粘贴,复制,剪切,这些系统常用的东西,或许能有个便捷的现成方法,就像点击鼠标右键弹出的那个菜单一样,如果能把右键菜单的功能放在Menu上,就搞定了:)
前面的朋友提到richtextbox可以用现成的方法;其他的可输入控件是不是都可以??
我是想将功能做在主menu上,所以不能只调用一个控件的方法,大家帮忙!:)
ZC747 2004-10-18
  • 打赏
  • 举报
回复
加分!!!!!
hanbinghai 2004-10-18
  • 打赏
  • 举报
回复
抛砖引玉,等待答案
hanbinghai 2004-10-18
  • 打赏
  • 举报
回复
先做个paste的例子
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace WindowsApplication6
{
/// <summary>
/// Form1 的摘要说明。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.RichTextBox richTextBox1;
private System.Windows.Forms.ContextMenu contextMenu1;
private System.Windows.Forms.MenuItem menuItem1;
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;
//粘贴剪切板
[System.Runtime.InteropServices.DllImport("user32")]
private static extern IntPtr SetClipboardViewer(IntPtr hwnd);
[System.Runtime.InteropServices.DllImport("user32")]
private static extern IntPtr ChangeClipboardChain(IntPtr hwnd,IntPtr hWndNext);
[System.Runtime.InteropServices.DllImport("user32")]
private static extern int SendMessage(IntPtr hwnd,int wMsg,IntPtr wParam,IntPtr lParam);

const int WM_DRAWCLIPBOARD = 0x308;
const int WM_CHANGECBCHAIN = 0x30D;
IntPtr NextClipHwnd;
public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();

//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}

/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.richTextBox1 = new System.Windows.Forms.RichTextBox();
this.contextMenu1 = new System.Windows.Forms.ContextMenu();
this.menuItem1 = new System.Windows.Forms.MenuItem();
this.SuspendLayout();
//
// richTextBox1
//
this.richTextBox1.ContextMenu = this.contextMenu1;
this.richTextBox1.Location = new System.Drawing.Point(20, 12);
this.richTextBox1.Name = "richTextBox1";
this.richTextBox1.Size = new System.Drawing.Size(218, 168);
this.richTextBox1.TabIndex = 0;
this.richTextBox1.Text = "richTextBox1";
//
// contextMenu1
//
this.contextMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuItem1});
//
// menuItem1
//
this.menuItem1.Index = 0;
this.menuItem1.Text = "粘贴";
this.menuItem1.Click += new System.EventHandler(this.menuItem1_Click);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(292, 273);
this.Controls.Add(this.richTextBox1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);

}
#endregion

/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}

private void menuItem1_Click(object sender, System.EventArgs e)
{
NextClipHwnd=SetClipboardViewer(this.Handle);
ChangeClipboardChain(this.Handle,NextClipHwnd);
//从观察链中删除本观察窗口
SendMessage(NextClipHwnd,WM_CHANGECBCHAIN,this.Handle,NextClipHwnd);
}
//剪切板
protected override void WndProc(ref System.Windows.Forms.Message m)
{
switch(m.Msg)
{
case WM_DRAWCLIPBOARD:
SendMessage(NextClipHwnd,m.Msg,m.WParam,m.LParam);
//将WM_DRAWCLIPBOARD消息传递到下一个观察链中的窗口
IDataObject iData = Clipboard.GetDataObject();
if(iData.GetDataPresent(DataFormats.Text)|iData.GetDataPresent(DataFormats.OemText))
{
this.richTextBox1.Rtf =(String)iData.GetData(DataFormats.Rtf);

}
break;
default:
base.WndProc(ref m);
break;
}
}
}
}

fellowcheng 2004-10-18
  • 打赏
  • 举报
回复
学习
cpio 2004-10-18
  • 打赏
  • 举报
回复
这个

你只用分配些内存用来存放复制后的东西

比如你窗体中有个图像,通过复制后,你把这个图片放到指定的变量中(可能是类什么的)

粘贴的时候,再把它整过来就可以了
ZC747 2004-10-18
  • 打赏
  • 举报
回复
加分,感谢各位,虽说问题还没解决:)
ZC747 2004-10-18
  • 打赏
  • 举报
回复
只能针对某个控件调用吗?ye
ZC747 2004-10-18
  • 打赏
  • 举报
回复
呵呵,身体第一啊,我现在都神情恍惚了,系统资源严重不足:~(
ZC747 2004-10-18
  • 打赏
  • 举报
回复
感谢
ZC747 2004-10-17
  • 打赏
  • 举报
回复
太感谢大家了,让我好好研究一下,呵呵,赶工程好几天没睡好了!
ZC747 2004-10-17
  • 打赏
  • 举报
回复
谢谢各位
张海霖 2004-10-17
  • 打赏
  • 举报
回复
IDataObject clipboardData=Clipboard.GetDataObject();
String text;

if(clipboardData.GetDataPresent(DataFormats.Text))
{
text=(String)clipboardData.GetData(DataFormats.Text);
}

winxieddd 2004-10-17
  • 打赏
  • 举报
回复
呵呵~~~~你是说想调用系统的copy,paste,cut吧?
太难了,偶不会,不过,帮你搜到:
http://www.donews.net/zwell/articles/30698.aspx

希望你不头大:)不过,要是用就这三个的话,你可以直接写代码呀。
张海霖 2004-10-17
  • 打赏
  • 举报
回复
String text="some text to copy";
Clipboard.SetDataObject(text);
加载更多回复(2)

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧