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

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

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



■記事リスト / ▼下のスレッド
■35604 / 親記事)  bitmapが保存できない
□投稿者/ K-1 一般人(1回)-(2024/05/03(Fri) 22:12:10)
  • アイコン環境/言語:[C#] 
    分類:[.NET] 

    画像ファイルに対し加工を行うコードを作っています。
    画像ファイルを読み込み、バイト配列に変換して、バイト配列に対して加工を行い、画像ファイルとして保存するために以下のようなコードを書きました。

    // 画像読み込み
    Bitmap bitmap = new Bitmap(@"D:\temp\moto.bmp");

    /// Bitmapをバイト配列にする
    MemoryStream mms = new MemoryStream();
    bitmap.Save(mms, ImageFormat.Bmp);
    byte[] inputdata = mms.ToArray();
    mms.Close();
    mms.Dispose();

    MemoryStream ms = new MemoryStream(inputdata);
    Bitmap output_bitmap = new Bitmap(ms);
    ms.Close();
    ms.Dispose();

    output_bitmap.Save(@"D:\temp\ato.bmp", ImageFormat.Bmp);

    変数inputdataにはBITMAPフォーマットそのままのバイナリが展開されているとこまで確認したので、BITMAP-BYTE変換は問題ないと思います。
    問題は最後の
    output_bitmap.Save(@"D:\temp\ato.bmp", ImageFormat.Bmp);

    System.Runtime.InteropServices.ExternalException: 'GDI+ で汎用エラーが発生しました。'
    というエラーが出てしまいます。
    "D:\temp\ato.bmp"には54バイトのファイルが生成されており、powershellで「format-hex .\a.bmp」とダンプをとってみると変数inputdataの先頭54バイトと同じものがはいってるぽいです。

    この「'GDI+ で汎用エラーが発生しました。'」の対処法はないでしょうか。
違反を報告
引用返信

▽[全レス2件(ResNo.1-2 表示)]
■35605 / ResNo.1)  Re[1]: bitmapが保存できない
□投稿者/ KOZ 一般人(36回)-(2024/05/04(Sat) 01:13:53)
  • アイコン2024/05/04(Sat) 01:18:08 編集(投稿者)

    No35604に返信(K-1さんの記事)
    > System.Runtime.InteropServices.ExternalException: 'GDI+ で汎用エラーが発生しました。'
    > というエラーが出てしまいます。

    Bitmap を作成するときに使った Stream オブジェクトは破棄しないでください。

    Bitmap output_bitmap = new Bitmap(ms);
    output_bitmap.Save(@"D:\temp\ato.bmp", ImageFormat.Bmp);
    ms.Dispose();

    この順番であればOKです。

    あと、Stream に関しては Close = Dispose ですので、どちらか一方を実行するだけで良いです。

    Stream の実装
    https://referencesource.microsoft.com/#mscorlib/system/io/stream.cs,dc4ffe046b847b84
違反を報告
引用返信
■35606 / ResNo.2)  Re[2]: bitmapが保存できない
□投稿者/ K-1 一般人(2回)-(2024/05/04(Sat) 08:58:28)
  • アイコンNo35605に返信(KOZさんの記事)
    > 2024/05/04(Sat) 01:18:08 編集(投稿者)

    うまくいきました!
    想定通りの画像が保存されていることも確認しました。
    ありがとうございます。
解決み!
違反を報告
引用返信

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



■記事リスト / ▼下のスレッド / ▲上のスレッド
■35599 / 親記事)  特定ピクセルで画像を読み込みたい
□投稿者/ 午前の紅茶 一般人(1回)-(2024/05/01(Wed) 18:05:57)
  • アイコン環境/言語:[c#] 
    分類:[.NET] 

    Bitmap bitmap = new Bitmap(filename);
    と画像を読み込む処理があるのですが、読み込む画像はJPEGやPNG、BMPなどでピクセル深度もバラバラです。
    以後の処理のこともあるので、読み込まれたbitmapは24ビットなどに統一したいのですが、「24ビットで読み込む」ということはできないでしょうか。

    Bitmap bitmap = new Bitmap(filename);
    Bitmap bitmap24 = new Bitmap(bitmap.Width, bitmap.Height, PixelFormat.Format24bppRgb);

    こんな感じで24ビットのビットマップを作って読み込んだbitmapから貼り付けるというのも考えましたが、もうちょいスマートな方法はないでしょうか。

違反を報告
引用返信

▽[全レス2件(ResNo.1-2 表示)]
■35602 / ResNo.1)  Re[1]: 特定ピクセルで画像を読み込みたい
□投稿者/ Hongliang 大御所(651回)-(2024/05/02(Thu) 11:15:27)
  • アイコン標準ライブラリを使う限りは、特にほかの手段はなさそうですね。
    System.Windows.Media.Imagingの方だとFormatConvertedBitmapで変換部分は手軽に書けるようになってますが、結局一旦ロードしてから変換というのは変わりません。
