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 >>
■82421  Re[3]: MessageBox表示処理に例外が発生する
□投稿者/ WebSurfer -(2017/01/10(Tue) 12:25:24)
    No82420 (ごう さん) に返信

    タスクスケジューラーには全く詳しくないのでググって調べただけですが:

    [C#]アプリケーションが UserInteractive モードで実行されていないときに、
    モーダル ダイアログまたはフォームを表示することは有効な操作ではありません。
    https://karlsnautr.blogspot.jp/2013/01/c-userinteractive.html
記事No.82412 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82423  Re[3]: MessageBox表示処理に例外が発生する
□投稿者/ WebSurfer -(2017/01/10(Tue) 13:09:28)
    No82420 (ごう さん) に返信

    【追伸】

    もう少しググって調べて見ましたが、Task Schdeler については、要するに「プロセスが
    ユーザー対話モードで実行されているかどうか」(Environment.UserInteractive が true
    か false か)ということが問題のようですね。

    Environment.UserInteractive が true か false かと、サービスアカウントで実行されて
    いるか否かは別の話のようです(詳しく調べ切れていませんが)。
記事No.82412 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82425  Re[4]: MessageBox表示処理に例外が発生する
□投稿者/ Jitta -(2017/01/10(Tue) 13:51:50)
    この辺
    http://www.atmarkit.co.jp/ait/spv/1307/08/news101.html

    あと、Bingで「タスクスケジューラ フォーム」を検索すると
    「Windows 読者限定 タスクスケジューラで組んだスケジュール…」
    っていう日経ITproのページがあって、そこに書いてある。
    ただし、登録が必要。

    ルートウィンドウ と言うのは、私がウィンドウ システムの最初が SunView だったからで、
    Windows でなんて言うか知らない。
    「デスクトップとの対話」「Interactive」あたりがキーワード。
記事No.82412 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82429  フォーム外のクリックでフォームを閉じたい
□投稿者/ 夜叉丸 -(2017/01/10(Tue) 15:38:18)

    分類:[.NET 全般] 

    「フォーム2の外を左クリックされたらフォーム2をクローズしたい。」のですが、
    http://himag.blog26.fc2.com/blog-entry-43.html
    上記URLを参考に以下のように作成して実行するとフリーズしました。
    なにが間違っているのでしょうか?
    (目的が達成できれば以下のコードでなくてもいいのですが)


    ≡Form1≡
     private void button1_Click(object sender, EventArgs e)
     {
      Form2 frm = new Form2();
      frm.Show();
     }


    ≡Form2≡
      public class CaptureRegion
      {
       internal class NativeMethods
       {
        [DllImport("user32.dll")]
        extern public static void
         mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);
        [DllImport("user32.dll")]
        extern public static int GetMessageExtraInfo();

        public const int MOUSEEVENTF_RIGHTDOWN = 0x0008;
        public const int MOUSEEVENTF_RIGHTUP = 0x0010;
       }

       public static void SetMouseRButtonDown()
       {
        NativeMethods.mouse_event(
         NativeMethods.MOUSEEVENTF_RIGHTDOWN,
         0, 0, 0, NativeMethods.GetMessageExtraInfo());
       }

       public static void SetMouseRButtonUp()
       {
        NativeMethods.mouse_event(
         NativeMethods.MOUSEEVENTF_RIGHTUP,
         0, 0, 0, NativeMethods.GetMessageExtraInfo());
       }
      }

      private void button1_Click(object sender, EventArgs e)
      {
       this.Capture = true;
       Cursor.Current = Cursors.Cross;
       CaptureRegion.SetMouseRButtonDown();
      }

      private void Form2_MouseDown(object sender, MouseEventArgs e)
      {
       MessageBox.Show("MouseDown");
       this.Capture = false;
       CaptureRegion.SetMouseRButtonDown();
      }
親記事 /過去ログ140より / 関連記事表示
削除チェック/

■82432  Re[1]: フォーム外のクリックでフォームを閉じたい
□投稿者/ Jitta -(2017/01/10(Tue) 16:49:54)
    No82429 (夜叉丸 さん) に返信

    とりあえず、フォームのCaptureをTrueでいけるようですが?
    その記事は2005年に書かれています。
    その記事に至った経過を教えてください。

    ちなみに、mouse_event 関数も古いです。
    pinvoke使うなら、SetCapture 関数でいけました。
