DOBON.NETプログラミング道掲示板

■ 「新規作成」から投稿できます。
■ マルチポストされた投稿を見つけたときは、その投稿に返信することによりご報告ください。その際は匿名で投稿し、マルチポストされている場所を併記してください。
■ スパム対策のため、メールアドレスの先頭に"_"という文字が付加されています。
RSS 2.0 RSS 2.0 | RSS 0.91 | 携帯電話用 | 自分専用のアイコンを使用するには | 掲示板への要望 | 管理人に連絡 | お気楽掲示板
■ 24時間以内に作成されたスレッドは New で表示されます。
■ 24時間以内に更新されたスレッドは UpDate で表示されます。

記事リスト ( )内の数字はレス数
Nomalwebformでの制御(5) | Nomalロジックの実現お願い(4) | NomalAppActiveが正常に機能しない。(4) | Nomaltextboxでmultilineでの改行削除について(2) | Nomalftp接続してファイルアップロード後、別フォルダにコピー(5) | Nomalリソースデザイナの開き方(11) | NomalDataGridViewのイベント中にデータを更新するとエラーが発生(2) | NomalGetObjectでExcelファイルを加工するとExcelファイルが壊れる(9) | Nomalフォントに登録されていない文字の検出(2) | Nomaloledbでdatatableを取得するときにエラーになる(1) | NomalDataGridViewの複数行選択で歯抜け選択を無効にしたい(2) | Nomal証券会社へのログイン(1) | Nomalユーザーフォームに埋め込んだAutoCADの変化を捉える(0) | Nomalシステムドライブ以外へのページング設定が反映されない(5) | Nomalブラウザでコピーした透過PNGを貼り付けたい(4) | Nomalforeachでループ回数を取得(2) | Nomalbitmapが保存できない(2) | Nomal特定ピクセルで画像を読み込みたい(2) | NomalDataGridViewでAlt+Enterで改行したい(2) | Nomal全角シフト中にアクセスキーが効かない(5) | NomalDataAdapter.Updateで構文エラー(6) | Nomal抽象クラスで実装したクラスの情報を知る(3) | NomalProcessクラスからbatファイル実行後、KILLできない(2) | Nomal画面遷移(モーダルとモードレス)(2) | Nomal兆億万表記の文字列を数値に変換できる?(3) | NomalGetDirectoriesでルートを指定するとエラーになる(3) | NomalLinqにおける明示的型指定の方法(3) | Nomal2つのradの数値から1つの角度を求めるコードを改善できますか?(C++)(2) | Nomalコンソールアプリで、WebView2の利用(2) | NomalEntity Frameworkは、使えるか?(2) | Nomalデータベースからのテーブル名一覧の効率的な取得方法(3) | NomalC#のlong型でオーバーフローになる(2) | Nomal正規表現のパターン表記方法(2) | NomalWebView2によるスクレ―ピング(4) | Nomalこういた物を作れますか?(2) | Nomalツールボックスにtableadapterが表示されない(1) | NomalC# Chart X軸上のグラフ表示(3) | NomalVB.NETでBluetoothデバイスの電池残量を取得する方法(3) | Nomalクリスタルレポート 明細部のサブレポート(0) | Nomal重なったPictureBox同士を透過する方法(7) | NomalWindowsフォームデザイナについて(3) | NomalVB.NETからcmdでpingを実行した時の結果(5) | Nomalvb.netでExcelファイル操作(7) | Nomalvb.netでのExcelファイルそうさ(2) | Nomalキーボード+バーコードでキーボード入力を無効にしたい(6) | Nomalファイルとして配置したマニフェストを優先したい(2) | NomalTabPageの背景色(5) | NomalVB2022でクリスタルレポートが開けない(2) | NomalC#でJpeg圧縮のTiffファイルを作成したい(4) | Nomalエクセルのみ監視ができない(2) | NomalDataGridViewのVirtualModeを有効した場合の実装方法(4) | NomalExcelの数値 -> 日付みたいな関数?(2) | NomalDrawstringでの透過文字作成(3) | Nomaljumbo icon(256x256)が存在するか知る方法(6) | NomalSpinWait()を使う理由(2) | Nomalantecedentってなんですか?(2) | Nomalワンタイムパスワードのサイトに自動ログインしてアクセストークンを得る(3) | Nomalstyle.displayだと効率悪いから違うやり方をしたいです。(5) | Nomalテーブルを順番通りに直すプログラムを外部で読み込めるようにしたいです。(4) | NomalJSONの複雑な入れ子内部の値を取りたい。(3) | Nomalグリッド表示レコードをJSONに変換(5) | Nomalシステム時計の設定(3) | NomalSeleniumで開いているページのTableを編集したい(5) | Nomalソケット通信入門 ひらがな(4) | NomalVisual Basicでエラーが出る(3) | Nomalインストーラにて、ローミングフォルダにファイルを配置したい(0) | NomalRGB値の所得(2) | NomalVB.net からAccessDBへの接続(2) | Nomal時間変数(文字列)の扱い(4) | Nomal画像のスクロール(6) | Nomalタイマーの一括処理(6) | NomalTreeViewとDataGridViewのスクロールを同期(シンクロ)させたい(4) | NomalTreeViewの現在位置とDataGridViewの現在位置を合わせたい(7) | Nomalフォームのリサイズ時にDataGridViewが再描画されない(4) | NomalPDFをフォーム上で表示させる方法につきまして(4) | NomalPictureBoxの画像を連続保存(11) | NomalテキストボックスのValidatingイベントよりも先に発生するボタン発生イベントは何でしょう?(2) | Nomal継承元フォームで各フォームのボタン動作を検知したい(3) | NomalWindowsエクスプローラからのドラッグ&ドロップ(2) | Nomalラジオボタンの一括設定(7) | Nomalクリックイベントでexeを作成できるか(2) | Nomal作成した白黒画像をWordに貼り付けてから「図として保存」(8) | Nomalアセンブリ情報が載らない(1) | NomalRichTextBoxのテキストをpictureBOXへ(12) | Nomalc#で日付型の定義の仕方で質問があります。(2) | Nomal先頭に空白(スペース)があるファイルを読み込んでRichTextBoxへ書き出すとスペースが削除える(6) | NomalExcel Com オブジェクトの増殖(13) | Nomal二次元マップから値の取得(1) | NomalアプリでHDMIへ出す解像度を変えたい(4) | NomalDataGridViewのドロップダウンリストの表示と選択後の値を分けたい(1) | Nomal列車の時間ごとの位置情報を表示したいです。(2) | Nomal画像の中心を基点に回転(4) | NomalDataGridViewの行ヘッダーに行番号を表示した時のエラー(4) | NomalタッチキーボードでIMEを自動で切替えたい(6) | NomalVSTOによるエクセルアドインのインストーラーでのアップデート(1) | NomalMP4動画を再生する方法について(5) | NomalVB.NetでVB6.0と同じFontを指定しても同様に印刷されない(9) | NomalLableのカラー色を文字変数から変更したい(5) | NomalUrlにアクセスするとダウンロードされるファイルを捕まえる(2) | NomalDataGridViewの特定セルにボタンを配置する方法(5) |



