1

クリップボードデータを使用する必要があるWindowsアプリケーションに取り組んでいます。以下のコードでクリップボードからテキストをコピーしようとしています。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace MultiValuedClipBoard
{
    class Class1
    {

        public String SwapClipboardHtmlText(String replacementHtmlText)
        {
            String returnHtmlText = "hello";
            if (Clipboard.ContainsText(TextDataFormat.Html))
            {
                returnHtmlText = Clipboard.GetText(TextDataFormat.Html);
                Clipboard.SetText(replacementHtmlText, TextDataFormat.Html);
            }
            return returnHtmlText;
        }
    }
}

上記の関数を呼び出す:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Media;

namespace MultiValuedClipBoard
{
    class Program
    {
        static void Main(string[] args)
        {
            Class1 aas = new Class1();
            string a = aas.SwapClipboardHtmlText("chetan");
            Console.WriteLine(a);
            Console.ReadLine();
        }
    }
}

このコードを実行すると、クリップボードのデータではなく、デフォルト値である「Hello」が出力されます。

4

2 に答える 2

2

次の 2 つの理由により、コードは機能しません。

[1]あなたが言うとき:

if (Clipboard.ContainsText(TextDataFormat.Html))

ここでは基本的に、クリップボードには既にテキストが含まれており、それも HTML 形式であると想定していますが、クリップボードに設定している値によっては、既存のクリップボードの値を使用するつもりのようには見えません。プログラム。したがって、このif条件は存在しないはずです。

[2] 次に、文字列「chetan」を HTML 形式ではないクリップボードに設定しようとしています。そう、

            Clipboard.SetText(replacementHtmlText, TextDataFormat.Html);

になる

            Clipboard.SetText(replacementHtmlText, TextDataFormat.Text);

したがって、事実上、新しいコードは次のようになります。

        String returnHtmlText = "hello";
        //if (Clipboard.ContainsText(TextDataFormat.Html))
        //{
            returnHtmlText = Clipboard.GetText(TextDataFormat.Text);
            Clipboard.SetText(replacementHtmlText, TextDataFormat.Text);
        //}
        return returnHtmlText;
于 2013-03-02T07:48:18.610 に答える
1

明らかClipboard.ContainsText(TextDataFormat.Html)にに評価されfalseます。つまり、クリップボードには実際には指定した形式のテキストが含まれていません。

私はあなたのプログラムを変更して、要点を証明しました。

[STAThread]
static void Main(string[] args)
{
    Clipboard.SetText("boo yah!", TextDataFormat.Html);
    Class1 aas = new Class1();
    string a = aas.SwapClipboardHtmlText("chetan");
    Console.WriteLine(a);
    Console.WriteLine(Clipboard.GetText(TextDataFormat.Html));
    Console.ReadLine();
}

出力:

ブーヤー!
チェタン
于 2013-03-02T09:05:27.750 に答える