記事No.82429 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82439  Re[2]: フォーム外のクリックでフォームを閉じたい
□投稿者/ 夜叉丸 -(2017/01/10(Tue) 19:09:39)
    No82432 (Jitta さん) に返信

    検索していくと、Capture = true; にするとできます。
    というのはわかっていたのですが、
    この状態で、フォーム外をクリックした場合に MouseDown 等でイベントが
    発生するようになるということがどこにも記述されていなくて。
    どうしたらいいのかわからず、しばらく検索を続けると上記のURLに辿り着いて
    そのまま利用しようとして失敗しました。

    どうも、すみませんでした。

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

■82434  VBを使用 条件分岐 アスキーコード
□投稿者/ TTT -(2017/01/10(Tue) 17:14:42)

    分類:[VB.NET/VB2005 以降] 

    VBを使用してプログラムを作成しています。

    入力したアスキーコード2ケタが同じであればメッセージボックスを出したいのですが(例00)
    現状はどっちかが当てはまっていれば出すというようになっております
    If (Asc(DATA) = "48" and "48") Then
    MsgBox("どっちも0です")
    End If

    どう修正すれば良いのでしょうか??
    アドバイス、説明サイトがあれば、ぜひ教えていただきたいです
親記事 /過去ログ140より / 関連記事表示
削除チェック/

■82440  Re[1]: VBを使用 条件分岐 アスキーコード
□投稿者/ 魔界の仮面弁士 -(2017/01/10(Tue) 19:37:25)
    No82434 (TTT さん) に返信
    > 入力したアスキーコード2ケタが同じであればメッセージボックスを出したいのですが(例00)

    『例00』という説明が曖昧なので、質問内容を再確認させてください。

    もしもこれが "00" の書き間違いだとしたら、そのコードは
     Shift_JIS なら 30,30
     UTF-16(LE) なら 30,00,30,00
     UTF-8 なら 30,30
    になります。上記は 16 進数表記なので、10進数で表せば
     Shift_JIS なら 48,48
     UTF-16(LE) なら 48,0,48,0
     UTF-8 なら 48,48
    という並びです。


    あるいは本当に、"00"という文字列だとしたら、そのコードは
     Shift_JIS なら 82,4F,82,4F
     UTF-16(LE) なら 10,FF,10,FF
     UTF-8 なら EF,BC,90,EF,BC,90
    になります。10 進なら
     Shift_JIS なら 130,79,130,79
     UTF-16(LE) なら 16,255,16,255
     UTF-8 なら 239,188,144,239,188,144
    という並びです。


    > 現状はどっちかが当てはまっていれば出すというようになっております

    意味がよくわかりませんが、たとえば
     Dim DATA As String
    に、2 桁の16進数が入っているという前提になっていて、その 1桁目と2桁目が
    同じかどうかを調べる…という話なら、Asc 関数は不要だと思います。

    たとえば、単純に
     If DATA(0) = DATA(1) Then
      MsgBox("どちらも" & DATA(0) & "です")
     End If
    のように書けそうですが、これで要件を満たせますか?
    (Option Compare Text の場合は話が変わってきますが、今回はそうではないでしょうし…)



    > If (Asc(DATA) = "48" and "48") Then
    これは、「どちらも同じであれば出す」コードどころか、
    「どっちかが当てはまっていれば出す」コードにもなっていないようです。


    【問題点1】 Asc 関数の引数は「Char型」または「String型」である必要がありますが、
    String 型であった場合、最初の一文字しか処理されない仕様です。

    変数DATA が 2 文字以上の文字を含む String 型なのであれば、
    1 文字目と 2 文字目をそれぞれ取り出し、それぞれの値を調べるようにしてみてください。

    2 文字目を取り出す方法はいくつかありますが、VB.NET の場合は上記例のように
    DATA(0) で 1 文字目、DATA(1) で 2 文字目のようにして取り出せます。
    (文字列の長さが足りない場合はエラーになります)

    たとえば、「1文字目または2文字目のコードが 48 ならば」という処理ならば
     If Asc(DATA(0)) = 48 OrElse Asc(DATA(1)) = 48 Then
    などと書けます。他にもいろいろな書き方がありますが。



    【問題点2】データ型があやふやです。

    提示頂いた「If (Asc(DATA) = "48" and "48") Then」で使われている
    Asc 関数は、指定された文字列の先頭一文字を 整数値(Integer)値で返す関数です。
    それなのに、右辺が 全角「48」という文字列(String)ではマズイです。

    比較演算子の左辺と右辺が常に同じ型になるように意識してコーディングしましょう。
    すなわち「Integer値 = String値」な比較ではなく、「Integer値 = Integer値」な比較となるように
    するべきであるということです。


    【問題点3】 And 演算子が意味を成していません。

    問題点2 が原因で、暗黙の型変換が行われてしまっています。
    まず『Asc(DATA) = "48"』という「Integer値 = String値」な比較では、
    暗黙の型変換により、Double 型同士の比較として解釈されることになります。
    すわなち
     CDbl(Asc(DATA)) = CDbl("48")
    あるいは
     CDbl(Asc(DATA)) = 48.0
    として処理されてしまうということです。

    この = 演算子による比較結果は、True または False のいずれかとなります。

    それを残りの部分と組み合わせると、変数 DATA の内容に応じて
     If (True And "48") Then
     If (False And "48") Then
    のいずれかとして解釈されます。

    この時点で「Boolean値 And String 値」というおかしな演算になっているのですが、
    この演算は、VBA では Long 型、VB.NET では Boolean 型として演算されます。そして
    今回は VB.NET なので、And "48" の部分は And CBool("48") 相当
    すなわち And True となります。

    結果として、最後の「And "48"」の部分はあっても無くても同じ結果となります。
    「If 何某 And True Then」の結果は「If 何某 Then」と同義ですから。