■記事リスト / ▼下のスレッド
■35687 / 親記事)  webformでの制御
□投稿者/ イクイノックス 一般人(1回)-(2025/09/24(Wed) 11:34:57)
  • アイコン環境/言語:[Webform、C#、.NetFramework4.8.1] 
    分類:[ASP.NET] 

    通常、「更新」ボタンなどを画面デザインで配置して実装する場合、
    クライアントスクリプトで記述するconfirmメソッドはOnClickイベントで実装すると思います。

    gridviewのAutogenerate系のボタンやコマンドコントロールで「自動的」に実装される「ボタン」は画面デザインの時点ではhtmlソース表示しても記述されてないため、OnClickでの制御ができません。
    そのため、postback後に制御する必要がありますが、入力チェック→alertでメッセージ表示は、サーバー側の処理が終わった後に出すイメージで問題ありませんが、confirmはpostback後にRegisterClientScriptBlockで実行するように処理しても、
    サーバー側での更新処理が全部終わってからメッセージが出力される挙動になるため、確認メッセージの用をなしていません。

    OnClickに該当する処理をpostback前にhtmlソースに書かれてなくても無理やり挙動させる、あるいはpostback後の「更新」「削除」などのイベント処理の冒頭でconfirmを出し、ok:実行、キャンセル:e.cancel=true等で中止
    というような処理をするのは不可能なのでしょうか?
    ご存じの方ご教示ください。

    多分VBでもC#でも同じような処理になると思いますが、
    一応サーバーサイドはC#で記述してます。

違反を報告
引用返信

▽[全レス5件(ResNo.1-5 表示)]
■35688 / ResNo.1)  Re[1]: webformでの制御
□投稿者/ kiku 一般人(3回)-(2025/09/24(Wed) 15:25:36)
  • アイコンNo35687に返信(イクイノックスさんの記事)
    > そのため、postback後に制御する必要がありますが、入力チェック→alertでメッセージ表示は、サーバー側の処理が終わった後に出すイメージで問題ありませんが、confirmはpostback後にRegisterClientScriptBlockで実行するように処理しても、
    > サーバー側での更新処理が全部終わってからメッセージが出力される挙動になるため、確認メッセージの用をなしていません。

    サーバーサイドの処理を2つに分ければ良いのではないでしょうか?
    1.入力チェックのみを行う処理(入力チェックエラー)
    2.登録のみを行う処理(登録時のエラー)

    当方、WebFormアプリの作成未経験のため、概念的な回答のみになります。
