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

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

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

全過去ログを検索

<< 0 >>
■36563  PictureBoxのImageプロパティの割当について
□投稿者/ たに -(2009/06/01(Mon) 18:57:40)

    分類:[C#] 

    お世話になります。他所様のサンプルソースなのですが、
    質問させて下さい。

    (引用元:http://www.apfield.jp/csgarden/picturebox.html#picturebox7)
    -------------------------------
    1:FileStream sr = new FileStream("画像の所在を示すフルパス", FileMode.Open,FileAccess.Read);
    2:Bitmap bmp = (Bitmap)System.Drawing.Bitmap.FromStream(sr); //Bitmapクラスオブジェクトへ読込み
    3:sr.Close(); //ストリームを閉じる
    4:pictureBox1.Image=new Bitmap(bmp); //ピクチャーボックスの画像イメージをBitmapオブジェクトから創成
    5:bmp.Dispose(); //Bitmapオブジェクトの廃棄
    --------------------------------
    (行番号を付加しました。)

    質問1.
    --------
    PictureBoxにイメージを表示させるためのソース部分ですが、
    4行目で「pictureBox1.Image=bmp」としないのは何を意図した
    ものなのでしょうか?
    上記ソースはもちろん動作しますが「pictureBox1.Image=bmp」として
    5行目をコメントアウトしても動作しています。

    また、仮に「pictureBox1.Image=bmp」とした場合は
    必ずどこかで(例えばForm_Closing()とか)でDispose()しなければ
    ならないのでしょうか?

    内部的な動きとして違いがわかりません。
    --------

    質問2.
    -------
    1行目のFileStreamは3行目でClose()を行っていますが、
    FileStreamそのものはDispose()していませんが、これは
    これで問題ないのでしょうか?

    基本的にC#ではどこからも参照されなくなったオブジェクトは
    自動的に破棄されると思いますが、それでもnewしたオブジェクトは
    使い終わったらDispose()しておけばとりあえず問題ないと言う
    認識で間違ってませんか?
    (Dispose()に関しては結構色々な場所で議論されてはいますが、
    GCとかの話が絡むとお恥ずかしい話、全く理解が出来ていません(--;)

    どなたか回答頂けると幸いです。
    宜しくお願い致します。
親記事 /過去ログ63より / 関連記事表示
削除チェック/

■51502  Re[1]: USB用のドライバ自動インストール
□投稿者/ 魔界の仮面弁士 -(2010/07/07(Wed) 20:37:38)
    No51496 (クロロ さん) に返信
    > デバイスマネージャでUSB用のドライバをインストールする際に
    > INFファイルを指定して認識させます。
    > これをbatファイル等で動的に行うことは可能でしょうか。

    未確認ですが、
    rundll32 syssetup,SetupInfObjectInstallAction DefaultInstall 128 %1
    でどうでしょう。
記事No.51496 のレス /過去ログ86より / 関連記事表示
削除チェック/

■79540  Re[8]: EXCELの宣言エラーほか
□投稿者/ daive -(2016/04/12(Tue) 20:59:46)
記事No.79505 のレス /過去ログ135より / 関連記事表示
削除チェック/

■85026  Re[5]: 正規表現の考え方がわかりません
□投稿者/ WebSurfer -(2017/09/05(Tue) 17:16:00)
    No85025 (Hongliang さん) に返信

    > 指数形式になりえますし、NaNも正負の無限大も出現しえますよ。
    > 個々の浮動小数点数値はSingle::ToStringしてるだけですね。

    > CurrentCultureを使ってるので、小数点記号が "," の可能性とかも考える?

    RectangleF 構造体に設定された X. Y, Width, Height を ToString するという場合は NaN や
    正負無限大は考えなくてもよさそうだと思いますが、指数は、

    RectangleF rf = new RectangleF(20f, -20.856f, 100.123456789f, .0000023f);

    というようなことをすると(実際にそういう設定が有るかどうかはさておき)、

    {X=20,Y=-20.856,Width=100.1235,Height=2.3E-06}

    になってしまいますね。

    小数点も fr-FR とかですと '.' ではなく ',' になるようですし。

    RectangleF.ToString に限れば、数字の部分の文字列を取得できれば良いわけで、どういう文
    字列になるかは気にする必要はないわけですから、確かに No85016 の Hongliang さんの案が
    現実的だと自分も思います。
記事No.85005 のレス /過去ログ145より / 関連記事表示
削除チェック/

■85028  Re[6]: 正規表現の考え方がわかりません
□投稿者/ 魔界の仮面弁士 -(2017/09/05(Tue) 18:47:55)
    No85026 (WebSurfer さん) に返信
    > ■No85025 (Hongliang さん) に返信
    > 確かに No85016 の Hongliang さんの案が現実的だと自分も思います。

    同じく一票。

    元の RectangleF.ToString で得た値が、小数表記でも指数表記でも非数値(NaN)や無限大でも
    float.Parse/.TryParse で問題なく復元できるので、コードも比較的単純になります。
    (ToString 時のカルチャと TryParse 時のカルチャを合致させる必要はありますが)


    <蛇足>
    Rectangle → String → Rectangle な変換が目的であれば、
    型コンバーター(RectangleConverter クラス)を使えないかと思ったのですが、
    ToString の場合とは書式が異なりますし、RectangleF には使えないので断念…。
    </蛇足>
記事No.85005 のレス /過去ログ145より / 関連記事表示
削除チェック/

■85128  Re[7]: 正規表現の考え方がわかりません
□投稿者/ 夜叉丸 -(2017/09/12(Tue) 11:49:52)
    No85028 (魔界の仮面弁士 さん) に返信
    > ■No85026 (WebSurfer さん) に返信
    >>■No85025 (Hongliang さん) に返信
    >>確かに No85016 の Hongliang さんの案が現実的だと自分も思います。
    >
    > 同じく一票。
    >

    X=(?<X>.+?) と X=(?<x>.+) は結果的に同じなのでしょうか?
    ? があるのとないのとでの違いが判りません。
    結果は同じのように見えますが

    最終的に
    X=???,Y=???,Width=???,Height=???
    にて、??? を取りたかっただけなので
    X=(?<X>.+?) や X=(?<x>.+) で取り込めました
    ??? は int または float の文字列なので
    float.Parse() でとれば 値は取得することが可能だと思います。
記事No.85005 のレス /過去ログ145より / 関連記事表示
削除チェック/

■94190  Re[7]: カラーコード(文字列)から色に変換したい
□投稿者/ 魔界の仮面弁士 -(2020/03/24(Tue) 14:14:40)
    2020/03/24(Tue) 14:17:52 編集(投稿者)

    No94188 (あい さん) に返信
    > 何個かデータがあるうちの一つのセルに、カラーコードのデータを表示しています。
    > ------------------------------------
    > データ1|データ2|データ3|色表示
    > ------------------------------------
    >     |    |    |#d7e4bd
    > ------------------------------------
    >     |    |    |#ffcc66
    > ------------------------------------

    (1) 上記のどこを着色したいのでしょうか?

    たとえば「3 列目だけ」に色をつけたいのであれば、
    CellFormatting イベントで 「e.ColumnIndex の値が 3 だった時」にのみ
    e.CellStyle を調整するようなコードにすれば OK です。
    調整が不要なセルの場合は、何も変更せずに Return してください。


    (2) DataGridView 上に "#d7e4bd" という文字列は見えていた方が良いですか? 見えていない方が良いですか?

    見えている必要がある場合は、該当セルのスタイルで、
    前景色と背景色が同色もしくは近似色にならないようにしておきましょう。

    見えている必要が無いのなら、そもそも [BACKGROUND] フィールドを DataGridView の列に
    バインドする必要はありません。先のサンプルでも示したように、
    イベント内からは DataBoundItem 経由で、DataTable 上の
    [BACKGROUND] フィールドにアクセスできるためです。

     Dim gridRow = DirectCast(sender, DataGridView).Rows(e.RowIndex)
     Dim rowView As DataRowView= TryCast(gridRow.DataBoundItem, DataRowView)
     If rowView IsNot Nothing Then
       Dim oColor As Object = rowView("BACKCOLOR")
       'Dim row As DataRow = rowView.Row
       'Dim table As DataTable = row.Table
     End If


    (3) 色情報の値検査を行う必要がありますか?

    ColorTranslator.FromHtml() の場合、
    たとえば "#ffcc66" の他、"#fc6" 形式の省略表記、
    "LightSalmon"、"SandyBrown" などの Web カラー名や、
    "InfoBackground" や "ThreeDDarkShadow" などのシステム名も扱えます。

    もし、常に「# + 16進数6桁」形式しか認めない方針とするならば、
    正規表現検査を加えた上で、不正な値の場合の着色方針を定める必要があるかもしれません。
記事No.94172 のレス /過去ログ163より / 関連記事表示
削除チェック/

■94189  Re[5]: 別スレッドでDoDragDropが動かない
□投稿者/ KOZ -(2020/03/24(Tue) 14:04:33)
    2020/03/24(Tue) 14:05:12 編集(投稿者)

    No94187 (Tom さん) に返信

    こんなクラスを作って

    using System.Runtime.InteropServices;
    using System.Runtime.InteropServices.ComTypes;
    using System.Windows.Forms;

    [ComVisible(true)]
    class AsyncDataObject : DataObject, IDataObjectAsyncCapability
    {
    bool _InOperation = false;
    bool _AsyncMode = true;

    public void SetAsyncMode([MarshalAs(UnmanagedType.Bool)] bool fDoOpAsync) {
    _AsyncMode = fDoOpAsync;
    }

    [return: MarshalAs(UnmanagedType.Bool)]
    public bool GetAsyncMode() {
    return _AsyncMode;
    }

    public void StartOperation(IBindCtx pbcReserved) {
    _InOperation = true;
    }

    [return: MarshalAs(UnmanagedType.Bool)]
    public bool InOperation() {
    return _InOperation;
    }

    public void EndOperation(int hResult, IBindCtx pbcReserved, [MarshalAs(UnmanagedType.U4)] uint dwEffects) {
    _InOperation = false;
    }
    }

    このように使います。

    using System;
    using System.Windows.Forms;

    static class Program
    {
    [STAThread]
    static void Main() {
    var f = new Form();
    f.MouseDown += F_MouseDown;
    Application.Run(f);
    }

    private static void F_MouseDown(object sender, MouseEventArgs e) {
    var data = new AsyncDataObject();
    var filePaths = new System.Collections.Specialized.StringCollection();
    filePaths.Add(@"E:\work\bigdata.txt");
    data.SetFileDropList(filePaths);
    ((Form)sender).DoDragDrop(data, DragDropEffects.All);
    }
    }

    C++/CLI のサンプル(https://gist.github.com/egtra/7a3ca22888b970a364f1)は
    ファイル実体がない場合に、保存するファイルの内容を MemoryStream に格納して渡す方法です。

    この場合、DoDragDrop メソッドが終了しても転送(コピーもしくは移動)は続くので MemoryStream を破棄してはいけません。
    転送が完了したら EndOperation が呼ばれるので、その時に破棄すると良いでしょう。
記事No.94173 のレス /過去ログ163より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -