C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■90007 / )  Re[16]: リッチテキストボックスでカラー情報をコピーする方法
□投稿者/ イエメン (15回)-(2019/01/29(Tue) 14:44:40)
ありがとうございます。

以下のようにしてみましたが、やはり1回目ではうまくいかず2回ペーストする必要があります。

BeginInvokeは非同期でバックグラウンドプロセスからフォアグラウンドプロセスに指令を投げるものだと思いますが、
GUIから使っても良いのでしょうか?
そして、それで遅延が発生するのでしょうか?

            Dim oldCursor = Cursor.Current
            Cursor.Current = Cursors.WaitCursor

            Dim xlApp As Object = Nothing
            Try
                xlApp = GetObject(, "Excel.Application")
                CallByName(xlApp, "CutCopyMode", CallType.Let, False)
            Catch
            Finally
                If xlApp IsNot Nothing AndAlso Marshal.IsComObject(xlApp) Then Marshal.ReleaseComObject(xlApp)
            End Try
            BeginInvoke(Sub()

                            Clipboard.Clear()
                            RichTextBox1.Copy()


                            ' Excel 書式を維持するため、Word 経由で複写
                            Dim wApp As Object = Nothing
                            Dim wDocs As Object = Nothing
                            Dim wDoc As Object = Nothing
                            Dim wRng As Object = Nothing

                            Try

                                wApp = CreateObject("Word.Application")
                                wDocs = CallByName(wApp, "Documents", CallType.Get)
                                wDoc = CallByName(wDocs, "Add", CallType.Method)
                                wRng = CallByName(wDoc, "Range", CallType.Method)
                                CallByName(wRng, "Paste", CallType.Method)
                                CallByName(wRng, "Copy", CallType.Method)
                            Catch
                            Finally
                                If wRng IsNot Nothing AndAlso Marshal.IsComObject(wRng) Then Marshal.ReleaseComObject(wRng)
                                If wDoc IsNot Nothing AndAlso Marshal.IsComObject(wDoc) Then Marshal.ReleaseComObject(wDoc)
                                If wDocs IsNot Nothing AndAlso Marshal.IsComObject(wDocs) Then Marshal.ReleaseComObject(wDocs)
                                If wApp IsNot Nothing AndAlso Marshal.IsComObject(wApp) Then
                                    CallByName(wApp, "Quit", CallType.Method, False)
                                    Marshal.FinalReleaseComObject(wApp)
                                End If
                            End Try

                            Cursor.Current = oldCursor

                        End Sub)

返信 編集キー/


管理者用

- Child Tree -