違反を報告
引用返信
■35689 / ResNo.2)  Re[2]: webformでの制御
□投稿者/ イクイノックス 一般人(2回)-(2025/09/24(Wed) 16:05:24)
  • アイコンNo35688に返信(kikuさんの記事)
    > ■No35687に返信(イクイノックスさんの記事)
    >>そのため、postback後に制御する必要がありますが、入力チェック→alertでメッセージ表示は、サーバー側の処理が終わった後に出すイメージで問題ありませんが、confirmはpostback後にRegisterClientScriptBlockで実行するように処理しても、
    >>サーバー側での更新処理が全部終わってからメッセージが出力される挙動になるため、確認メッセージの用をなしていません。
    >
    > サーバーサイドの処理を2つに分ければ良いのではないでしょうか?
    > 1.入力チェックのみを行う処理(入力チェックエラー)
    > 2.登録のみを行う処理(登録時のエラー)
    >
    > 当方、WebFormアプリの作成未経験のため、概念的な回答のみになります。

    1も2もalertなので表示できます。

    問題はconfirmのほうです。
    具体的に言うと、
    「削除」ボタンはWebform側でサーバーサイドで自動的に生成される感じで、htmlで表現されていません。
    なので、「削除」押下→即postback→(ここからサーバーサイド)page_load→grid_RowCommand→grid_RowDeletingの順にイベントが発生します。

    grid_RowCommandでは「新規作成」「更新」、「削除」いずれか発生したか判定できます。page_loadではpostbackしたかどうかしか判定できないようで何ボタンが押されたかわかりません。

    grid_RowCommandで「削除」のときconfirmを出すみたいな処理はできますが、
    それはgrid_RowDeletingの処理、つまり削除処理が実行された後に表示されるので、confirmの操作が反映できません。
    おそらくpage_loadで出せばいけるのかもしれませんが、「削除」であることが判定できないためconfirmを出す処理を組み込めません。

    こんな状況です。
違反を報告
引用返信
■35690 / ResNo.3)  【報告】No35687 の投稿はマルチポストです
□投稿者/ (報告) 一般人(1回)-(2025/09/24(Wed) 16:24:14)
  • アイコンNo35687 の投稿はマルチポストです。もし元記事の投稿者にマルチポストの心当たりがない場合は、すぐに返信でお知らせください。

    ●マルチポストされている場所
    https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=31022

    ----------
    この掲示板ではマルチポストが禁止されています。詳しくは、「書き込みのルールについて」をお読みください。

    ●書き込みのルールについて
    https://dobon.net/vb/bbs/index.html
違反を報告
引用返信
■35691 / ResNo.4)  Re[3]: webformでの制御
□投稿者/ kiku 一般人(4回)-(2025/09/24(Wed) 17:12:59)
  • アイコンNo35689に返信(イクイノックスさんの記事)
    > ■No35688に返信(kikuさんの記事)
    >>■No35687に返信(イクイノックスさんの記事)
    > 問題はconfirmのほうです。
    > 具体的に言うと、
    > 「削除」ボタンはWebform側でサーバーサイドで自動的に生成される感じで、htmlで表現されていません。
    > なので、「削除」押下→即postback→(ここからサーバーサイド)page_load→grid_RowCommand→grid_RowDeletingの順にイベントが発生します。
    >
    > grid_RowCommandでは「新規作成」「更新」、「削除」いずれか発生したか判定できます。page_loadではpostbackしたかどうかしか判定できないようで何ボタンが押されたかわかりません。

    grid_RowCommand処理を下記にしたらできませんか?
    1.grid_RowCommandで「削除」ボタンが押下されたか判断。
    2.削除ボタンが押されたら、削除ボタン用入力チェック画面へ遷移。
    3.削除ボタン用入力チェック画面では、confirmのみ表示する。
    4.confirmでOKなら、削除処理画面へ遷移。
    5.confirmでcancelなら、元の画面へ遷移し、削除された表を表示。
違反を報告
引用返信
■35692 / ResNo.5)  Re[4]: webformでの制御
□投稿者/ イクイノックス 一般人(3回)-(2025/10/02(Thu) 11:28:07)
  • アイコンNo35691に返信(kikuさんの記事)
    > ■No35689に返信(イクイノックスさんの記事)
    >>■No35688に返信(kikuさんの記事)
    > >>■No35687に返信(イクイノックスさんの記事)
    >>問題はconfirmのほうです。
    >>具体的に言うと、
    >>「削除」ボタンはWebform側でサーバーサイドで自動的に生成される感じで、htmlで表現されていません。
    >>なので、「削除」押下→即postback→(ここからサーバーサイド)page_load→grid_RowCommand→grid_RowDeletingの順にイベントが発生します。
    >>
    >>grid_RowCommandでは「新規作成」「更新」、「削除」いずれか発生したか判定できます。page_loadではpostbackしたかどうかしか判定できないようで何ボタンが押されたかわかりません。
    >
    > grid_RowCommand処理を下記にしたらできませんか?
    > 1.grid_RowCommandで「削除」ボタンが押下されたか判断。
    > 2.削除ボタンが押されたら、削除ボタン用入力チェック画面へ遷移。
    > 3.削除ボタン用入力チェック画面では、confirmのみ表示する。
    > 4.confirmでOKなら、削除処理画面へ遷移。
    > 5.confirmでcancelなら、元の画面へ遷移し、削除された表を表示。

    それだと処理が複雑になりすぎるので、
    AutoGenerateDeleteボタンによる実装を断念し、

    テンプレートフィールドのアイテムとしてボタンを定義して、
    1.OnClientClickでConfirm表示(returnを返す形)
    2.CommandNameプロパティーをDeleteに設定

    これで戻り値がfalseの時は処理中止、trueの時はgrid_RowDeleting発動(=行削除実行)となります。

    結局、AutoGenerateDeleteボタンだと即postbackになるようにロジックが自動生成してしまうので、grid_RowCommandの時点では手遅れ(page_loadが先に発生してしまうので)、なのでpostback前にConfirmのように処理分岐が必要なJSの処理実行するには上記のような方法しかないことがわかりました。

    即postbackに必ずなってしまう使用がいまいちとは思いつつ、最早WebformはCore系で廃止されているため、文句言っても仕様改善は期待できません。
    テンプレートフィールドを使うのが無難と判断しました。