違反を報告
引用返信
■35603 / ResNo.2)  Re[2]: 特定ピクセルで画像を読み込みたい
□投稿者/ 午前の紅茶 一般人(2回)-(2024/05/03(Fri) 10:50:25)
  • アイコンうーん、ないですか。
    仕方ないですね。
    ありがとうございます。
解決み!
違反を報告
引用返信

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



■記事リスト / ▼下のスレッド / ▲上のスレッド
■35596 / 親記事)  DataGridViewでAlt+Enterで改行したい
□投稿者/ aks 一般人(1回)-(2024/04/08(Mon) 20:13:16)
  • アイコン環境/言語:[.NET Framework4.8 C# Windows10 VS2022 ] 
    分類:[.NET] 

    お世話になります。
    
    DataGridViewで、エクセルのようにセルをAlt+Enterで改行させる事は可能でしょうか?
    Shift+Enterで改行しないように実装はできましたが、先に進めず困っておりましてご教授願います。
    よろしくお願いいたします。
    
    
    //DataGridViewの派生クラスを作成
    //デザイナーでtextboxの列を1つ追加済み。
    public class DataGridView_Kai : DataGridView
    {
        protected override bool ProcessCmdKey(ref Message msg, Keys KeysVal)
        {
            //Shift+Enterの同時押しを無効化
            if ((KeysVal & Keys.KeyCode) == Keys.Enter && (KeysVal & Keys.Modifiers) == Keys.Shift)
            {
                return true;
            }
    
            //Alt+Enterの同時押下時に改行。。。
            if ((KeysVal & Keys.KeyCode) == Keys.Enter && (KeysVal & Keys.Modifiers) == Keys.Alt)
            {
                  //テストでKeysValを0にしても、下のセルへ移動しますので、実装場所が違うのではないかと考えております。
    
            }
    
            return base.ProcessCmdKey(ref msg, KeysVal);
        }
    }
    
    public partial class Form1 : Form
    {
    
        public Form1()
        {
            InitializeComponent();
        }
    
        private void Form1_Load(object sender, EventArgs e)
        {
            dataGridView_Kai1.DefaultCellStyle.WrapMode  = DataGridViewTriState.True;
    
            dataGridView_Kai1.RowCount = 10;
        }
    }
    

違反を報告
引用返信

▽[全レス2件(ResNo.1-2 表示)]
■35597 / ResNo.1)  Re[1]: DataGridViewでAlt+Enterで改行したい
□投稿者/ KOZ 一般人(35回)-(2024/04/09(Tue) 00:38:33)
  • アイコン
    2024/04/10(Wed) 05:38:01 編集(投稿者)
    
    ■No35596に返信(aksさんの記事)
    > DataGridViewで、エクセルのようにセルをAlt+Enterで改行させる事は可能でしょうか?
    
    こんな感じでしょうか?
    
    public class DataGridView_Kai : DataGridView
    {
        protected override bool ProcessCmdKey(ref Message msg, Keys KeysVal) {
            if (IsCurrentCellInEditMode) {
                TextBox textBox = EditingControl as TextBox;
                if (textBox != null && textBox.Multiline) {
                    switch (KeysVal) {
                        case Keys.Enter | Keys.Shift:
                            return true;
                        case Keys.Enter | Keys.Alt:
                            string newLine = Environment.NewLine;
                            if (textBox.MaxLength == 0 ||
                                textBox.TextLength - textBox.SelectionLength + newLine.Length <= textBox.MaxLength) {
                                textBox.SelectedText = newLine;
                            }
                            return true;
                    }
                }
            }
            return base.ProcessCmdKey(ref msg, KeysVal);
        }
    }
    

違反を報告
引用返信
■35598 / ResNo.2)  Re[2]: DataGridViewでAlt+Enterで改行したい
□投稿者/ aks 一般人(2回)-(2024/04/13(Sat) 14:17:57)
  • アイコンKOZ様

    ご回答いただきありがとうございます。
    教えていただいた内容で試したところ解決しております。

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

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



