7

非モーダルな.netOpenFileDialogを作成/作成することは可能ですか?メインダイアログにUI要素があり、ユーザーが押すために常に使用可能である必要があります。

4

4 に答える 4

7

いいえ、OpenFileDialogSaveFileDialogはどちらも本質的にモーダルであるFileDialogから派生しているため、(私が知る限り)どちらの非モーダルバージョンも作成する方法はありません。

于 2009-01-25T23:15:25.373 に答える
6

スレッドを作成し、スレッドに OpenFileDialog をホストさせることができます。サンプルコードには同期が欠けていますが、動作します。

public partial class Form1 : Form
{
    OFDThread ofdThread;

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        ofdThread = new OFDThread();
        ofdThread.Show();
    }
}

public class OFDThread
{
    private Thread t;
    private DialogResult result;

    public OFDThread()
    {
        t = new Thread(new ParameterizedThreadStart(ShowOFD));
        t.SetApartmentState(ApartmentState.STA);
    }

    public DialogResult DialogResult { get { return this.result; } }

    public void Show()
    {
        t.Start(this);
    }

    private void ShowOFD(object o)
    {
        OpenFileDialog ofd = new OpenFileDialog();
        result = ofd.ShowDialog();
    }
}

このコードを使用すると、UI スレッドでイベントを発生させる何かを追加して (呼び出しには注意してください!)、イベントがいつ完了したかを知ることができます。ダイアログの結果にアクセスするには、

DialogResult a = ofdThread.DialogResult

UIスレッドから。

于 2009-07-23T21:33:39.513 に答える
1

私は少し遅れていることを知っていますが、ボーダーレス、透明、または表示境界外の新しいフォームを作成し、そのウィンドウを変更するファイル ダイアログを表示することができます。

于 2011-03-22T13:45:21.540 に答える