解決み!
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-5]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■35678 / 親記事)  ロジックの実現お願い
□投稿者/ あばば無人君 一般人(2回)-(2025/07/22(Tue) 21:24:46)
  • アイコン環境/言語:[Windows10 Home(19045.5917) 64bit、.NetFramework_4.8.1] 
    分類:[.NET] 

    約1年半ぶりの投稿となります。宜しくお願いします。

    掲題の件ですが、以下の仕様を実現するロジックを組むorヒントが欲しいです。
    (ロジックなんて自分で考えろ!と言われるのは百も承知ですが、
    この件に10Hほど掛けても未だ光明が見えず、致し方なくの投稿です)

    ※書き込みのルール「丸投げした投稿」に該当するのでしたらご指摘ください。
     諦めます。


    ではここから仕様

    以下のカラムを持つDataTable「dtSyuyakumae」があります。
    全カラム数値で、後述のデータパターン(集約前)の値が入っています。
    ・親分類
    ・子分類
    ・孫分類
    ・他分類

    これを以下のクラスに格納してListに積みたいのですが、その際に
    「親子孫の値に0が含まれるなら複数行を集約&空値にしてクラスにセットする」
    「ただし他分類が異なるならそれぞれの行でクラスにセットする」
    というのが条件になります。
    (言葉では分かりにくいと思うのでデータパターン(集約後)をご確認下さい)

    クラス
    private class BunruiInfo
    {
    /// <summary>親分類</summary>
    public string OBunrui { get; set; } = string.Empty;
    /// <summary>子分類</summary>
    public string KBunrui { get; set; } = string.Empty;
    /// <summary>孫分類</summary>
    public string MBunrui { get; set; } = string.Empty;
    /// <summary>他分類</summary>
    public string HBunrui { get; set; } = string.Empty;
    }

    処理部分
    private void button1_Click(object sender, EventArgs e)
    {
    // このDataTableが集約前のデータa〜jいずれかとなる
    DataTable dtSyuyakumae = GetSyuyakumaeData();

    // このリストに集約後のデータを積みたい
    var bunruiList = new List<BunruiInfo>();

    ★ここで集約するロジックが実現できない!★


    }


    パッと見だと実現できそうな感じがするのですが、いざやってみると
    「あちらを立てればこちらが立たず」な状態となってしまい、
    どうにもならなくなったのでご助力を依頼している状態です。

    ロジックの実現お願いなど「ふざけるな!」と言われそうで恐縮ですが
    自分(と周りのメンバー)ではどうにもできないのでご協力の程、お願い致します。


    ここからデータパターン
    ※インデントを調整していますが等幅フォントでないと正しく表示されないかも。
     お手数ですがメモ帳などのテキストエディタに張り付けてご確認ください。

      集約前                 集約後
    a  親分類 子分類 孫分類 他分類   →   親分類 子分類 孫分類 他分類
      1   1   1   1         1          1
      1   0   0   1


    b  親分類 子分類 孫分類 他分類   →   親分類 子分類 孫分類 他分類
      1   1   1   1         1   1       1
      1   1   0   1


    c  親分類 子分類 孫分類 他分類   →   親分類 子分類 孫分類 他分類
      1   1   1   1         1   1   1   
      1   1   1   0


    d  親分類 子分類 孫分類 他分類   →   親分類 子分類 孫分類 他分類
      1   1   0   1         1   1       1
      2   0   0   1         2          1


    e  親分類 子分類 孫分類 他分類   →   親分類 子分類 孫分類 他分類
      1   1   0   1         1   1       1
      1   2   0   1         1   2       1


    f  親分類 子分類 孫分類 他分類   →   親分類 子分類 孫分類 他分類
      1   1   1   1         1   1   1   1
      1   0   0   2         1          2


    g  親分類 子分類 孫分類 他分類   →   親分類 子分類 孫分類 他分類
      1   0   0   2         1          2
      1   1   0   1         1   1       1
      1   1   1   1         1   2       1
      1   2   0   1


    h  親分類 子分類 孫分類 他分類   →   親分類 子分類 孫分類 他分類
      1   1   1   1         1   1   1   1
      0   0   0   2                   2


    i  親分類 子分類 孫分類 他分類   →   親分類 子分類 孫分類 他分類
      0   0   0   2                   2
      1   1   1   1         1   1   1   1
      2   0   0   3         2          3
      2   1   1   2         2   1   1   2


    j  親分類 子分類 孫分類 他分類   →   親分類 子分類 孫分類 他分類
      1   1   1   1         1   1   1   1
      1   2   0   1         1   2       1

