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

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

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

全過去ログを検索

<< 0 >>
■9908  Re[14]: オブジェクト指向熱イベントパネルディスカッション検討スレッド
□投稿者/ 片桐 -(2007/11/07(Wed) 01:29:59)
>
    がるさんの

    「古くからCやCOBOLをされている方(include 組み込み系の方)の一部が異様に嫌がる/その理由」

    けっこう琴線に触れます(笑)
    ばりばりのCOBOLERでANSI-C派C++ぎりぎり擁護であり、どちらかといえばアンチC#(あえて書きますけど)な私としては(笑)
記事No.9496 のレス /過去ログ23より / 関連記事表示
削除チェック/

■20396  Re[9]: MDBの更新を即反映させたい
□投稿者/ 魔界の仮面弁士 -(2008/06/10(Tue) 13:24:52)
    No20385 (はつね さん) に返信
    > 試していませんが、Max Buffer Sizeをゼロにしちゃうとかで改善しませんか?

    といっても、初期値がもともと 0 だったりします。
    (正確には Max Buffer Size ではなく、Jet OLEDB:Max Buffer Size です)

    これはレジストリでいえば、
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Jet 4.0\MaxBufferSize
    に相当する設定項目です。

    そもそも MaxBufferSize に 0 KBという指定はできません。0 は自動割当として扱われ、
    この場合のキャッシュサイズは『メインメモリ÷ 4 + 2560(KB)』で算出される仕様です。
    (なお、JET 3.5x では上限値が 13,824KB だそうです。4.0 の上限値は把握していませんが。)


    で。Jet がライトキャッシュを更新するのは、
     (1) 最初の更新処理が行われた後、一定時間が経過したとき。(既定値:500ミリ秒)
     (2) 更新用バッファサイズを超過したとき。
    のいずれかの条件を満たしたときです。
    そして今回の MaxBufferSize とは、上記(2) に関する設定項目にあたります。

    また、(1) に影響を与えるのは、レジストリ(括弧内は OLE DB)でいうところの
     FlushTransactionTimeout (Jet OLEDB:Flush Transaction Timeout)
     ExclusiveAsyncDelay (Jet OLEDB:Exclusive Async Delay)
     SharedAsyncDelay (Jet OLEDB:Shared Async Delay)
    のエントリです。(FlushTransactionTimeout が最優先されます)


    この辺りの設定は、ADO.NET の接続パラメータに指定できないため、
    レジストリ側で設定する事になるでしょう。(No20393 参照)
    http://support.microsoft.com/kb/318161/en-us


    > あとは
    > Enable Fat Cursors
    > Fat Cursor Cache Size
    > あたり。
    これらは、ADO.NET では使用できないため、ADO を使うことになりますね。
記事No.20351 のレス /過去ログ39より / 関連記事表示
削除チェック/

■54730  Re[8]: RS232Cでデータ送信(VB2005)
□投稿者/ せき -(2010/10/31(Sun) 04:23:19)
    魔界の仮面弁士さん、shu さん、コードをご提示いただきありがとうございます。

    ただ、実際にこのコードでプログラム作成しようとしたところ、sDATA3.Countが
    エラーとなってしまいました。ためしに、sDATA3.Lengthに置き換えて、編集後、
    Me.SerialPort1.Write(bytBuf, 0, bytBuf.Length)
    で送信したところ、以下のようになってしまいました。

    HEXモード:02 B1 B2 B3 B4 B5

    sDATA3.Countがエラーにならずに、正しく送信するにはどうしたらいいでしょうか?
記事No.54686 のレス /過去ログ92より / 関連記事表示
削除チェック/