記事No.82434 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82474  Re[2]: VBを使用 条件分岐 アスキーコード
□投稿者/ TTT -(2017/01/11(Wed) 13:18:32)
    No82440 (魔界の仮面弁士 さん) に返信
    > 『例00』という説明が曖昧なので、質問内容を再確認させてください。
     "0" "0" 10進 Shift_JIS 48,48です。

    説明が不十分で、すいません。
    外部の機器とPC接続してやりとりさせるプログラムを作成しようとしているのですが、機器からのレスポンスはアスキーコード2ケタもしくは3ケタで、該当する組み合わせの時はメッセージボックスを出したいのですが上手く出なかったので質問しました。
    先程の解答を参考にプログラムを修正したらメッセージボックスは出せました。 最初のIFで1ケタ目を見て次のIFかcaseで2ケタ目をみるといった感じなのですが、考え方はあっているのでしょうか??
    If Asc(mydata(0)) = 48 Then
    Select Case (Asc(mydata(1)))
    Case "48"
    MsgBox("メッセージ")
    Case "65"
    MsgBox("メッセージ")
    End Select
    End If
    アドバイス等よろしくお願いします。
記事No.82434 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82477  Re[3]: VBを使用 条件分岐 アスキーコード
□投稿者/ 魔界の仮面弁士 -(2017/01/11(Wed) 13:31:02)
    No82474 (TTT さん) に返信
    >>『例00』という説明が曖昧なので、質問内容を再確認させてください。
    >  "0" "0" 10進 Shift_JIS 48,48です。

    Dim mydata As String = "00" だというのであれば、
    If mydata = "00" Then
     MsgBox("48-48のメッセージ")
    ElseIf mydata = "0A" Then
     MsgBox("48-65のメッセージ")
    End If

    のようにも書けますし、Regex や Like を使うことも出来ますね。

    文字列が ASCII 前提なら、System.Text.Encoding で As Byte() に変換すれば
    数値列として処理することも出来るでしょう。



    > 最初のIFで1ケタ目を見て次のIFかcaseで2ケタ目をみるといった感じなのですが、考え方はあっているのでしょうか??
    mydata がどのように受け取られるのかにもよりますが、
    考え方としては大きく外れてはいないかと思います。
    調べるべき組み合わせが決まっているのなら、Dictionary 型を使うのも手ですね。
記事No.82434 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82465  Re[1]: VBを使用 条件分岐 アスキーコード
□投稿者/ 文字と -(2017/01/11(Wed) 12:24:43)
>
    一般文字と同じように記入できない改行などの記述 も出来ようになります。 また、ExcelVBAでASCコードの使用方法を覚えれば




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

■82476  Re[2]: VBを使用 条件分岐 アスキーコード
□投稿者/ TTT -(2017/01/11(Wed) 13:23:56)
    No82465 (文字と さん) に返信
    返信ありがとうございます。
    まずは使用方法を覚えることから始めた方がいいですよね・・
    ExcelVBAは、あまり使っていませんでした。 ASCコードですか 確認してみます。