違反を報告
引用返信

▽[全レス4件(ResNo.1-4 表示)]
■35679 / ResNo.1)  Re[1]: ロジックの実現お願い
□投稿者/ おき 一般人(1回)-(2025/07/23(Wed) 10:34:17)
  • アイコンNo35678に返信(あばば無人君さんの記事)

    イ.
    データパターンcの入出力が、文章で記述されたルールと矛盾しているように見えます。
    「データパターンc」か「文章で記述されたルール」かどちらかが誤っていますか?

    ロ.
    3入力1出力のデータパターンを最低1つは用意した方が良いと思います。文章で記述されたルールから推測は付くのですがデータパターンが無いと確信できません。
違反を報告
引用返信
■35680 / ResNo.2)  Re[2]: ロジックの実現お願い
□投稿者/ おき 一般人(2回)-(2025/07/23(Wed) 13:21:58)
  • アイコンこの3入力のとき、出力はどうなりますか?
    0001
    1111
    1221



    Column数が4なのはわかりました。一方Row数はパターンデータ通りに4以下なのでしょうか?
    Row数の制約があれば教えて下さい。
    Row数が必ず4以下で与えられるものとしてパターンデータaが2回繰り返されていたとき出力はどうなりますか?

    1111
    1001
    1111
    1001



    親子孫の定義がなされていません。以下のようなパターンデータのとき出力はどうなりますか?

    1011
    1011


違反を報告
引用返信
■35681 / ResNo.3)  Re[3]: ロジックの実現お願い
□投稿者/ あばば無人君 一般人(3回)-(2025/07/31(Thu) 07:08:29)
  • アイコンおき さん、ご返答ありがとうございます。
    また、返信が遅くなりまことに申し訳ありません。
    (投稿の翌日から昨日まで出張が入り返信できませんでした)

    以下、ご返信いただいた内容にお答え致します。

    > イ.
    > データパターンcの入出力が、文章で記述されたルールと矛盾しているように見えます。
    > 「データパターンc」か「文章で記述されたルール」かどちらかが誤っていますか?

    →データパターンcはあり得ます。文章で記述されたルールが正確ではありませんでした。
     まずルールの前に値の意味を記載すべきでした。(スミマセン)
     値の意味:
      値は0または0以外(正数のみ)で、0は「全て」を意味します。
      また(予想がついていたと思いますが)親子孫は、親→子→孫の関係なので
      上位で0が出てきたら下位も0となります。
      (100はあっても010や001のパターンは無いということ)

      ただし他分類だけは特殊で、親子孫が同じ値の時に他分類が0なら
      集約することになります。(データパターンcがこれに該当します)


    > この3入力のとき、出力はどうなりますか?
    > 0001
    > 1111
    > 1221

    →親子孫が0の入力があり、他は3入力とも1となっているので出力は 0001 のみとなります。


    > Column数が4なのはわかりました。一方Row数はパターンデータ通りに4以下なのでしょうか?
    > Row数の制約があれば教えて下さい。

    →Row数は制限なしです。データパターンの4行はあくまで例となります。


    > Row数が必ず4以下で与えられるものとしてパターンデータaが2回繰り返されていたとき出力はどうなりますか?
    >
    > 1111
    > 1001
    > 1111
    > 1001

    →すべて親1/他1であり、子孫は0なので出力は 1001 のみとなります。


    > 親子孫の定義がなされていません。以下のようなパターンデータのとき出力はどうなりますか?
    >
    > 1011
    > 1011

    →上記値の意味のとおり、上位の子が0なのに孫が1のパターンはありません。


    上記が回答となりますが、「まだ意味不明だよ!」とか「この場合は?」など
    ありましたらご連絡ください。

    返信が遅くなりまことに申し訳ありませんでした。

違反を報告
引用返信
■35685 / ResNo.4)  Re[4]: ロジックの実現お願い
□投稿者/ kiku 一般人(2回)-(2025/09/19(Fri) 11:54:17)
  • アイコン
    2025/09/19(Fri) 11:57:28 編集(投稿者)
    
    ■No35681に返信(あばば無人君さんの記事)
    > 上記が回答となりますが、「まだ意味不明だよ!」とか「この場合は?」など
    > ありましたらご連絡ください。
    
    もう見ていないとは思いますが、確認です。
    
    0が存在するパターンは下記ですべてでしょうか?
    過不足あれば教えて欲しいです。
    0 0 0 0
    * 0 0 0
    * * 0 0
    * * * 0
    0 0 0 *
    * 0 0 *
    * * 0 *
    