■66599  C#でExcelシート上のチェックボックスの変更
□投稿者/ のぶ -(2013/05/10(Fri) 14:44:41)

    分類:[C#] 

    Excelのシート上にグループ化されたチェックボックスがあり
    その中のチェックボックスに対してチェックの状態を変更したく以下のようにしてみました。

    public void CheckedInGroupCheckBox(string sheetName, string groupName, string checkboxName)
    {
    Excel.Worksheet sheet = sheets[sheetName];
    Excel.Shapes shapes = sheet.Shapes;
    Excel.Shape group = null;
    Excel.Shape chk = null;

    Excel.GroupShapes g = null;
    for (int i = 1; i < shapes.Count; i++)
    {
    group = shapes.Item(i);
    if (group.Name == groupName)
    break;
    }
    g = group.GroupItems;

    chk = g.Item(checkboxName); // ★

    ReleaseObj(ref sheet);
    ReleaseObj(ref shapes);
    ReleaseObj(ref group);
    ReleaseObj(ref chk);
    }

    ★の位置で目的のチェックボックスは取得できますが、
    それに対してどの様にチェックを付ければいいのかが分かりません。

    検索してみると、(VBAだと?)Valueに対してtrue/falseを設定すれば出来そうですが、
    コンパイルエラーになってしまいます。
    また、Worksheet.CheckBoxesメソッドではグループ化されたものは取得できませんでした。

    ※まだ貼り付けたメソッド自体試行錯誤中なので「そもそもどうやってtrue/false設定すんだよ!」という部分はスルーしてください。
親記事 /過去ログ112より / 関連記事表示
削除チェック/

■66602  Re[1]: C#でExcelシート上のチェックボックスの変更
□投稿者/ ラリホー -(2013/05/10(Fri) 16:38:41)
    コンパイルエラーになる、とありますが、どんなコードを書いて、どんなエラーになったのでしょうか。
    もしかしたら単純なミスなのかも知れませんので、ご提示ください。
記事No.66599 のレス /過去ログ112より / 関連記事表示
削除チェック/

■66604  Re[2]: C#でExcelシート上のチェックボックスの変更
□投稿者/ のぶ -(2013/05/10(Fri) 17:15:14)
    No66602 (ラリホー さん) に返信
    ご回答ありがとうございます。

    > もしかしたら単純なミスなのかも知れませんので、ご提示ください。
    失礼いたしました。補足致します。

    ★の次の行に
    chk.Value = true;
    と書きました。
    そして、出てくるエラー内容は以下になります。
    === エラー内容 ===
    'Microsoft.Office.Interop.Excel.Shape' に 'Value' の定義が含まれておらず、
    型 'Microsoft.Office.Interop.Excel.Shape' の最初の引数を受け付ける拡張メソッドが見つかりませんでした。
    using ディレクティブまたはアセンブリ参照が不足しています。
    ==================

    このような状態になります。
    chk自体Shapeとして取得しているので、CheckBoxとして認識できていないせいだろう・・・
    とは思っていますが、何をどうしたらいいのかさっぱりです。

    あと、何気なくExcel.○○と書いてしまってありますが
    using Excel = Microsoft.Office.Interop.Excel;
    としてあります。

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

■66624  Re[1]: C#でExcelシート上のチェックボックスの変更
□投稿者/ 魔界の仮面弁士 -(2013/05/12(Sun) 12:58:14)
    No66599 (のぶ さん) に返信
    > Excelのシート上にグループ化されたチェックボックスがあり
    フォームコントロールのチェックボックスでしょうか。
    それともActiveXのチェックボックスでしょうか。

    前者であれば、Shape の DrawingObject プロパティから、Excel.CheckBox 型のオブジェクトを得られます。
    あるいは、ワークシートの CheckBoxes メソッド経由で得ることもできます。

    後者の場合は、DrawingObject から得たオブジェクトに対し、さらにその object プロパティを呼ぶことで、
    MSForms.CheckBox 型を得ることができるでしょう。


    > また、Worksheet.CheckBoxesメソッドではグループ化されたものは取得できませんでした。
    CheckBoxes メソッドという事は、フォームコントロール版(Excel.CheckBox) の方ですね。

    グループ化されている場合(Shape の Type プロパティが msoGroup の場合)は、
    御存じのように GroupItems 経由で、個々の Shape 要素にアクセスできます。
    それを、Type が msoFormControl になるまで再帰的に繰り返してみてください。

    該当する Shape にまで行き当たったら、あとは上記のように、Shape の DrawingObject プロパティから
    操作対象のチェックボックス型を得ることができるはずです。


    > 検索してみると、(VBAだと?)Valueに対してtrue/falseを設定すれば出来そうですが、
    > コンパイルエラーになってしまいます。
    Excel.CheckBox の場合も MSForms.CheckBox の場合も、Value プロパティでチェック状態が変わります。
記事No.66599 のレス /過去ログ112より / 関連記事表示
削除チェック/

■66638  Re[2]: C#でExcelシート上のチェックボックスの変更
□投稿者/ のぶ -(2013/05/13(Mon) 09:42:34)
    No66624 (魔界の仮面弁士 さん) に返信
    ご回答ありがとうございます。
    また、お返事遅くなり申し訳ありません。

    >>Excelのシート上にグループ化されたチェックボックスがあり
    > フォームコントロールのチェックボックスでしょうか。
    > それともActiveXのチェックボックスでしょうか。
    お察し頂けた様にフォームコントロールのものを使用しています。


    > 該当する Shape にまで行き当たったら、あとは上記のように、Shape の DrawingObject プロパティから
    > 操作対象のチェックボックス型を得ることができるはずです。
    chkを取得後、chkからDrawingObjectプロパティからさらにオブジェクトを取得することによって
    チェック状態の変更に成功いたしました。

    書き換えたコードも掲載させていただきます。
    一応目的は果たせたので解決済みとしますが、何か突っ込みどころがあるようでしたらお願いいたします。

    public void CheckedInGroupCheckBox(string sheetName, string groupName, string checkboxName)
    {
    Excel.Worksheet sheet = sheets[sheetName];
    Excel.Shapes shapes = sheet.Shapes;
    Excel.Shape group = null;
    Excel.Shape chk = null;

    Excel.GroupShapes g = null;
    for (int i = 1; i <= shapes.Count; i++) //Count未満でなぜ取得できていたのか・・・
    {
    group = shapes.Item(i);
    if (group.Name == groupName)
    break;
    }

    g = group.GroupItems;

    chk = g.Item(checkboxName);
    var ch = chk.DrawingObject; //DrawingObjectから取得
    ch.Value = true; //取得したオブジェクトに対してValueプロパティでチェック状態を変更する

    ReleaseObj(ref sheet);
    ReleaseObj(ref shapes);
    ReleaseObj(ref group);
    ReleaseObj(ref g);
    ReleaseObj(ref chk);
    }
記事No.66599 のレス / END /過去ログ112より / 関連記事表示
削除チェック/

■66639  Re[3]: C#でExcelシート上のチェックボックスの変更
□投稿者/ 魔界の仮面弁士 -(2013/05/13(Mon) 11:18:45)
    No66638 (のぶ さん) に返信
    > ReleaseObj(ref sheet);
    これって、おそらくは COM 解放の Marshal.ReleaseComObject ですよね。
    宣言は void ReleaseObj<T>(ref T) でしょうか。

    たとえば Shape は、Parent プロパティで Worksheet を返してきます。
    今の解放順を逆にして、子階層から処分した方が良いと思ます;念のため。

    > 何か突っ込みどころがあるようでしたらお願いいたします。
    ループ中のそれぞれの Shape/GroupShapes や
    DrawingObject も、 COM オブジェクトじゃないですかね。
記事No.66599 のレス /過去ログ112より / 関連記事表示
削除チェック/

■66643  Re[4]: C#でExcelシート上のチェックボックスの変更
□投稿者/ のぶ -(2013/05/13(Mon) 13:10:37)
    No66639 (魔界の仮面弁士 さん) に返信
    > ■No66638 (のぶ さん) に返信
    >>ReleaseObj(ref sheet);
    > これって、おそらくは COM 解放の Marshal.ReleaseComObject ですよね。
    > 宣言は void ReleaseObj<T>(ref T) でしょうか。
    お察しの通りCOM解放用のメソッドです。
    ただ、ジェネリックスは使用せずオーバーロードで・・・という恥ずかしい書き方をしていました。。。
    ジェネリックスについて完全に忘れていたので、以下の様に書き換えました。

    private void ReleaseObj<T>(ref T shape)
    {
    if (shape == null) return;
    while (Marshal.ReleaseComObject(shape) != 0) ;
    shape = default(T);
    }

    > たとえば Shape は、Parent プロパティで Worksheet を返してきます。
    > 今の解放順を逆にして、子階層から処分した方が良いと思ます;念のため。
    そうですね。他の時でしたら「使った逆順で解放する」と心がけていましたが、
    Excelの操作で頭がいっぱいでそこまで気が回っていませんでした。
    ご指摘ありがとうございます。


    > ループ中のそれぞれの Shape/GroupShapes や
    > DrawingObject も、 COM オブジェクトじゃないですかね。
    ループ中の場合も解放した方がいいのでしょうか?
    一応一番最後に
    ReleaseObj(ref g);
    という形でGroupShapesに関しては開放しています。

    for (int i = 1; i <= shapes.Count; i++)
    {
    group = shapes.Item(i);
    if (group.Name == groupName)
    break;
    ReleaseObj(ref group); // ←こうすべき??
    }
記事No.66599 のレス /過去ログ112より / 関連記事表示
削除チェック/

■66644  Re[5]: C#でExcelシート上のチェックボックスの変更
□投稿者/ 魔界の仮面弁士 -(2013/05/13(Mon) 14:08:38)
    No66643 (のぶ さん) に返信
    > if (shape == null) return;
    念のため、IsComObject も使った方が良いかも。

    > while (Marshal.ReleaseComObject(shape) != 0) ;
    FinalReleaseComObject というものもありますよ。

    自分の場合は、常に 0 まで解放されると都合が悪い場合もあったので、
    全解放/一回だけReleaseComObject の 2 パターンの実装を
    用意するようにしています。参考までに。

    > ループ中の場合も解放した方がいいのでしょうか?
    逆に質問です。

    たとえば i == 3 のときに groupName が見つかった場合、
    1番目2番目のオブジェクトは、元のコードではどのタイミングで
    解放されるでしょうか?

    ちなみに、for ではなく foreach だと、解放はさらに面倒なことになります。
    http://bbs.wankuma.com/index.cgi?mode=al2&namber=54129&KLOG=91


    AppDomain のアンロード時や、GC 回収以外のタイミングでの解放に任せるのであれば、
    あえて ReleaseComObject しないという選択肢もあるのですけれどね。
    http://social.msdn.microsoft.com/forums/ja-jp/csharpgeneralja/thread/0F210F52-3667-4E66-9DD6-4480EEDE48DE
記事No.66599 のレス /過去ログ112より / 関連記事表示
削除チェック/

■66651  Re[6]: C#でExcelシート上のチェックボックスの変更
□投稿者/ のぶ -(2013/05/13(Mon) 15:03:57)
    2013/05/14(Tue) 09:29:26 編集(投稿者)
    2013/05/13(Mon) 15:54:58 編集(投稿者)

    本題とずれすぎてしまったので、こちは解決済みとして締めたいと思います。

    No66644 (魔界の仮面弁士 さん) に返信
    何度もお付き合い頂きありがとうございます。

    >> if (shape == null) return;
    > 念のため、IsComObject も使った方が良いかも。
    >
    >> while (Marshal.ReleaseComObject(shape) != 0) ;
    > FinalReleaseComObject というものもありますよ。
    >
    > 自分の場合は、常に 0 まで解放されると都合が悪い場合もあったので、
    > 全解放/一回だけReleaseComObject の 2 パターンの実装を
    > 用意するようにしています。参考までに。
    今回は0まで解放してしまって大丈夫なので、IsComObjectによる判定と
    FinalReleaseComObjectによる全開放という形に変更しました。
    ご指摘ありがとうございます。
    private void ReleaseObj<T>(ref T shape)
    {
    //if (Marshal.IsComObject(shape) && shape == null) return;
    if (shape == null || !Marshal.IsComObject(shape)) return; //条件がおかしかったので修正
    //while (Marshal.ReleaseComObject(shape) != 0) ;
    Marshal.FinalReleaseComObject(shape);
    shape = default(T);
    }


    >>ループ中の場合も解放した方がいいのでしょうか?
    > 逆に質問です。
    >
    > たとえば i == 3 のときに groupName が見つかった場合、
    > 1番目2番目のオブジェクトは、元のコードではどのタイミングで
    > 解放されるでしょうか?
    確かにその通りですね。。
    都度解放していかなければ残りますね。
    #言われれば分かるけど、自分で思いつかない。。。んー・・・


    > ちなみに、for ではなく foreach だと、解放はさらに面倒なことになります。
    > http://bbs.wankuma.com/index.cgi?mode=al2&namber=54129&KLOG=91
    これは恐らく大変だろうなと感じて回避してました。
    と言ってもfor内で解放していなかったので結果としては同じ事してましたが・・・

    > AppDomain のアンロード時や、GC 回収以外のタイミングでの解放に任せるのであれば、
    > あえて ReleaseComObject しないという選択肢もあるのですけれどね。
    > http://social.msdn.microsoft.com/forums/ja-jp/csharpgeneralja/thread/0F210F52-3667-4E66-9DD6-4480EEDE48DE
    現状としては、Excel操作用のラップクラスを作成し、その中で色々な操作を完結できるようにし、
    Disposableパターンを適用してExcel.Applicationや、Excel.Workbooks等の解放をDisposeメソッド内で行っています。
    URLを拝見すると、任意のタイミングでGC.Collect()を呼び出せばReleaseComObjectがなくても大丈夫というように読み取りましたが、
    私の場合ですと、Disposeメソッド内で呼び出せば解放されるということでしょうか?
記事No.66599 のレス / END /過去ログ112より / 関連記事表示
削除チェック/

■66758  C#でExcel上のチェックボックスが変更できなくなった
□投稿者/ のぶ -(2013/05/22(Wed) 17:53:18)

    分類:[C#] 

    2013/05/22(Wed) 17:54:08 編集(投稿者)

    いつもお世話になっています。

    以前 No66599 においてC#からExcel上のチェックボックスの状態を変更すると質問し、
    一応の解決とはなりましたが、Excelのバージョンを2010から2003に変更したところ
    チェックボックス(フォームコントロール)に値が設定出来なくなりました。
    検索してみたところ、シート(?)の保護等をしていると同じエラーが発生するという事は書かれていましたが、
    保護に関しては一切しておりません。

    以下にコードと、エラー内容を載せますので、ご助力頂きたいと思います。
    ※★位置のValueに設定できません。

    VisualStudio2010
    Excel2003
    参照設定に追加:Microsft Excel 11.0 Object Library

    === コード ===
    public void CheckedInGroupCheckBox(string sheetName, string groupName, string checkboxName)
    {
    Excel.Worksheet thisSheet = sheets[sheetName];
    Excel.Shapes shapes = thisSheet.Shapes;
    Excel.Shape group = null;

    for (int i = 1; i <= shapes.Count; i++)
    {
    group = shapes.Item(i);
    if (group.Type == MsoShapeType.msoGroup && group.Name == groupName)
    {
    break;
    }
    }
    // テスト
    try
    {
    if (group == null)
    throw new ArgumentException("指定されたグループが存在しません。", "groupName");

    Excel.GroupShapes g = group.GroupItems;

    Excel.Shape chk = null;
    for (int i = 1; i <= g.Count; i++)
    {
    chk = g.Item(i);
    if (chk.Name == checkboxName) break;
    ReleaseObj(ref chk);
    }
    //Excel.Shape chk = g.Item(checkboxName);
    dynamic ch = chk.DrawingObject;
    ch.Value = true; // <-★

    ReleaseObj(ref ch);
    ReleaseObj(ref chk);
    ReleaseObj(ref g);
    }
    finally
    {
    ReleaseObj(ref thisSheet);
    ReleaseObj(ref shapes);
    ReleaseObj(ref group);
    }
    }

    === エラー ===
    COMExceptionはハンドルされませんでした。
    CheckBox クラスの Value プロパティを設定できません。
親記事 /過去ログ113より / 関連記事表示
削除チェック/

■69237  Re[1]: Type.GetProperties時の構造体判別
□投稿者/ Hongliang -(2013/12/10(Tue) 17:59:55)
    > 値をPropertyInfo.GetValueで取得する際、
    > 例えばLocationプロパティはPoint構造体かと思いますが、
    > ToString時と同じような出力のされ方となります。({X=225,Y=225})
    > ※この動作に関しても参考にできる文書等あれば教えて頂きたいです

    どこにどうやって出力なさっているか知りませんが、多分実際にToString()が呼び出されているんでしょう。

    > 構造体であることを検知できれば、それに合わせて処理をゴニョゴニョするのですが・・・
    > IsClassはもちろんfalse、IsValueTypeでは他の値型との判別がつかず、、、
    > 構造体であるか判別する術はあるのでしょうか?

    IsValueTypeかつIsPrimitiveではなくIsEnumでもない、といった辺りで判別はできるでしょうけども

    >
    > 別のアプローチでの解決法をご提示頂けても全然OKなのですが、
    > 上記内容も気になるので、判別法があればご教授をお願い致します。
記事No.69236 のレス /過去ログ118より / 関連記事表示
削除チェック/

■80219  Re[8]: IPCを使用してサーバーからの戻り値を取りたい
□投稿者/ Zip -(2016/06/23(Thu) 14:31:53)
    No80218 (やんまー さん) に返信
    > もしかすると私の言う
    >
    > 「サーバーからの応答」
    > を
    > 「WEBサーバーからの応答」と誤解なさっているのでしょうか・・・?
    >
    > そうではなく、単に同一コンピューターの
    > サーバープログラムのことを指しています。
    >
    > クライアント(10) → サーバー(受け取った値を10倍にして返す) → クライアント(受け取った値を表示 「100」)
    >
    > このようなことが出来るのか、という質問でした。
    >
記事No.80210 のレス /過去ログ136より / 関連記事表示
削除チェック/

■91202  Re[1]: VB.NETからC++のdll関数への参照渡しについて
□投稿者/ 魔界の仮面弁士 -(2019/06/06(Thu) 08:40:04)
    No91199 (まる さん) に返信
    > 元のvb6ではc++で作られたdllを参照しており、

    Declare して使うタイプの DLL ではなく、
    参照設定して使う ActiveX DLL ということでしょうか。


    Declare や DllImport して使うタイプだとしたら、
     Function AAA( <MarshalAs(UnmanagedType.LPArray, SizeParamIndex:=1)> ByVal sAdd As Short(), ByVal sSize As Short) As Integer
    でどうでしょう。

    ActiveX DLL の場合はタイプライブラリ次第かな…。
記事No.91199 のレス /過去ログ157より / 関連記事表示
削除チェック/

■92091  Re[1]: 条件を使った COUT の使用方法
□投稿者/ shu -(2019/08/24(Sat) 07:33:22)
    No92081 (韋駄天 さん) に返信

    CODEでグループ化しSTでPIVOTすればなんとかなるきがします。
記事No.92081 のレス /過去ログ159より / 関連記事表示
削除チェック/

■92090  Re[1]: レジストリ利用の注意点 vb.net
□投稿者/ shu -(2019/08/24(Sat) 07:30:32)
    No92089 (EVE さん) に返信

    OS動作に大きく関わっているので不必要に多くの情報を読み書きしない方が良いかと思います。
記事No.92089 のレス /過去ログ159より / 関連記事表示
削除チェック/

■95987  Re[6]: フォーム間のデータ渡しをスムーズに
□投稿者/ コーヒー好き -(2020/10/14(Wed) 18:09:59)
    >皆様

    再度、返答有難う御座います。

    2次元配列やめて、Datatable等で数値の受け渡しの方、試みてみようと思います。

    2次元配列よりDatatableの方が処理速度が速いのが一般的なのでしょうか?
記事No.95975 のレス /過去ログ166より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -