문자열의 내용을 C#의 클립보드에 복사하려면 어떻게 해야 합니까?
문자열에 텍스트가 있는 경우 사용자가 다른 창(예: 응용프로그램에서 메모장으로)에 붙여넣을 수 있도록 해당 텍스트를 클립보드에 복사하려면 어떻게 해야 합니까?
사용할 수 있습니다.System.Windows.Forms.Clipboard.SetText(...)
.
System.Windows.Forms.Clipboard.SetText
(Windows 양식) 또는 (WPF)
전화하고 싶습니다SetText
그렇게 쉬웠지만 당신이 처리해야 할 고트카가 꽤 있습니다.호출할 스레드가 STA에서 실행되고 있는지 확인해야 합니다.때때로 액세스 거부 오류와 함께 실패하고 몇 초 후에 문제 없이 작동할 수 있습니다. 클립보드의 COM 타이밍 문제와 관련이 있습니다.또한 원격 데스크톱을 통해 응용 프로그램에 액세스하는 경우 클립보드에 대한 액세스가 스케치됩니다.전화를 거는 대신 중앙 집중식 방법을 사용하여 이 모든 시나리오를 처리합니다.SetText
직접적으로.
@스테시: 다음은 중앙 집중식 코드입니다.
StaHelper 클래스는 클립보드에 필요한 STA(Single Thread Apartment)의 스레드에서 일부 임의 코드를 실행합니다.
abstract class StaHelper
{
readonly ManualResetEvent _complete = new ManualResetEvent( false );
public void Go()
{
var thread = new Thread( new ThreadStart( DoWork ) )
{
IsBackground = true,
}
thread.SetApartmentState( ApartmentState.STA );
thread.Start();
}
// Thread entry method
private void DoWork()
{
try
{
_complete.Reset();
Work();
}
catch( Exception ex )
{
if( DontRetryWorkOnFailed )
throw;
else
{
try
{
Thread.Sleep( 1000 );
Work();
}
catch
{
// ex from first exception
LogAndShowMessage( ex );
}
}
}
finally
{
_complete.Set();
}
}
public bool DontRetryWorkOnFailed{ get; set; }
// Implemented in base class to do actual work.
protected abstract void Work();
}
그리고 클립보드에 텍스트를 설정하는 클래스가 있습니다.작성DataObject
일부 버전의 Windows/.NET에서는 Edge의 경우 수동으로 작업해야 합니다.지금은 정확한 시나리오가 기억나지 않으며 에서 필요하지 않을 수도 있습니다.NET 3.5.
class SetClipboardHelper : StaHelper
{
readonly string _format;
readonly object _data;
public SetClipboardHelper( string format, object data )
{
_format = format;
_data = data;
}
protected override void Work()
{
var obj = new System.Windows.Forms.DataObject(
_format,
_data
);
Clipboard.SetDataObject( obj, true );
}
}
사용량은 다음과 같습니다.
new SetClipboardHelper( DataFormats.Text, "See, I'm on the clipboard" ).Go();
WPF:System.Windows.Clipboard
(프레젠테이션 Core.dll)
윈폼:System.Windows.Forms.Clipboard
둘 다 정전기가 발생합니다.SetText
방법.
이것은 나에게 도움이 됩니다.
원하는 작업:
System.Windows.Forms.Clipboard.SetText("String to be copied to Clipboard");
그러나 아파트 상태의 단일 스레드에 있어야 한다는 오류가 발생합니다.STA.
그러니 그런 실타래로 작동시키자구요.코드:
public void somethingToRunInThread()
{
System.Windows.Forms.Clipboard.SetText("String to be copied to Clipboard");
}
protected void copy_to_clipboard()
{
Thread clipboardThread = new Thread(somethingToRunInThread);
clipboardThread.SetApartmentState(ApartmentState.STA);
clipboardThread.IsBackground = false;
clipboardThread.Start();
}
전화 후copy_to_clipboard()
문자열이 클립보드에 복사되므로 붙여넣기 또는 +를 사용하고 문자열을 다시 클립보드에 복사할 문자열로 가져올 수 있습니다.
이 질문에 나타난 솔루션을 사용하여,System.Windows.Forms.Clipboard.SetText(...)
결과는 다음과 같습니다.
OLE 호출을 수행하려면 먼저 현재 스레드를 싱글 스레드 아파트(STA) 모드로 설정해야 합니다.
이를 방지하기 위해 속성을 추가할 수 있습니다.
[STAThread]
로.
static void Main(string[] args)
Windows Forms에서 문자열이 텍스트 상자에 있는 경우 다음을 쉽게 사용할 수 있습니다.
textBoxcsharp.SelectAll();
textBoxcsharp.Copy();
textBoxcsharp.DeselectAll();
사용하다try
-catch
오류가 있더라도 복사합니다.
Try
Clipboard.SetText("copy me to clipboard")
Catch ex As Exception
End Try
메시지 상자를 사용하여 예외를 캡처하면 오류가 표시되지만 값은 여전히 클립보드에 복사됩니다.
언급URL : https://stackoverflow.com/questions/899350/how-do-i-copy-the-contents-of-a-string-to-the-clipboard-in-c
'sourcecode' 카테고리의 다른 글
TypeScript의 클래스에 메모지 사용 (0) | 2023.06.12 |
---|---|
Oracle Database Link - MySQL 등가물? (0) | 2023.06.12 |
MySQL에서 목록을 열고 전치하는 방법 (0) | 2023.06.12 |
Firebase 계정에서 Firebase 참조 URL을 어디서 찾을 수 있습니까? (0) | 2023.06.12 |
참조:Chrome Developer Tools의 hover state (0) | 2023.06.12 |