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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 >>
■185  Re[2]: フォームの移動について
□投稿者/ ShinShin -(2005/03/07(Mon) 23:48:35)

    分類:[VB.NET] 

    中博俊さん、さっそくのご回答どうもありがとうございます。

    >起動した画面を閉じる=プログラムの終了を基本的に意味します。
    やはりそうなるのですか。
    .Disposeは多用に使えないですね。

    >あなたが作ろうとしているアプリケーションがなぜ複数の画面を行ったりきたり>するのか、もう少し詳しく教えてください。

    様々な条件を設定して、その設定から計算結果を導き出すアプリを作ろうとしております。
    条件1を設定(Form1)→条件2を設定(Form2)→条件3を設定(Form3)→結果を表示(Form4)
    という感じの操作の流れなのですが、結果表示後に前の画面に戻り条件を変更させれるようにしたいのです。
    結果を表示(Form4)→条件3を設定(Form3)→条件2を設定(Form2)→条件3を設定(Form3)→再び結果を表示(Form4)
    という感じです。

    Class Form1
    dim F2 as New Form2
    F2.Show()
    End Class

    Class Form2
    dim F1 as New Form1
    F1.Show()
    End Class

    先に書きました上記のような記述で見かけ上は処理ができているのですが、次々に画面を作ってしまっているので、メモリの無駄が多すぎると思ってしまいます。

    このような場合はどういう処理が適切なのでしょうか?
    どうか教えてください。



記事No.183 のレス /0過去ログ1より / 関連記事表示
削除チェック/

■184  Re[1]: フォームの移動について
□投稿者/ 中博俊 -(2005/03/07(Mon) 22:00:04)
>

    分類:[VB.NET] 

    >じゃんぬねっとさん、VB.NETの質問をさせてください。
    じゃんぬじゃなくてごめんね。

    >Form1→Form2→Form1→Form2→Form3→Form2→Form3→Form4
    >というような複数のフォームをいったりきたりするアプリケーションを作っております。
    >この時のFormの移動方法はどのような記述が適当になるのでしょうか?
    まず行ったり来たりの定義を少し整理する必要があります。

    >Class Form1
    >dim F2 as New Form2
    >F2.Show()
    >Me.Dispose
    >End Class

    起動した画面を閉じる=プログラムの終了を基本的に意味します。

    おもにメニューや、メイン画面中心のアプリケーションを想像すると分かりますよね?

    あなたが作ろうとしているアプリケーションがなぜ複数の画面を行ったりきたりするのか、もう少し詳しく教えてください。

    ------------------------------------------------------
    中博俊 MSMVP Visual Studio C# Since 2004/04-2005/03, MCP
    http://naka.wankuma.com/
    http://naka.wankuma.com/blog/
    naka@wankuma.com

記事No.183 のレス /0過去ログ1より / 関連記事表示
削除チェック/

■183  フォームの移動について
□投稿者/ ShinShin -(2005/03/07(Mon) 17:25:37)

    分類:[VB.NET] 


    分類:[VB.NET] 

    じゃんぬねっとさん、VB.NETの質問をさせてください。

    Form1→Form2→Form1→Form2→Form3→Form2→Form3→Form4
    というような複数のフォームをいったりきたりするアプリケーションを作っております。
    この時のFormの移動方法はどのような記述が適当になるのでしょうか?

    私が書いたForm1→Form2→Form1の移動のコードは

    Class Form1
    dim F2 as New Form2
    F2.Show()
    End Class

    Class Form2
    dim F1 as New Form1
    F1.Show()
    End Class

    これではページの移動ではなく、次々にページを作ってしまうことになると思います。
    ページを次々に作るにしても、メモリは解放していく必要があると思い、次のように記述しました。

    Class Form1
    dim F2 as New Form2
    F2.Show()
    Me.Dispose
    End Class

    このように記述しますと処理が終わってしまいます。

    どのように記述するのが適切なのか、どうか教えて下さい


親記事 /0過去ログ1より / 関連記事表示
削除チェック/

■180  Re[1]: おねがいしま〜す。
□投稿者/ じゃんぬねっと -(2005/03/01(Tue) 21:03:03)
>

    分類:[その他] 

    こんにちは、じゃんぬ です。

    No178に返信(Vacant-Eyesさんの記事)
    > こんばんわ。Vacant-Eyesです。
    > ゲストブックへの書き込みありがとうございます。
    > 相互リンクの件、こちらこそお願いします!
    > 早速リンクさせていただきますね〜。

    レスポンスがすごく早いですね (^-^;)
    こちらも明日までには作業致します。
    同じ INETAJ メンバとして、これから頑張りましょう!
