PDA

View Full Version : paste شدن متن به محض کپی کردن



meysam_online2012
دوشنبه 04 فروردین 1393, 12:21 عصر
سلام به همگی و سال نو مبارک

من می خوام وقتی یه متن کپی میشه به محض اینکه کپی شد داخل textbox داخل برنامه نشون داده بشه

ممنون از راهنماییتون

mhsmity
دوشنبه 04 فروردین 1393, 13:01 عصر
سلام
این دستور واسه کپی کردن هستش

try
{
string value = dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
Clipboard.SetText(value);
}
catch { }

شما بد از SetText کردن مقدار رو در textbox بریز

هم متن شما کپی شده و هم داخل textbox ریخته شده

meysam_online2012
دوشنبه 04 فروردین 1393, 13:51 عصر
سلام
این دستور واسه کپی کردن هستش

try
{
string value = dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
Clipboard.SetText(value);
}
catch { }

شما بد از SetText کردن مقدار رو در textbox بریز

هم متن شما کپی شده و هم داخل textbox ریخته شده

فکر کنم منظورمو نگرفتی من میخوام تو هر جای ویندوز متنیو کپی کردم توی تکست باکس نشونش بده

mhsmity
دوشنبه 04 فروردین 1393, 13:55 عصر
try
{
string value = dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
Clipboard.SetText(value);

textbox .text=value;


}

catch { }

mhsmity
دوشنبه 04 فروردین 1393, 13:57 عصر
این کد زمانی به درد می خوره که خود شما منوی کپی رو طراحی کرده باشین

حالا نکنه شما منظورتون با زدن کلید های کنترل سی و کنترل ایکس هست.

یا هر جای از برنامه که عمل کپی انجام شد ؟ ؟؟ بدونه داخل کدهای بالا ؟؟ ؟

meysam_online2012
دوشنبه 04 فروردین 1393, 14:04 عصر
کلا هرجایی از ویندوز مثلا شما نام ی فایلو کپی میکنی به محض اینکه کپیو زدی توی تکست باکس داخل برنامه نشون داده بشه

Mahmoud.Afrad
دوشنبه 04 فروردین 1393, 14:06 عصر
کلاسهای زیر رو به پروژه اضافه کنید و ازش استفاده کنید:

// Must inherit Control, not Component, in order to have Handle
[DefaultEvent("ClipboardChanged")]
public partial class ClipboardMonitor : Control
{
IntPtr nextClipboardViewer;

public ClipboardMonitor()
{
this.BackColor = Color.Red;
this.Visible = false;

nextClipboardViewer = (IntPtr)SetClipboardViewer((int)this.Handle);
}

/// <summary>
/// Clipboard contents changed.
/// </summary>
public event EventHandler<ClipboardChangedEventArgs> ClipboardChanged;

protected override void Dispose(bool disposing)
{
ChangeClipboardChain(this.Handle, nextClipboardViewer);
}

[DllImport("User32.dll")]
protected static extern int SetClipboardViewer(int hWndNewViewer);

[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern bool ChangeClipboardChain(IntPtr hWndRemove, IntPtr hWndNewNext);

[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);

protected override void WndProc(ref System.Windows.Forms.Message m)
{
// defined in winuser.h
const int WM_DRAWCLIPBOARD = 0x308;
const int WM_CHANGECBCHAIN = 0x030D;

switch (m.Msg)
{
case WM_DRAWCLIPBOARD:
OnClipboardChanged();
SendMessage(nextClipboardViewer, m.Msg, m.WParam, m.LParam);
break;

case WM_CHANGECBCHAIN:
if (m.WParam == nextClipboardViewer)
nextClipboardViewer = m.LParam;
else
SendMessage(nextClipboardViewer, m.Msg, m.WParam, m.LParam);
break;

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

void OnClipboardChanged()
{
try
{
IDataObject iData = Clipboard.GetDataObject();
if (ClipboardChanged != null)
{
ClipboardChanged(this, new ClipboardChangedEventArgs(iData));
}

}
catch (Exception e)
{
// Swallow or pop-up, not sure
// Trace.Write(e.ToString());
MessageBox.Show(e.ToString());
}
}
}

public class ClipboardChangedEventArgs : EventArgs
{
public readonly IDataObject DataObject;

public ClipboardChangedEventArgs(IDataObject dataObject)
{
DataObject = dataObject;
}
}

meysam_online2012
دوشنبه 04 فروردین 1393, 14:35 عصر
دوست عزیز ممنون چطور باید از این کلاس استفاده کرد ممنون

Mahmoud.Afrad
دوشنبه 04 فروردین 1393, 15:26 عصر
بعد از یک بار کامپایل به تولباکس اضافه میشه که میتونی یک نمونه ازش روی فرم قرار بدی و بعد از رویدادش استفاده کنی.

meysam_online2012
دوشنبه 04 فروردین 1393, 15:32 عصر
بعد از یک بار کامپایل به تولباکس اضافه میشه که میتونی یک نمونه ازش روی فرم قرار بدی و بعد از رویدادش استفاده کنی.

اضافش کردم به فرم حالا کدوم خصوصیتشو باید نسبت بدم به تکست باکس که محتویات کلیپبردو نشون بده؟

meysam_online2012
دوشنبه 04 فروردین 1393, 16:12 عصر
وقتی کپی می کنم کدوم خاصیتش تغییر می کنه؟

Mahmoud.Afrad
دوشنبه 04 فروردین 1393, 17:06 عصر
گفتم از رویدادش باید استفاده کنید. در رویداد ClipboardChanged کافیه داده مورد نظر رو بر حسب نوع داده دریافت کنی
مثلا برای دریافت داده نوع رشته

private void clipboardMonitor1_ClipboardChanged(object sender, ClipboardChangedEventArgs e)
{
textBox1.Text = Convert.ToString(e.DataObject.GetData(typeof(strin g)));
}