OpenFileDialogは常に* .URL(インターネットショートカットファイル)を示しています

StackOverflow https://stackoverflow.com/questions/1892595

質問

私のOpenFileDialogFilterある1つのDefaultExtを持っています。私は(例えば、フォルダへのショートカットを取得するにはOKですが、ありません* .URLファイル)なぜ、ダイアログが開いたとき、私はまた、記載されているすべてのインターネットショートカットを得るのだろうか。

私は彼らがリストに含まれますネットに順番にオンにすることができますいくつかの魔法のスイッチは、ユーザに表示?

あり それはどちらかの時間の100%に動作しない(

現在、私は、ユーザーがFileOkファイルを選択したことを検出した場合e.Cancelするtrueを設定することにより、*.URLイベントハンドラで条件を処理する必要があり、一部のショートカットを取得することがまだいるようです)FileOkフィルタを介し。最初の場所で一覧になっていないことは、しかし、より良いでしょう。

役に立ちましたか?

解決

あなたは、Windowsのファイルを開く共通ダイアログは、フォルダと一緒にインターネットショートカットを示すことが正しいです。私は、この動作が存在する理由は分からないが、それはthere-だと、それは、Win32(検証するメモ帳を試してみてください)だけでなく、WinFormsのアプリケーションで発生します。

があり、この問題を回避する方法はあるが、警告:それはハックです!あなたがのFileDialogクラスからカスタムファイルダイアログクラスを派生した場合、あなたはのFileDialogの操作のあらゆる側面をカスタマイズするために使用できるいくつかの保護されたイベントへのアクセスを取得します。

ディーノエスポジトは、この技術がどのように動作するかを示して2003年11月MSDNマガジンの記事を書きました。この記事は、MSDNのサイトではもはやありませんが、あなたはここにウェイバックマシンのアーカイブにそれを得ることができます:<のhref = "http://web.archive.org/web/20150117123625/http://msdn.microsoft.com/ EN-US /雑誌/ cc300434.aspx」のrel = "nofollowをnoreferrer"> http://web.archive.org/web/20150117123625/http://msdn.microsoft.com/en-us/magazine/cc300434.aspx のます。

あなたはおそらく行う必要があるだろうと、フックやファイルダイアログのWndProcメソッドをサブクラス化し、手動でファイルリストコントロールに目を通す、ショートカットたエントリを特定し、それらの項目を削除するには、ファイルリストコントロールにWindowsメッセージを送信することです。次に、(例えば、ディレクトリの変更から)そのリストのリフレッシュを監視し、フィルタリング操作を繰り返す必要があると思います。

この巨大なハックだろうが、それは可能です。

これはあまりにも多くの仕事があるかhackinessが多すぎる場合は、私はちょうどFileOkイベントのごCancelEventHandlerからCancel=trueを返すことでショートカットを選択するからユーザーを防ぐためにFileOkイベントを使用してお勧めしたい。

他のヒント

迷惑。ユーザーが1つを選択することはできませんので、あなたはFileOkイベントのハンドラを実装することで、それらを打つことができます:

private void openFileDialog1_FileOk(object sender, CancelEventArgs e) {
  string ext = System.IO.Path.GetExtension(openFileDialog1.FileName);
  if (String.Compare(ext, ".url", true) == 0) e.Cancel = true;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top