違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-4]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■35671 / 親記事)  AppActiveが正常に機能しない。
□投稿者/ 日研迷琉 一般人(1回)-(2025/04/10(Thu) 14:02:35)
  • アイコン環境/言語:[Windows11 Pro(24H2) VS2022 VB .NetFreamwork4.8] 
    分類:[.NET] 

    現在、PCから離れた位置で無線バーコードリーダによるエントリプログラムを作成しているのですが、アプリケーションからカーソルが離れるとPCにもって入力項目にカーソルを移動しなければなりません。
    但し、フォーム上の入力項目は1つなのでフォームがアクティブになっていれば問題はないのですが、なにぶん長時間、他数のエントリを行うためにフォームがアクティブ状態になっていない場合、取り返しがつきません。
    そこで、タイマーイベントで、アクティブフォームを取得し、自身がアクティブでない場合に自身をアクティブにするロジックを考えたのですがタスクバーが点滅するだけでアクティブになってくれません。(VSのデバック起動では動作します。)
    下記の様な記述をしています。どなたか御教授願えませんでしょうか?

    【環境】 Windows11 Pro(24H2)
    VS2022 VB .NetFreamwork4.8

    【Code】タイマーイベント内に記載
    Dim ActiveFmName As String = ""
    Try
    ActiveFmName = IIf(IsNothing(ActiveForm.Name), "", ActiveForm.Name)
    Catch ex As Exception
    End Try

    If Not ActiveFmName = Me.Name Then
    AppActivate(Process.GetCurrentProcess.Id)
    End If

    以上よろしくお願いします
違反を報告
引用返信

▽[全レス4件(ResNo.1-4 表示)]
■35672 / ResNo.1)  Re[1]: AppActiveが正常に機能しない。
□投稿者/ 魔界の仮面弁士 大御所(1589回)-(2025/04/10(Thu) 16:08:04)
  • アイコンNo35671に返信(日研迷琉さんの記事)
    > ActiveFmName = IIf(IsNothing(ActiveForm.Name), "", ActiveForm.Name)
    これについては
     ActiveFmName = If(ActiveForm?.Name, "")
    と書くべきかと。
    IIf だと As Object になってしまいますので、Option Strict On との相性も悪いですよね。


    > アプリケーションからカーソルが離れるとPCにもって入力項目にカーソルを移動しなければなりません。
    「PCにもって」という動作が何を指しているのか、
    ちょっとよくわからなかったのですが、ここでいう「カーソル」とは
    マウスカーソルの物理的な位置ではなく、アクティブウィンドウに対する
    入力位置のキャレットのことを指しているものと推察しました。


    キーボードデバイスとして扱わるタイプのリーダーであれば、
    RawInput API (WM_INPUT メッセージ + RegisterRawInputDevices)や
    SharpDX.RawInput を使うことで、アプリケーションが前面に無く
    非アクティブであった場合の入力も拾うことができます。
    複数のキーボードデバイスがあった場合に、それぞれの入力を別々に拾うこともできます。
    ただし、キー入力エミュレーションのリーダーの場合は使えない可能性があります。

    https://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=res&namber=35479&rev=&page=0&no=0



    > 自身がアクティブでない場合に自身をアクティブにするロジックを考えたのですが
    無線バーコードリーダによる入力が行われていなくても、
    タイマーで強制的にアクティブ化しようとしていますか?
    それはシステムの操作的に問題があるような…。


    > タスクバーが点滅するだけでアクティブになってくれません。(VSのデバック起動では動作します。)
    たとえば、何かキー入力を行っている最中にアクティブウィンドウを勝手に変更されたり、
    ウィンドウを切り替えたばかりなのに、勝手に別のウィンドウに変更されたりすると
    都合が悪いため、そういう時にはタスクバーを点滅させて通知する仕様になっています。

    このあたりの事情は、下記で説明されています。
    https://bit.ly/foregroundWindow

    上記に書かれた、ウィンドウをフォアグラウンドに表示できる条件を満たしていれば
    AppActivate で点滅することなく切り替わるかと思います。

    なお上記 URL には一応、強制的にアクティブ化するためのコードも提示されています。
    (過去記事のアーカイブなので、サンプルコードが崩れてしまっていますが…)

    とはいえ上記のサンプルだけでも厳密には不十分で、さらにあらかじめ、
    ForegroundLockTimeout を 0 にしておかなければならないケースもあります。
    こちらは KB886217 で解説されています。
    https://bit.ly/MSKB886217

    なお、「SPI_GETFOREGROUNDLOCKTIMEOUT」を使うことで、
    一時的にこのパラメーター(ForegroundLockTimeout)を変更することもできます。



    以下蛇足。今となって不要な情報ですが。
    http://bbs.wankuma.com/index.cgi?mode=al2&namber=63230&KLOG=107
    http://bbs.wankuma.com/index.cgi?mode=al2&namber=63230&page=20&KLOG=107

違反を報告
引用返信
■35673 / ResNo.2)  Re[2]: AppActiveが正常に機能しない。
□投稿者/ 魔界の仮面弁士 大御所(1590回)-(2025/04/11(Fri) 09:21:09)
  • アイコンNo35672に追記(魔界の仮面弁士の記事)
    >>タスクバーが点滅するだけでアクティブになってくれません。(VSのデバック起動では動作します。)

    こっちを紹介するべきだったかな。

    [DOBON.NET]
    ┗[外部アプリケーションのウィンドウをアクティブにする]
     ┗[ウィンドウがアクティブにならない時の対策]
    https://dobon.net/vb/dotnet/process/appactivate.html#section4