■記事リスト / ▼下のスレッド / ▲上のスレッド
■35573 / 親記事)  Processクラスからbatファイル実行後、KILLできない
□投稿者/ あばば無人君 一般人(1回)-(2024/01/13(Sat) 05:19:30)
  • アイコン環境/言語:[Windows10(64bit/Home/22H2)、NET Framework-4.8.1、C#] 
    分類:[.NET] 

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

    掲題の件ですが、WinFormアプリを新規で用意し、
    画面に開始ボタン(button1)と停止ボタン(button2)を配置しました。

    開始ボタンを押下するとProcessクラスでbatファイルを実行し、
    その処理が終わる前に停止ボタンを押下するとProcessクラスの
    KILLを実行して強制終了させる、というシンプルなアプリです。

    その実装は以下となります。
    001 public partial class Form1 : Form
    002 {
    003 private Process myProcess;
    004
    005 public Form1()
    006 {
    007 InitializeComponent();
    008
    009 this.button1.Click += this.button1_Click;
    010
    011 this.button2.Click += this.button2_Click;
    012 this.button2.Enabled = false;
    013 }
    014
    015 private void button1_Click(object sender, EventArgs e)
    016 {
    017 // 開始ボタン:非活性 / 停止ボタン:活性
    018 SwitchButtonEnable(false);
    019
    020 // 10秒間スリープするだけのバッチを指定
    021 this.myProcess = new Process();
    022 this.myProcess.StartInfo.FileName = @".\Sample.bat";
    023
    024 // バッチ処理の終了時に発生させるイベント処理を指定
    025 // ※SynchronizingObjectプロパティに当画面のインスタンスを指定することで
    026 // このイベント処理はGUIスレッドで動作する
    027 this.myProcess.Exited += button2_Click;
    028 this.myProcess.EnableRaisingEvents = true;
    029 this.myProcess.SynchronizingObject = this;
    030
    031 // 開始
    032 this.myProcess.Start();
    033 }
    034
    035 private void button2_Click(object sender, EventArgs e)
    036 {
    037 // すでに当処理が実施済みなら何もしない
    038 if (this.myProcess == null) { return; }
    039
    040 // バッチ処理の終了時に発生させるイベント処理を削除
    041 this.myProcess.Exited -= button2_Click;
    042 this.myProcess.EnableRaisingEvents = false;
    043
    044 if (!this.myProcess.HasExited)
    045 {
    046 try
    047 {
    048 this.myProcess.Kill();
    049 }
    050 catch
    051 {
    052 // 停止ボタン押下直後にプロセスが終了したケースを想定
    053 // よって例外をキャッチしても何もしていない
    054 }
    055 }
    056
    057 // 怒涛のインスタンス開放
    058 this.myProcess.Refresh();
    059 this.myProcess.Close();
    060 this.myProcess.Dispose();
    061 using (this.myProcess) { }
    062
    063 // 閉じるボタン押下とプロセス終了イベントがほぼ同時に発生した時、
    064 // 当関数の処理が2回実行されない様にnullを設定しておく
    065 this.myProcess = null;
    066
    067 // 開始ボタン:活性 / 停止ボタン:非活性
    068 SwitchButtonEnable(true);
    069 }
    070
    071 private void SwitchButtonEnable(bool isEnable)
    072 {
    073 button1.Enabled = isEnable;
    074
    075 button2.Enabled = !isEnable;
    076 }
    077 }

    以上を踏まえて、このアプリ、停止ボタンを押下しても
    起動したbatが終了しません。
    コード22行目で指定している「Sample.bat」は
     timeout /T 10
    というスリープ処理が1行あるだけの物となっています。

    しかもコード22行目の起動対象ファイルを
    ・メモ帳 "C:\Windows\System32\notepad.exe"
    ・エクセルファイル ".\適当.xlsx"
    などにした場合は期待通り終了します。

    ここから質問ですが、
    @batだけ終了しないのは何故か?
    Abatを終了させる方法はあるか?
    が分かる方、いらっしゃいましたらお力添えいただきたいです。
    ※特にAが知りたいです

    長くなりましたが宜しくお願い致します。


違反を報告
引用返信

▽[全レス2件(ResNo.1-2 表示)]
■35574 / ResNo.1)  Re[1]: Processクラスからbatファイル実行後、KILLできない
□投稿者/ Azulean 大御所(545回)-(2024/01/13(Sat) 14:01:27)
  • アイコンNo35573に返信(あばば無人君さんの記事)
    > コード22行目で指定している「Sample.bat」は
    >  timeout /T 10
    > というスリープ処理が1行あるだけの物となっています。

    たとえば、バッチファイルを「pause」として入力待ちだけにすれば、このコードでも問題なく動作すると思います。

    timeout の場合、cmd.exe とは別に timeout.exe プロセスが立ち上がります。
    今回のコードでは cmd.exe は終了できますが、子プロセスである timeout.exe は生き残っていますので、止まりません。


    ご自身で子プロセスの列挙と停止といった処理を作る必要があるそうです。
    https://stackoverflow.com/a/32405627