記事No.82434 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82480  C#の検索処理
□投稿者/ よしくん -(2017/01/11(Wed) 14:07:31)

    分類:[C#] 

    開発環境
    OS:Windows10
    開発ソフト:Visual Studio2010
    C#のWindowsFormアプリケーションにて作成
    実現したいこと

    c#のMatchか、Matchesを使用して、コントロールの名前(ID)を取得する方法が知りたいです。
    自分で、ある程度制作して、実行したところ、固まってしまいました。

    情報

    検索するコマンド:PictureBoxで名前が≪Picture101〜Picture199≫です。
    ※連番で99個のPictureBoxです。
    検索する範囲:Panel_Hiの中
    検索して、対象範囲内にPictureBox複数個あった場合は、1個づつ処理を行うため、ループ文を使用する。
    検索対象範囲のPanel_Hiと検索処理を記載しているFormは同じFormです。
    検索の処理と、検索でヒットした後の処理は、別々に記載できるようにしたいです。

    ネットで検索しましたが、文字列の検索ばかりで、コマンドの名前を検索する方法が出てきませんでした。
    ご回答お願いします。
親記事 /過去ログ140より / 関連記事表示
削除チェック/

■82483  Re[1]: C#の検索処理
□投稿者/ 魔界の仮面弁士 -(2017/01/11(Wed) 15:01:55)
    No82480 (よしくん さん) に返信
    > c#のMatchか、Matchesを使用して、コントロールの名前(ID)を取得する方法が知りたいです。
    > 自分で、ある程度制作して、実行したところ、固まってしまいました。

    ここでいう ID とは、デザイン時につけられる名前のことでしょうか。
    (実行時に動的に生成しているのかも知れませんが)

    だとしたら、各コントロールの Name プロパティで拾えます。

    string controlName = this.picture101.Name; // controlName = "picture101"

    たとえば、PictureBox をクリックされたときにそのコントロール名を表示するなら、
    「MessageBox.Show(((Control)sender).Name);」ですね。



    > 検索するコマンド:PictureBoxで名前が≪Picture101〜Picture199≫です。
    > 検索する範囲:Panel_Hiの中
    picture101 ではなく
    Picture101 なのですね?


    ここでいうコマンドというのが、探索条件を意味しているのであれば、
    たとえばこんな感じで。


    var re = new Regex(@"^Picture1\d{2}$"); // 探索条件
    var boxes = Panel_Hi.Controls.OfType<PictureBox>().Where(pic => re.IsMatch(pic.Name));
    foreach (var pic in boxes)
    {
      pic.BackColor = Color.Red;
    }


    ただ、こうした列挙処理が度々呼ばれるよう担っている場合は、
    毎回文字列で探索するのではなく、あらかじめ、
    Picture101〜Picture199 を格納した配列なり List<> なりを
    用意しておく方が良いと思います。
記事No.82480 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82326  VBでCRC32を高速で計算する方法
□投稿者/ ぎゅんぎゅ -(2017/01/02(Mon) 20:51:06)

    分類:[.NET 全般] 



    VB.NETで、ファイルからCRC32ハッシュを高速で計算する方法を教えてください。

    http://dotnet-snippets.com/snippet/calculate-crc32-hash-from-file/587

    このページにあるコードを使うと
    ハッシュを得ることができるのですが、
    500MBのファイルのハッシュを計算するのに5秒くらいかかります。

    一方で、WinRARを使って
    同じ500MBのファイルを無圧縮zipファイルに変換すると
    1〜2秒程度で生成することができ、CRCも得ることができます。

    一体、どうすればこのように高速にCRCを得ることができるのでしょうか?


    https://code.msdn.microsoft.com/office/VBACRC-32-dad7d087

    このページには4KBずつ読み込めば8〜10倍程度速くなると書かれてあります。

    VBA用に書かれたものなので
    以下のようにVB.NET用に書き換えて使ってみたのですが
    5倍くらい遅くなってしまいました。

    WinRARではどういうアルゴリズムを使っているのでしょうか?


    Public Function GetCRC32(ByVal sFileName As String) As String
    Dim R&, I%, FN%, FL&
    Dim Buf() As Byte
    If Crc32Table(255) = 0 Then InitCrc32Table()



    Using stream As Stream = File.OpenRead(sFileName)
    Using reader As New BinaryReader(stream)
    FL = stream.Length


    'FL = LOF(FN)
    R = Not 0
    ReDim Buf(4095)
    While FL > 0
    If FL < 4096 Then ReDim Buf(FL - 1)
    Buf = reader.ReadBytes(Buf.Length) 'Get #1, , buf()

    'Get #FN, , Buf
    For I = 0 To UBound(Buf)
    R = (Int(R / 256) And &HFFFFFF) Xor Crc32Table((R Xor Buf(I)) And &HFF)
    Next I
    FL = FL - UBound(Buf) - 1
    End While

    End Using
    End Using

    GetCRC32 = Not R


    End Function




    http://dobon.net/vb/dotnet/string/filemd5.html

    ちなみに、このページの方法を使ってMD5の計算も行ってみたのですが
    CRC32と同じく5秒程度かかりました。

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

■82327  Re[1]: VBでCRC32を高速で計算する方法
□投稿者/ ぎゅんぎゅ -(2017/01/02(Mon) 21:14:03)
    一つ思いましたが
    VBで計算しているから遅いのでしょうか?
    C++で計算すれば高速でしょうか?

    C++で書かれたDLLがないか検索して調べてみましたが
    なぜか見つかりませんでした。

    どなたかご存じでしたら教えてください。
     
記事No.82326 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82328  Re[2]: VBでCRC32を高速で計算する方法
□投稿者/ もりお -(2017/01/02(Mon) 22:18:49)
    2017/01/02(Mon) 23:21:06 編集(投稿者)

    No82327 (ぎゅんぎゅ さん) に返信
    5秒かかっていたものが5倍遅くなるってことは25秒ですよね
    言語の違いがあるとしても1~2秒のものが25秒かかるのはちょっと開きが大きいかなと

    アルゴリズムの違いがあるのかもしれませんね
    私はこれより速いアルゴリズムを知りませんけれども
    なんかありそうな気はしますよね

    VB.NETで処理が遅くなる原因としまして遅延バインディングがあります
    数億回のループをぶんぶん回すようなときは無視できないくらい影響があります
    Option StrictをOnにして型を書きまくって
    それでもう一回試してみてはいかがでしょうか
    うまくいけばWinRARに肉薄できるかもしれません
記事No.82326 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82330  Re[2]: VBでCRC32を高速で計算する方法
□投稿者/ Azulean -(2017/01/03(Tue) 18:10:59)
    No82327 (ぎゅんぎゅ さん) に返信
    > 一つ思いましたが
    > VBで計算しているから遅いのでしょうか?
    > C++で計算すれば高速でしょうか?

    可能性はあります。
    なお、C# で unsafe にして配列を fixed し、ポインターアクセスするように書き換えると、3 秒を切ってくるようです。
    VB.NET にはポインターがなかった…はずなので、一定以上の速度改善は難しいように思えます。
記事No.82326 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82329  Re[1]: VBでCRC32を高速で計算する方法
□投稿者/ Azulean -(2017/01/03(Tue) 18:00:35)
    No82326 (ぎゅんぎゅ さん) に返信
    > このページには4KBずつ読み込めば8〜10倍程度速くなると書かれてあります。
    >
    > VBA用に書かれたものなので
    > 以下のようにVB.NET用に書き換えて使ってみたのですが
    > 5倍くらい遅くなってしまいました。

    そもそも、最初のリンクの内容も 4KB ずつ処理する仕組みのようですので、同じようなことをやろうとして遅くなっているのかと。
    元のコードは割り算を \ でやっているのに対して、VBA から移植したコードは / にしているので浮動小数演算に化けた結果、数倍遅くなっています。
記事No.82326 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82331  Re[2]: VBでCRC32を高速で計算する方法
□投稿者/ Hongliang -(2017/01/04(Wed) 00:58:36)
    最初のリンク先でのコードをベースに、何点か。具体的な数字は環境に依存するので特に記述しませんが。

    ・Debugモードで計測しているのであれば、Releaseモードで試してみてください。

    ・「対象のCPU」がx64かx86かで結構変わったりします。

    ・本来は符号無し整数として行うべき演算を、このコードでは符号付き整数で演算しています。
     IntegerをUIntegerに変更(リテラルの整数値は&HxxxxUIとしてUIntegerであることを明示)してみてください。
     (ループ変数i, jはIntegerのままで良いです)
     (Option Strict Onにしてエラー・警告が出ないように)

    ・UIntegerで演算を行えるなら、
    > CRC32Result = ((CRC32Result And &HFFFFFF00) \ &H100) And &HFFFFFF
    > CRC32Result = CRC32Result Xor CRC32Table(n)
    という部分を、
    CRC32Result = (CRC32Result >> 8) Xor CRC32Table(CInt(n))
    に簡略化することができます。
記事No.82326 のレス /過去ログ140より / 関連記事表示
削除チェック/

<前の20件 | 次の20件>

<< 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 >>

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

パスワード/

- Child Tree -