違反を報告
引用返信
■35674 / ResNo.3)  Re[3]: AppActiveが正常に機能しない。
□投稿者/ 日研迷琉 一般人(2回)-(2025/04/11(Fri) 12:05:21)
  • アイコンお世話になっております。
    早速のご回答ありがとうございます。

    >> ActiveFmName = IIf(IsNothing(ActiveForm.Name), "", ActiveForm.Name)
    > これについては
    >  ActiveFmName = If(ActiveForm?.Name, "")
    > と書くべきかと。
    > IIf だと As Object になってしまいますので、Option Strict On との相性も悪いですよね。
    ご指摘ありがとうございます。勉強になります。

    > 「PCにもって」という動作が何を指しているのか、
    すみません。タッチミスで正しくは「PCにもどって」となります。

    > 入力位置のキャレットのことを指しているものと推察しました。
    はい、そう言うことです。

    >>自身がアクティブでない場合に自身をアクティブにするロジックを考えたのですが
    > 無線バーコードリーダによる入力が行われていなくても、
    > タイマーで強制的にアクティブ化しようとしていますか?
    > それはシステムの操作的に問題があるような…。
    PCは、バーコード読み取り専用機(サーバ機)として運用するつもりですのでメンテナンス時以外は他の処理は不要となります。
    確かにAPI等でメッセージをフックすれば可能なのでしょうけれども、当方には難しすぎてシンプルにアプリケーションを作成したいと思い今回の仕組みにしています。
    戴きました情報を基にもう少し勉強してみます。

違反を報告
引用返信
■35675 / ResNo.4)  Re[4]: AppActiveが正常に機能しない。
□投稿者/ 日研迷琉 一般人(3回)-(2025/04/14(Mon) 10:00:10)
  • アイコンお疲れ様です。

    魔界の仮面弁士様ご指摘の通り、[ウィンドウがアクティブにならない時の対策]を施し、希望通りの動きを実現することができました。
    まっ、ほぼコピペですが...(^^ゞ
    と言う事で、この案件は閉めさせて頂きます。ありがとうございました。
解決み!
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-4]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■35668 / 親記事)  textboxでmultilineでの改行削除について
□投稿者/ suekun 一般人(9回)-(2025/04/04(Fri) 07:22:47)
  • アイコン環境/言語:[windows11/vb.net] 
    分類:[.NET] 

    2025/04/04(Fri) 10:53:33 編集(投稿者)

    お世話になっております。
    textboxでmultilineのものがあり
    内容を全てクリアして、カーソルを先頭に移動させたいのですが
    textbox.clearしても1つの改行が削除できません。(2行目にカーソルが残ります。)
    textbox.Replace(Chr(13), "").Replace(Chr(10), "")
    などを色々試しましたが、削除できません。
    どのようにしたらよろしいでしょうか。
    よろしくお願い申し上げます。
違反を報告
引用返信

▽[全レス2件(ResNo.1-2 表示)]
■35669 / ResNo.1)  Re[1]: textboxでmultilineでの改行削除について
□投稿者/ suekun 一般人(10回)-(2025/04/04(Fri) 07:27:08)
  • アイコンNo35668に返信(suekunさんの記事)
    textbox.multiline=false
    textbox.multiline=true
    とすると、内容がすべて削除され、カーソルは先頭に戻ります。
    他に対応方法はないでしょうか。
違反を報告
引用返信
■35670 / ResNo.2)  Re[2]: textboxでmultilineでの改行削除について
□投稿者/ suekun 一般人(11回)-(2025/04/04(Fri) 10:56:52)
  • アイコンNo35669に返信(suekunさんの記事)
    2回目のクリア(下記)を行ったところ、先頭に戻すことができました。
    textbox.select
    textbox.clear
    textbox.SelectionStart=0

    ありがとうございました。
解決み!
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-2]



■記事リスト / ▲上のスレッド
■35662 / 親記事)  ftp接続してファイルアップロード後、別フォルダにコピー
□投稿者/ みーちょ 一般人(1回)-(2025/03/24(Mon) 03:36:34)
  • アイコン環境/言語:[Windows11 / vb.net2022] 
    分類:[.NET] 

    いつもお世話になっております。
    以下の処理を行いたいのですが、やり方が分からず躓いております。


    1 ftpサーバに接続してファイルをアップロード
      対象ディレクトリ ftp://test/aaa/ 
      ※ftp接続可能なフォルダ。実際のパスはc:\ftp\test\aaa

    2 ファイルアップロード後、直接ftp接続できないフォルダ
      D\bbb
      に移動し、システム日付(yyyymmdd)のフォルダを作成

    3 2のフォルダに、1でアップロードしたファイルをコピー


    1は、こちらのサイトの「FTPサーバーにファイルをアップロードする」でできましたが、2以降ができません。。。
    chコマンドみたいなのでフォルダ移動できないかと思ったのですが、ftpサーバ側でのchコマンド実行のやり方がわからず、躓いております。
    ftp接続できないフォルダ参照はできないのでしょうか?
    もしできるのなら、やり方を教えていただきたく、何卒よろしくお願いいたします。



違反を報告
引用返信

