メールソフトやテキストエディタなどで編集系ボタン(切り取り
貼り付け、コピー、元に戻すなど)のツールボタンがある時
クリップボードとかにデータがなければ貼り付けが使用
できない(Enabled = false)とかになっていたりしますが
これはどこのイベントで制御しているのでしょうか?
DelphiだとTActionList(だったかな?)のようにメニューの
イベントと連動して出来たのですが、C#ではどうすれば
良いのでしょうか?
現状は無理やりタイマーコントロールでクリップボードとか
テキストボックスの選択文字数を監視してツールボタンの
有効/無効を切り替えています。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
無理くりですが、次のような方法でどうでしょうか。
この方法は、Win32 APIのSetClipboardViewerを利用します。
※フォーム上に、クリップボードの状態を知らせるランプ代わりのラジオボタンと、
クリップボードの内容を消すコマンドボタンがある、という前提です。
//-------------------------------- Code Snippet ---------------------------------
public partial class Form1 : Form
{
private const int WM_DRAWCLIPBOARD = 0x0308; // クリップボードが変更されたときのWindowMessage
private bool initialized; // 初期化済みかどうか
public Form1()
{
InitializeComponent();
SetClipboardViewer(this.Handle);
this.initialized = true;
}
protected override void WndProc(ref Message m)
{
if (initialized && m.Msg == WM_DRAWCLIPBOARD)
{
// クリップボードのデータフォーマット総洗い
if (Clipboard.ContainsData(DataFormats.Bitmap) ||
Clipboard.ContainsData(DataFormats.CommaSeparatedValue) ||
Clipboard.ContainsData(DataFormats.Dib) ||
Clipboard.ContainsData(DataFormats.Dif) ||
Clipboard.ContainsData(DataFormats.EnhancedMetafile) ||
Clipboard.ContainsData(DataFormats.FileDrop) ||
Clipboard.ContainsData(DataFormats.Html) ||
Clipboard.ContainsData(DataFormats.Locale) ||
Clipboard.ContainsData(DataFormats.MetafilePict) ||
Clipboard.ContainsData(DataFormats.OemText) ||
Clipboard.ContainsData(DataFormats.Palette) ||
Clipboard.ContainsData(DataFormats.PenData) ||
Clipboard.ContainsData(DataFormats.Riff) ||
Clipboard.ContainsData(DataFormats.Rtf) ||
Clipboard.ContainsData(DataFormats.Serializable) ||
Clipboard.ContainsData(DataFormats.StringFormat) ||
Clipboard.ContainsData(DataFormats.SymbolicLink) ||
Clipboard.ContainsData(DataFormats.Text) ||
Clipboard.ContainsData(DataFormats.Tiff) ||
Clipboard.ContainsData(DataFormats.UnicodeText) ||
Clipboard.ContainsData(DataFormats.WaveAudio))
{
this.radioButton1.Checked = true;
}
else
{
this.radioButton1.Checked = false;
}
}
base.WndProc(ref m);
}
private void button1_Click(object sender, EventArgs e)
{
Clipboard.Clear();
}
[DllImport("user32.dll")]
static extern IntPtr SetClipboardViewer(IntPtr hWndNewViewer);
//-------------------------------------------------------------------------------
なお、クリップボードのチェインの後始末はしていないので、ご了承ください。
この回答への補足
えっとクリップボード以外の反応(テキストボックスの文字列が
選択されたらツールバーの切り取り、コピー、削除が使えるように
なったりする)があるのですが、そう言うのはどうすれば良いですか?
ちなみにいろいろサイトを調べてみたのですが良い回答が見つからず
IExtenderProviderを使ってメニューとツールバーのステートメントを
連動させることが出来るようになるらしいのですが・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- 画像編集・動画編集・音楽編集 WIN10で「切り取り&スケッチ」が上手く使えません。 1 2022/09/01 22:56
- 工学 モーターでブレーキを掛けると回らなくなります。 状況としては写真のJSP005というモーターをTA7 3 2022/08/07 20:58
- Visual Basic(VBA) 複数ファイルのデータの統合について 12 2022/05/14 12:03
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- Excel(エクセル) [貼り付けオプション]とは? 3 2022/04/17 08:15
- JavaScript jsで診断コンテンツのページ内切り替えについて 1 2023/04/14 17:31
- Excel(エクセル) excelvbaのenableeventsについて 3 2022/08/30 11:20
- Excel(エクセル) Excelに文字データのみを貼り付けたい 8 2023/05/03 15:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA シートのボタン名を変更し...
-
VBA(エクセル)で自動的にボタン...
-
ユーザーフォームに別シートか...
-
フォームの再読み込み
-
Excel VBA Application.caller...
-
CommandButtonのCaptionを変化...
-
コマンドボタンやイメージにマ...
-
セルをマクロのボタンにしたい。
-
ボタン
-
Access VBA でデータペーストを...
-
VBA でエクセルにパスワードを...
-
[Excel VBA]コマンドボタンの入...
-
C♯初心者で、四則演算の電卓を...
-
VB.net でトグルボタンを実現し...
-
VBAのボタンの位置が変わって困...
-
VBAでオプションボタンによって...
-
ASP.Net ラベルの内容をすぐに...
-
コマンドボタンの文字色
-
フォームから別のフォームを呼...
-
閉じると「+」になり開くと「-...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートのボタン名を変更し...
-
VBA(エクセル)で自動的にボタン...
-
フォームの再読み込み
-
ユーザーフォームに別シートか...
-
VBA CommandButtonの文字ずれ
-
セルをマクロのボタンにしたい。
-
コマンドボタンやイメージにマ...
-
Excel VBA Application.caller...
-
VBAのボタンの位置が変わって困...
-
Access VBA でデータペーストを...
-
プロシージャからイベントをコ...
-
他のアプリケーションとの連携
-
閉じると「+」になり開くと「-...
-
C#で動的に作ったtextboxを消す。
-
ボタンをマウスで押し続けたと...
-
VBA でのボタンの移動について
-
ボタン
-
CommandButtonのCaptionを変化...
-
TextBoxでEnterキーを押すと、...
-
VB.net でトグルボタンを実現し...
おすすめ情報