読者です 読者をやめる 読者になる 読者になる

Windows

Linqで項目間に区切りを入れる

LinqでIEnumerableの各項目の間に区切りを入れるメソッドを C# で作ってみた。

Windowsでのバックアップ

Windowsでファイルをバックアップするには xcopy が便利。こんなバッチファイルを作成しておいて、実行すればよい。 set SOURCE=C:\Source set DESTINATION=D:\Backup REM /C: コピー時のエラーを無視する REM /D: コピー先に同名のファイルが存在する場合に…

参照型と値型のEquals

参照型と値型での Object.Equals メソッド の動作の違い。 参照型: 同一オブジェクトならば true 値型: 保持している値が同じならば true using System; namespace EqualForValueTypeAndReferenceType { class Program { static void Main(string[] args) { …

DataGridView の CheckBox に Text も表示する。

DataGridView ではチェックボックスだけが表示されテキストを表示できない。そこでチェックボックスに加えて、テキストも表示できるようにしてみた。DataGridViewCheckBoxCell クラスを継承し、テキストも表示できる CheckBoxAndTextCell クラスを作成する。…

コントロールの背景を透過色にする

コントロールの背景を透過色にするには、 コントロールの BackColor プロパティに Color.Transparent を設定する。 using System; using System.Drawing; using System.Windows.Forms; namespace TransparentLabel { public partial class Form1 : Form { pu…

DataGridView の行や列に区切りを入れる

DataGridView の行や列に区切りを入れるときは、 DataGridViewColumn.DividerWidth DataGridViewRow.DividerHeight を設定する。 using System; using System.Windows.Forms; namespace DataGridViewDividerWidthSample { public partial class Form1 : Form…

DataGridView の描画が遅いときに気をつけること

DataGridView で、 AutoSizeColumnsMode AutoSizeRowsMode ColumnHeadersHeightSizeMode のプロパティが、自動に設定されているとき、 行や列の追加 セルに値を設定 すると、描画が遅くなる。以下の例では、50 x 50 で 9.2 秒かかった。 using System; using…

マウスやキーボードでの範囲選択

マウスやキーボードで範囲を選択する方法。 マウスでドラッグする。 のが普通だが、ボタンを押したままマウスを動かすのは大変なので、 シフトキーを押しながら、 範囲の終わりをマウスでクリック 矢印キー・Homeキー・Endキーで範囲を拡げる という方法もあ…

DataGridView のあるセルの境界線スタイルを変更する

DataGridView のあるセルの境界線スタイルを変更するには、 CellPainting イベント で、 変更したいセルの AdvancedBorderStyle を設定する。 次のプログラムは、セル (1, 1) の境界線を DataGridViewAdvancedCellBorderStyle.InsetDouble に設定する。e.Adv…

UserControl のキャプション用ラベル

UserControl のキャプションとして使うラベル。 親コントロール内にフォーカスがあるかないかで、背景色を変える。 背景色は、グラデーションで表示する。 using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms…

TextBox のサイズを内容に応じて設定する

TextBox のサイズを内容に応じて設定するには、TextRenderer クラスの MeasureText メソッドで表示サイズを計算し、その値を TextBox に設定する。TextBox のサイズは境界を含んでいる。そのため BorderStyle が None 以外の場合、計算したサイズをそのまま…

ポップアップから続けてポップアップを表示する

ポップアップパネル - プログラマのメモ書きtt195361.hatenablog.comで表示したポップアップからさらにポップアップを表示すると、もともと表示していたポップアップが閉じてしまう。これを閉じないようにするには ToolStripDropDown.OwnerItem プロパティ …

DataGridView.AutoSizeColumnsMode を Fill にしたときの動作

DataGridView の AutoSizeColumnsMode プロパティ を DataGridViewAutoSizeColumnsMode.Fill に設定したときの動作について。 行の横幅は、ちょうど DataGridView の幅になる。 各カラムの幅は、DataGridViewColumn.FillWeight プロパティ で設定した割合に…

Padding と Margin の違い

System.Windows.Forms.Control の Padding プロパティと Margin プロパティの違いは、 Padding は Control の中に空けるスペース。 Margin は Control の外に空けるスペース。 以下は注意点。 Dock プロパティでドッキングしたコントロールの Margin は使わ…

ポップアップパネル

ポップアップパネルの作り方。ポップアップパネルは、 パネル外をクリックすると閉じる。 表示してもフォーカスは親フォームに残る。 というもの。手順は、 中身として表示するコントロールを含む ToolStripControlHost を作成し、 ToolStripDropDown を作成…

DataGridView での SetCurrentCellAddressCore 関数への再入呼び出しエラー

DataGridView クラス の CellEnter イベント で、選択されたセルを別のセルに変更するために、 private void dataGridView1_CellEnter(Object sender, DataGridViewCellEventArgs e) { dataGridView1[columnIndex, rowIndex].Selected = true; } を実行した…

DataGridView への行追加時の "セルテンプレートが指定されていません"

DataGridView クラス の Rows.Add メソッド で行を追加しようとしたら、 DataGridView コントロールの列のうち少なくとも 1 つにセルテンプレートが指定されていません。 というエラーが発生した。DataGridViewColumn.CellTemplate プロパティ の説明にある…