違反を報告
引用返信
■35575 / ResNo.2)  Re[2]: Processクラスからbatファイル実行後、KILLできない
□投稿者/ あばば無人君 一般人(2回)-(2024/01/13(Sat) 17:01:14)
  • アイコンNo35574に返信(Azuleanさんの記事)

    > ■No35573に返信(あばば無人君さんの記事)
    > たとえば、バッチファイルを「pause」として入力待ちだけにすれば、このコードでも問題なく動作すると思います。
    >
    > timeout の場合、cmd.exe とは別に timeout.exe プロセスが立ち上がります。
    > 今回のコードでは cmd.exe は終了できますが、子プロセスである timeout.exe は生き残っていますので、止まりません。

    ご記載のとおり、pauseコマンドですと期待通り終了しましたし、
    FTPコマンド(ftp.exe)だとtimeoutと同じく終了しませんでした。

    なるほど、別プロセスですか。盲点でした。


    > ご自身で子プロセスの列挙と停止といった処理を作る必要があるそうです。
    > https://stackoverflow.com/a/32405627

    参考リンク、ありがとうございます。時間ができたらサンプルを作ってみます。

    今回は客先指定のアプリが手元に無かったのでbatのtimeoutで代用していましたが、
    客先指定のアプリがKILLで終了するのは分かっているので
    本件はこれで解決とさせていただきます。

    ご回答ありがとうございました。

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

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



■記事リスト / ▲上のスレッド
■35571 / 親記事)  画面遷移(モーダルとモードレス)
□投稿者/ ねずみっくす 一般人(1回)-(2023/12/25(Mon) 18:37:27)
  • アイコン環境/言語:[Windows10 64bit VS2022 C# .NET7 ] 
    分類:[.NET] 

    Windows Formでアプリを開発しております。

    さっそくですが、

    親フォームより、子フォームを呼ぶときには、
    モードレスで呼びだしています。

    ko.show();

    そうすると、子フォームを複数立ち上げ、
    さらに親フォームも操作できますよね?

    その一つの子フォームより、孫フォームを呼び出すときに
    モーダルでフォームを呼ぶと

    mago.showDialog(this);

    他のすべてのフォームを操作できなくなりますが、
    そういうものでしょうか?

    なんとか親フォームだけでも(贅沢を言えば他の子フォームも)
    操作できるようになりませんか?

    子フォームをプロセス起動にでもすれば、要件を満たせそう
    ではありますが、なんとかプロセス起動以外でできないかと
    いろいろ調べれいます。
    みなさんのお知恵を拝借できればと思います。

    宜しくお願いします。

違反を報告
引用返信

▽[全レス2件(ResNo.1-2 表示)]
■35572 / ResNo.1)  Re[1]: 画面遷移(モーダルとモードレス)
□投稿者/ Azulean 大御所(544回)-(2023/12/25(Mon) 21:50:43)
  • アイコンNo35571に返信(ねずみっくすさんの記事)
    > 他のすべてのフォームを操作できなくなりますが、
    > そういうものでしょうか?

    そういうものです。

    > なんとか親フォームだけでも(贅沢を言えば他の子フォームも)
    > 操作できるようになりませんか?

    ならないので、孫 Form を Show でモードレス表示しつつ、子 Form の Enabled プロパティでなんとかしてください。

    ただし、その状態では親 Form を操作できてしまうので、親 Form の×ボタンを押されたときにどう振る舞うべきかも自分で考え、自分で実装しきる必要があります。

    こういった不思議な動きは、エンドユーザーからもわかりづらいので、要件自体見直した方が良いと思います。
違反を報告
引用返信
■35576 / ResNo.2)  Re[1]: 画面遷移(モーダルとモードレス)
□投稿者/ shu 大御所(505回)-(2024/01/16(Tue) 00:50:26)
  • アイコンNo35571に返信(ねずみっくすさんの記事)

    ShowでTopMost=True
    の動きでよいということですか?
違反を報告
引用返信

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






Mode/  Pass/


- Child Tree -