▽[全レス5件(ResNo.1-5 表示)]
■35663 / ResNo.1)  Re[1]: ftp接続してファイルアップロード後、別フォルダにコピー
□投稿者/ KOZ 一般人(40回)-(2025/03/24(Mon) 05:00:56)
  • アイコンNo35662に返信(みーちょさんの記事)
    > ftp接続できないフォルダ参照はできないのでしょうか?

    できません。出来たら問題です。

    > もしできるのなら、やり方を教えていただきたく、何卒よろしくお願いいたします。

    サーバーのフォルダを共有するしかないと思いますよ。
違反を報告
引用返信
■35664 / ResNo.2)  Re[2]: ftp接続してファイルアップロード後、別フォルダにコピー
□投稿者/ みーちょ 一般人(2回)-(2025/03/24(Mon) 06:13:11)
  • アイコン
    >>ftp接続できないフォルダ参照はできないのでしょうか?
    > できません。出来たら問題です。
    あう、やっぱだめですかぁ。
    私が知らないだけかもと、一縷の望みというか希望をもってたのですが。


    >>もしできるのなら、やり方を教えていただきたく、何卒よろしくお願いいたします。
    > サーバーのフォルダを共有するしかないと思いますよ。
    セキュリティの関係でNGくらったのです。
    もっかい上司と相談してみます。

    ちなみに、chじゃなくてcdコマンドでしたね。。。恥ずかし///
違反を報告
引用返信
■35665 / ResNo.3)  Re[3]: ftp接続してファイルアップロード後、別フォルダにコピー
□投稿者/ kiku 一般人(1回)-(2025/03/24(Mon) 11:17:46)
  • アイコンNo35664に返信(みーちょさんの記事)
    >
    > >>ftp接続できないフォルダ参照はできないのでしょうか?
    >>できません。出来たら問題です。
    > あう、やっぱだめですかぁ。
    > 私が知らないだけかもと、一縷の望みというか希望をもってたのですが。

    FTPサーバ上に、常時起動しているサービスやアプリなどをおいて、
    そのアプリが、c:\ftp\test\aaaを監視して、
    追加された場合、D\bbbへコピーすることをすれば
    実現できそうです。
違反を報告
引用返信
■35666 / ResNo.4)  Re[3]: ftp接続してファイルアップロード後、別フォルダにコピー
□投稿者/ 魔界の仮面弁士 大御所(1588回)-(2025/03/24(Mon) 11:38:42)
  • アイコンNo35664に返信(みーちょさんの記事)
    > セキュリティの関係でNGくらったのです。
    > もっかい上司と相談してみます。
    1) そもそも何故、時代遅れの FTP が選択されているのかを確認した方が良いでしょう
    2) どうしても FTP が必要なら、存在はしているが列挙されない不可視ディレクトリを使って
     公開フォルダーを見せないようにすることもできます(とはいえ、FTP が脆弱であることは変わりません)
    3) サーバーによっては QUOTE サブコマンドを通じて、非標準の独自コマンドで通信できるケースもあります


    > 1 ftpサーバに接続してファイルをアップロード
    FTP (RFC959) はセキュリティ的に脆弱なので、
    FTPS (RFC4217) あるいは
    SFTP (RFC4251) を採用した方が望ましいと思いますよ。

    FTP は、パスワードは暗号化されずに平文で通信されるため、
    盗聴や改竄に対して脆弱であり、現在では推奨されないプロトコルです。

    FTPS の場合、通信の暗号化のために、認証局で署名されたサーバー証明書を必要とします。
    そのためランニングコストが発生しますが、IIS でもサポートされているプロトコルです。
    VB 側から FTPS で送受信するためには、FtpWebRequest クラス を使えます。
    開発のために、一時的に無償のオレオレ証明書でテストするならこんな感じです。
    https://www.chuken-engineer.com/entry/2019/09/25/135516

    SFTP の場合は SSH 上で FTP する方式であり、認証局への申請が不要となるため、
    追加費用が発生しません。個人的には SFTP を推奨しておきます。
    IIS ではサポートされていませんが、Windows Server でも OpenSSH などで導入可能です。
    .NET からの送受信には、SSH.NET が用いられることが多いです。
    https://sorceryforce.net/ja/tips/sftp-ssh-net-basic

    なお定例的な送受信であれば、VB にて実行する代わりに WinSCP を
    コマンドライン実行することで FTP/FTPS/SFTP 通信を行わせることもできます。
    https://winscp.net/eng/docs/lang:jp
違反を報告
引用返信
■35667 / ResNo.5)  Re[3]: ftp接続してファイルアップロード後、別フォルダにコピー
□投稿者/ KOZ 一般人(41回)-(2025/03/29(Sat) 16:36:46)
  • アイコンNo35664に返信(みーちょさんの記事)
    > セキュリティの関係でNGくらったのです。

    セキュリティということであれば、ftp より共有フォルダのほうが強固です。
    共有名の後ろに $ をつければエクスプローラーからは見えなくなりますし。

    Windows ではデフォルトでルートディレクトリが共有されているので
    適切な権限があれば直接さわることもできます。

    D:\bbb フォルダなら、\\サーバー名\D$\bbb という具合です。
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-5]






Mode/  Pass/


- Child Tree -