記事No.178 のレス /0過去ログ1より / 関連記事表示
削除チェック/

■178  おねがいしま〜す。
□投稿者/ Vacant-Eyes -(2005/03/01(Tue) 20:29:52)
>

    分類:[その他] 


    分類:[その他] 

    こんばんわ。Vacant-Eyesです。
    ゲストブックへの書き込みありがとうございます。
    相互リンクの件、こちらこそお願いします!
    早速リンクさせていただきますね〜。
親記事 /0過去ログ1より / 関連記事表示
削除チェック/

■177  Re[9]: OpenFileDialogの開ける最大ファイル数、サイズ
□投稿者/ C#に首ったけ -(2005/03/01(Tue) 12:56:50)

    分類:[C#] 

    No176に返信(名無しさんの記事)
    > (続き)
    > GetOpenFileName() や OPENFILENAME を MSDN や (VC7の)CommDlg.h 等で確認していただくと解ると思いますが、
    > LPTSTR lpstrFile 等、ANSI/Unicode の区別が必要になったり、
    > Win2K 前後で DWORD lStructSize の調整(0x4c/0x58)が必要になったりしますので、
    > プラットホームの違いを吸収するヘルパークラスを作ったほうがよいと思います。
    >
    > それと平行して、OpenFileDialog を参考に必要な機能を実装していくとよいのではないでしょうか。

    度重なるご指導ありがとうございました。
    これで、解決出来そうです。

    あとは、MSDNなどとにらめっこしながら、
    必要な機能を実装していくようにします。

記事No.161 のレス / END /過去ログ1より / 関連記事表示
削除チェック/

■176  Re[8]: OpenFileDialogの開ける最大ファイル数、サイズ
□投稿者/ 名無し -(2005/03/01(Tue) 11:16:27)

    分類:[C#] 

    (続き)
    GetOpenFileName() や OPENFILENAME を MSDN や (VC7の)CommDlg.h 等で確認していただくと解ると思いますが、
    LPTSTR lpstrFile 等、ANSI/Unicode の区別が必要になったり、
    Win2K 前後で DWORD lStructSize の調整(0x4c/0x58)が必要になったりしますので、
    プラットホームの違いを吸収するヘルパークラスを作ったほうがよいと思います。

    それと平行して、OpenFileDialog を参考に必要な機能を実装していくとよいのではないでしょうか。

記事No.161 のレス /0過去ログ1より / 関連記事表示
削除チェック/

■175  Re[7]: OpenFileDialogの開ける最大ファイル数、サイズ
□投稿者/ 名無し -(2005/03/01(Tue) 10:42:21)

    分類:[C#] 

    No174に返信(C#に首ったけさんの記事)
    > そこで、さっそく、FileDialogを継承したクラスを作成しようとしたところ、
    > 以下のコンパイルエラーが発生してしまい、いきなりつまずいてしまいました。
    >
    > 「error CS0534: 'WindowsApplication1.test' は継承抽象メンバ 'System.Windows.Forms.FileDialog.RunFileDialog(System.Windows.Forms.NativeMethods.OPENFILENAME_I)' を実装しません。」
    >
    > RunFileDialogを実装しようとしても、OPENFILENAME_Iがアクセス出来ない
    > 保護レベルとなっているようです。

    重ね重ねすみません。
    抽象メンバ RunFileDialog が System.Windows.Forms.NativeMethods を引数としているので、
    ユーザーが FileDialog を継承することは出来ないですね。
    もう一つ上の CommonDialog からだったら継承できることは確認できましたが、
    結構作りこみが必要になりそうです。以下 Win2K 以降のみで有効な概要

    using System;
    using System.Runtime.InteropServices;

    public class MyOpenFileDialog : System.Windows.Forms.CommonDialog
    {
    public override void Reset()
    {
    }

    protected override bool RunDialog(System.IntPtr hwndOwner)
    {
    bool ret = false;
    OPENFILENAME_I ofn = new OPENFILENAME_I();
    int size = 0x2000;
    string fn = new string( '\0', size );
    ofn.lpstrFile = Marshal.StringToBSTR( fn );
    try
    {
    ofn.nMaxFile = size;
    ofn.Flags = 0x00000200 | 0x00080000;

    ret = GetOpenFileName( ofn );
    if ( ret )
    {
    fn = Marshal.PtrToStringBSTR( ofn.lpstrFile );
    string [] fns = fn.Split( new char[] { '\0' } );
    // ToDo: FileNames 等を設定する。
    }
    }
    finally
    {
    // Marshal.StringToBSTR で割り当てられた アンマネージ メモリ を開放する。
    Marshal.FreeBSTR( ofn.lpstrFile );
    }
    return ret;
    }

    [DllImport("comdlg32.dll", CharSet=CharSet.Auto)]
    private static extern bool GetOpenFileName([In, Out] OPENFILENAME_I ofn);

    private delegate IntPtr WndProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);

    [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto, Pack=1)]
    private class OPENFILENAME_I
    {
    public int lStructSize;
    public IntPtr hwndOwner;
    public IntPtr hInstance;
    public string lpstrFilter;
    public IntPtr lpstrCustomFilter;
    public int nMaxCustFilter;
    public int nFilterIndex;
    public IntPtr lpstrFile;
    public int nMaxFile;
    public IntPtr lpstrFileTitle;
    public int nMaxFileTitle;
    public string lpstrInitialDir;
    public string lpstrTitle;
    public int Flags;
    public short nFileOffset;
    public short nFileExtension;
    public string lpstrDefExt;
    public IntPtr lCustData;
    public WndProc lpfnHook;
    public string lpTemplateName;
    public IntPtr pvReserved; // Win2K 以降
    public int dwReserved; // Win2K 以降
    public int FlagsEx; // Win2K 以降
    public OPENFILENAME_I()
    {
    this.lStructSize = 0x58; // Win2K 以降
    }
    }
    }

    (続く)

記事No.161 のレス /0過去ログ1より / 関連記事表示
削除チェック/

■174  Re[6]: OpenFileDialogの開ける最大ファイル数、サイズ
□投稿者/ C#に首ったけ -(2005/02/28(Mon) 22:09:44)

    分類:[C#] 

    No173に返信(名無しさんの記事)
    > ■No170に返信(C#に首ったけさんの記事)
    > > > サイズを変更するためには、OpenFileDialog を継承したクラスで
    > > > RunDialog() をオーバーライドします。
    > > 早速、試してみようと思ったのですが、OpenFileDialogクラスがsealedと
    > > なっており継承することが出来ませんでした。
    >
    > 大変失礼いたしました。OpenFileDialog ではなく の方です。
    > http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemwindowsformsopenfiledialogmemberstopic.asp
    > を見ると解るとおり、
    > CheckFileExists --- OpenFileDialog 互換のため
    > Multiselect --- OpenFileDialog 互換のため
    > ReadOnlyChecked --- OpenFileDialog 互換のため
    > ShowReadOnly --- OpenFileDialog 互換のため
    > OpenFile() --- OpenFileDialog 互換のため
    > Reset() --- OpenFileDialog 互換のため
    > RunDialog() --- 文字数を拡張するため
    > ということになると思います。
    >
    > > 継承出来ないとすると、APIを直接呼び出す?等の対応しかないのでしょうか。
    > > 知識が乏しい為、正直理解しきれておりません。
    > 結論から言うと、API 呼び出し以外の解決策は私には思いつきません。
    > GetOpenFileName() の呼び出しは多少面倒なので、
    > 何らかのオブジェクトに GetOpenFileName() 呼び出しを任せたほうがよいと思います。
    > ドキュメントを読む限り FileOpen.RunDialog() は呼び出しラッパーと考えるのが自然だと思います。
    >
    >

    名無しさん、度々ご指摘ありがとうございます。
    FileDialogを継承する方向でやってみます。

    そこで、さっそく、FileDialogを継承したクラスを作成しようとしたところ、
    以下のコンパイルエラーが発生してしまい、いきなりつまずいてしまいました。

    「error CS0534: 'WindowsApplication1.test' は継承抽象メンバ 'System.Windows.Forms.FileDialog.RunFileDialog(System.Windows.Forms.NativeMethods.OPENFILENAME_I)' を実装しません。」

    RunFileDialogを実装しようとしても、OPENFILENAME_Iがアクセス出来ない
    保護レベルとなっているようです。

    上記エラーの回避方法はあるのでしょうか。



記事No.161 のレス /0過去ログ1より / 関連記事表示
削除チェック/

■173  Re[5]: OpenFileDialogの開ける最大ファイル数、サイズ
□投稿者/ 名無し -(2005/02/28(Mon) 21:18:13)

    分類:[C#] 

    No170に返信(C#に首ったけさんの記事)
    > > サイズを変更するためには、OpenFileDialog を継承したクラスで
    > > RunDialog() をオーバーライドします。
    > 早速、試してみようと思ったのですが、OpenFileDialogクラスがsealedと
    > なっており継承することが出来ませんでした。

    大変失礼いたしました。OpenFileDialog ではなく FileDialog の方です。
    http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemwindowsformsopenfiledialogmemberstopic.asp
    を見ると解るとおり、
    CheckFileExists --- OpenFileDialog 互換のため
    Multiselect --- OpenFileDialog 互換のため
    ReadOnlyChecked --- OpenFileDialog 互換のため
    ShowReadOnly --- OpenFileDialog 互換のため
    OpenFile() --- OpenFileDialog 互換のため
    Reset() --- OpenFileDialog 互換のため
    RunDialog() --- 文字数を拡張するため
    ということになると思います。

    > 継承出来ないとすると、APIを直接呼び出す?等の対応しかないのでしょうか。
    > 知識が乏しい為、正直理解しきれておりません。
    結論から言うと、API 呼び出し以外の解決策は私には思いつきません。
    GetOpenFileName() の呼び出しは多少面倒なので、
    何らかのオブジェクトに GetOpenFileName() 呼び出しを任せたほうがよいと思います。
    ドキュメントを読む限り FileOpen.RunDialog() は呼び出しラッパーと考えるのが自然だと思います。


記事No.161 のレス /0過去ログ1より / 関連記事表示
削除チェック/

■170  Re[4]: OpenFileDialogの開ける最大ファイル数、サイズ
□投稿者/ C#に首ったけ -(2005/02/28(Mon) 20:13:27)

    分類:[C#] 

    No164に返信(名無しさんの記事)
    > 上限 8K バイト。
    >
    > OpenFileDialog には変更オプションはありません。
    >
    > サイズを変更するためには、OpenFileDialog を継承したクラスで
    > RunDialog() をオーバーライドします。
    > RunDialog() は comdlg32.dll の GetOpenFileName() を
    > 呼び出すことになるでしょう。
    > GetOpenFileName() の引数の OPENFILENAME 構造体へのポインタ
    > LPOPENFILENAME のメンバ LPOFNHOOKPROC lpfnHook
    > には、 HookProc をセットしてください。
    >
    > ご検討をお祈りします。

    Mooさん、名無し、えムナウさん、皆さんご指導ありがとうございます。

    原因としては、指定したファイル名の合計文字列が一定の文字数を超えた
    場合に、エラーとなるということは間違いなさそうですね。
    ※いろいろ、試しているのですが、ファイル名の合計がいったい何文字で
     エラーになるかは、見切れてないです。

    > サイズを変更するためには、OpenFileDialog を継承したクラスで
    > RunDialog() をオーバーライドします。
    早速、試してみようと思ったのですが、OpenFileDialogクラスがsealedと
    なっており継承することが出来ませんでした。

    継承出来ないとすると、APIを直接呼び出す?等の対応しかないのでしょうか。
    知識が乏しい為、正直理解しきれておりません。







記事No.161 のレス /0過去ログ1より / 関連記事表示
削除チェック/

■169  Re[5]: OpenFileDialogの開ける最大ファイル数、サイズ
□投稿者/ えムナウ -(2005/02/28(Mon) 19:41:42)
>

    分類:[C#] 

    > OPENFILENAME の 構造体は nMaxFile = 0x2000; のようですね。
    > 8192文字ではないでしょうか?
    この情報は動作確認した情報でも、Microsoftが発表している情報でもないので、削除しておきました。
    一部話のつながりが悪くなってごめんなさい。

    名無しさんも、できれば情報源をリンクしてください。
記事No.161 のレス /0過去ログ1より / 関連記事表示
削除チェック/

■168  Re[5]: OpenFileDialogの開ける最大ファイル数、サイズ
□投稿者/ えムナウ -(2005/02/28(Mon) 19:28:02)
>

    分類:[C#] 

    >上限 8K バイト。
    8192文字分のバッファが取られているという意味でしょう。
    8[kByte]とは違います。

    しかし、これだと199ファイルで一ファイル平均42文字以上だと、
    やっぱりエラーになる可能性がありますね。

記事No.161 のレス /0過去ログ1より / 関連記事表示
削除チェック/

■167  Re[4]: OpenFileDialogの開ける最大ファイル数、サイズ
□投稿者/ 名無し -(2005/02/28(Mon) 19:16:49)

    分類:[C#] 

    No165に返信(えムナウさんの記事)
    > OPENFILENAME の 構造体は nMaxFile = 0x2000; のようですね。
    > 8192文字ではないでしょうか?

    失礼いたしました。「バイト」よりも「文字」の方が正確ですね。
記事No.161 のレス /0過去ログ1より / 関連記事表示
削除チェック/

■166  Re[4]: OpenFileDialogの開ける最大ファイル数、サイズ
□投稿者/ えムナウ -(2005/02/28(Mon) 19:15:53)
>
記事No.161 のレス /0過去ログ1より / 関連記事表示
削除チェック/

■164  Re[3]: OpenFileDialogの開ける最大ファイル数、サイズ
□投稿者/ 名無し -(2005/02/28(Mon) 19:04:09)

    分類:[C#] 

    上限 8K バイト。

    OpenFileDialog には変更オプションはありません。

    サイズを変更するためには、OpenFileDialog を継承したクラスで
    RunDialog() をオーバーライドします。
    RunDialog() は comdlg32.dll の GetOpenFileName() を
    呼び出すことになるでしょう。
    GetOpenFileName() の引数の OPENFILENAME 構造体へのポインタ
    LPOPENFILENAME のメンバ LPOFNHOOKPROC lpfnHook
    には、 HookProc をセットしてください。

    ご検討をお祈りします。
記事No.161 のレス /0過去ログ1より / 関連記事表示
削除チェック/

■163  Re[2]: OpenFileDialogの開ける最大ファイル数、サイズ
□投稿者/ C#に首ったけ -(2005/02/28(Mon) 18:09:09)

    分類:[C#] 

    No162に返信(Mooさんの記事)
    > ■No161に返信(C#に首ったけさんの記事)
    > > C#のOpenFileDialogで大量のファイルを選択し、開くボタンを
    > > 押すと以下の例外が発生します。
    > >
    > > [System.InvalidOperationException: 選択されたファイルが多すぎます。選択するファイルの数を減らしてからやり直してください。
    >
    > 具体的にはいくつ位のファイルを指定していますか?
    > >選択されたファイルが多すぎます。
    > とあるのでとても気になるのですが。

    例外が発生した時は400ファイルの時でした。200ファイルの時には大丈夫でした。
    ※但し、同じ200ファイルでも、ファイルのあるディレクトリに
     より、開ける場合とそうでない場合がありました。
     指定したファイル名のフルパスの合計バイト数により、成否
     が分かれていそうです。
記事No.161 のレス /0過去ログ1より / 関連記事表示
削除チェック/

■162  Re[1]: OpenFileDialogの開ける最大ファイル数、サイズ
□投稿者/ Moo -(2005/02/28(Mon) 17:54:11)
>

    分類:[C#] 

    No161に返信(C#に首ったけさんの記事)
    > C#のOpenFileDialogで大量のファイルを選択し、開くボタンを
    > 押すと以下の例外が発生します。
    >
    > [System.InvalidOperationException: 選択されたファイルが多すぎます。選択するファイルの数を減らしてからやり直してください。

    具体的にはいくつ位のファイルを指定していますか?
    >選択されたファイルが多すぎます。
    とあるのでとても気になるのですが。
記事No.161 のレス /0過去ログ1より / 関連記事表示
削除チェック/

■161  OpenFileDialogの開ける最大ファイル数、サイズ
□投稿者/ C#に首ったけ -(2005/02/28(Mon) 17:12:31)

    分類:[C#] 


    分類:[C#] 

    C#のOpenFileDialogで大量のファイルを選択し、開くボタンを
    押すと以下の例外が発生します。

    at System.Windows.Forms.OpenFileDialog.RunFileDialog(OPENFILENAME_I ofn)
    at System.Windows.Forms.FileDialog.RunDialog(IntPtr hWndOwner)
    at System.Windows.Forms.CommonDialog.ShowDialog()

    このとき、選択したファイル数に問題があるのか、ファイルサイズに
    問題があるのか、いろいろ調べているのですが、見当たらず、ご存知
    の方おりましたら、ご教授願います。

    また、原因となっている値(ファイル数?バイト?)の上限値変更
    等は不可能でしょうか?
親記事 /0過去ログ1より / 関連記事表示
削除チェック/

■172  Re[4]: 動画ファイルのダウンロード
□投稿者/ 名無し -(2005/02/28(Mon) 20:46:32)

    分類:[VB6以前] 

    No160に返信(驚くほど初心者さんの記事)
    > ばれちゃいました、
    >      申し訳ない。
    >
    > ってことで、全てやめます。
    > お疲れ様でした。

    驚くほど (コミュニティも) 初心者さん、さようなら。
記事No.149 のレス / END /過去ログ1より / 関連記事表示
削除チェック/

<前の20件 | 次の20件>

<< 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 >>

ヒット件数が多いので過去ログ1〜1 までの検索結果 / 過去ログ2からさらに検索→

パスワード/

- Child Tree -