C# と VB.NET の質問掲示板
ASP.NET、C++/CLI、Java 何でもどうぞ
掲示板トップ
C# と VB.NET 入門
新規作成
利用方法
ツリー表示
トピック表示
ランキング
記事検索
過去ログ
ログ内検索
キーワードを複数指定する場合は 半角スペース で区切ってください。
検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
[返信]をクリックすると返信ページへ移動します。
キーワード
/
検索条件
/
(AND)
(OR)
検索範囲
/
(現在のログ)
(全過去ログ)
(過去ログ1)
(過去ログ2)
(過去ログ3)
(過去ログ4)
(過去ログ5)
(過去ログ6)
(過去ログ7)
(過去ログ8)
(過去ログ9)
(過去ログ10)
(過去ログ11)
(過去ログ12)
(過去ログ13)
(過去ログ14)
(過去ログ15)
(過去ログ16)
(過去ログ17)
(過去ログ18)
(過去ログ19)
(過去ログ20)
(過去ログ21)
(過去ログ22)
(過去ログ23)
(過去ログ24)
(過去ログ25)
(過去ログ26)
(過去ログ27)
(過去ログ28)
(過去ログ29)
(過去ログ30)
(過去ログ31)
(過去ログ32)
(過去ログ33)
(過去ログ34)
(過去ログ35)
(過去ログ36)
(過去ログ37)
(過去ログ38)
(過去ログ39)
(過去ログ40)
(過去ログ41)
(過去ログ42)
(過去ログ43)
(過去ログ44)
(過去ログ45)
(過去ログ46)
(過去ログ47)
(過去ログ48)
(過去ログ49)
(過去ログ50)
(過去ログ51)
(過去ログ52)
(過去ログ53)
(過去ログ54)
(過去ログ55)
(過去ログ56)
(過去ログ57)
(過去ログ58)
(過去ログ59)
(過去ログ60)
(過去ログ61)
(過去ログ62)
(過去ログ63)
(過去ログ64)
(過去ログ65)
(過去ログ66)
(過去ログ67)
(過去ログ68)
(過去ログ69)
(過去ログ70)
(過去ログ71)
(過去ログ72)
(過去ログ73)
(過去ログ74)
(過去ログ75)
(過去ログ76)
(過去ログ77)
(過去ログ78)
(過去ログ79)
(過去ログ80)
(過去ログ81)
(過去ログ82)
(過去ログ83)
(過去ログ84)
(過去ログ85)
(過去ログ86)
(過去ログ87)
(過去ログ88)
(過去ログ89)
(過去ログ90)
(過去ログ91)
(過去ログ92)
(過去ログ93)
(過去ログ94)
(過去ログ95)
(過去ログ96)
(過去ログ97)
(過去ログ98)
(過去ログ99)
(過去ログ100)
(過去ログ101)
(過去ログ102)
(過去ログ103)
(過去ログ104)
(過去ログ105)
(過去ログ106)
(過去ログ107)
(過去ログ108)
(過去ログ109)
(過去ログ110)
(過去ログ111)
(過去ログ112)
(過去ログ113)
(過去ログ114)
(過去ログ115)
(過去ログ116)
(過去ログ117)
(過去ログ118)
(過去ログ119)
(過去ログ120)
(過去ログ121)
(過去ログ122)
(過去ログ123)
(過去ログ124)
(過去ログ125)
(過去ログ126)
(過去ログ127)
(過去ログ128)
(過去ログ129)
(過去ログ130)
(過去ログ131)
(過去ログ132)
(過去ログ133)
(過去ログ134)
(過去ログ135)
(過去ログ136)
(過去ログ137)
(過去ログ138)
(過去ログ139)
(過去ログ140)
(過去ログ141)
(過去ログ142)
(過去ログ143)
(過去ログ144)
(過去ログ145)
(過去ログ146)
(過去ログ147)
(過去ログ148)
(過去ログ149)
(過去ログ150)
(過去ログ151)
(過去ログ152)
(過去ログ153)
(過去ログ154)
(過去ログ155)
(過去ログ156)
(過去ログ157)
(過去ログ158)
(過去ログ159)
(過去ログ160)
(過去ログ161)
(過去ログ162)
(過去ログ163)
(過去ログ164)
(過去ログ165)
(過去ログ166)
(過去ログ167)
(過去ログ168)
(過去ログ169)
(過去ログ170)
(過去ログ171)
(過去ログ172)
(過去ログ173)
(過去ログ174)
(過去ログ175)
(過去ログ176)
(過去ログ177)
(過去ログ178)
(過去ログ179)
強調表示
/
ON
(自動リンクOFF)
結果表示件数
/
20件
30件
40件
50件
100件
記事No検索
/
ON
大文字と小文字を区別する
No.89447 の関連記事表示
ヒット / 7件
(1-7 を表示)
<<
0
>>
■89447
DataGridViewのカスタム列セル外表示
□投稿者/ Mimio
@
-
(2018/11/29(Thu) 13:17:39)
分類:[.NET 全般]
C# Windows Form アプリケーション(Vidual Studio 2017)
DataGridViewのカスタム列型作成に関する質問です。
(NETに関しては、自己流学習のため、ほぼ初心者ですので、よろしくお願いします。)
TimeSpanに対応する24時超(26:30など)の時刻を表示できるユーザーコントロールを作成しました。TextBox(時)+TextBox(分)+Button+(通常非表示パネル+Button群)です。Buttonは通常非表示のパネルと表示し、入退室で打刻した他の時刻を表示し、選択でTimeSpanに入れるというものです。
ユーザーコントロールとカスタムColumnはできたつもりでいましたが、実際に動かすとDataGridViewのCell内にパネルが表示されてしまいいます。
質問は、この通常非表示のパネルをセルの外に表示したいというものです。
MonthCalendarやComboBoxをカスタム列型としたときに、右ボタンをクリックするとセル外にカレンダやList部分が表示されるので、何らかの設定でできるのではないかと思っています。
よろしくお願いします。
親記事 /過去ログ154より /
関連記事表示
削除チェック/
■89448
Re[1]: DataGridViewのカスタム列セル外表示
□投稿者/ 魔界の仮面弁士 -
(2018/11/29(Thu) 13:41:50)
■
No89447
(Mimio さん) に返信
> 実際に動かすとDataGridViewのCell内にパネルが表示されてしまいいます。
DataGridViewCell 継承クラスのサイズは、常にセルサイズに収まるようにします。
https://social.msdn.microsoft.com/Forums/vstudio/ja-JP/8cd309b3-b2fc-480d-80b8-9f7cf56ecf22/
> MonthCalendarやComboBoxをカスタム列型としたときに、
> 右ボタンをクリックするとセル外にカレンダやList部分が表示されるので、
ComboBox でいえば、DropDownStyle = Simple スタイルでフォームに貼った場合、
テキスト部とリスト部を合わせた領域が、そのコントロールのサイズとして扱われますよね。
一方、DropDownStyle = DropDown / DropDownList の場合、
デザイン時、コントロールのサイズにリスト部は含まれていませんよね。
実行時で比較してみると、Simple スタイルの場合は
リスト部が親コントロール(Form など)内から出られませんが、
DropDown や DropDownList スタイルの場合には
リスト部が Form からはみ出していても表示できますよね。
これは、ドロップダウンやポップアップ表示するタイプのコントロールの場合、
追加で表示される領域は、そのコントロールの一部ではなく、
別のウィンドウが表示されているためである、と考えられます。
> 何らかの設定でできるのではないかと思っています。
パネル部はセル内に配置するのではなく、新規に Form を用意し、
そこに移動してみてください。
このフォームの TopLevel プロパティは false にしておきます(既定で false です)。
そして、TimeSpan セルがパネル入力モードになった段階で、
この子フォームを表示するようなコードを記述し、フォーカスをそこに移します。
あとは、コントロールからフォーカスが Leave したときに
そのフォームが消えるようにすれば、
ドロップダウンスタイルと同じ見た目になるかと。
記事No.89447 のレス /過去ログ154より /
関連記事表示
削除チェック/
■89458
Re[2]: DataGridViewのカスタム列セル外表示
□投稿者/ mimio
@
-
(2018/11/30(Fri) 03:48:56)
■
No89448
(魔界の仮面弁士 さん) に返信
余計なことを書くと怒られるかも知れませんが、
直接ご回答頂いたことはありませんでしたが、
以前らご高名な魔界の仮面弁士様にはお世話になっております。
今後も一層のご活躍をお祈り致します。
> ■
No89447
(Mimio さん) に返信
>>実際に動かすとDataGridViewのCell内にパネルが表示されてしまいいます。
> DataGridViewCell 継承クラスのサイズは、常にセルサイズに収まるようにします。
>
https://social.msdn.microsoft.com/Forums/vstudio/ja-JP/8cd309b3-b2fc-480d-80b8-9f7cf56ecf22/
じっくりを読んでみることにします。
>>MonthCalendarやComboBoxをカスタム列型としたときに、
>>右ボタンをクリックするとセル外にカレンダやList部分が表示されるので、
> ComboBox でいえば、DropDownStyle = Simple スタイルでフォームに貼った場合、
> テキスト部とリスト部を合わせた領域が、そのコントロールのサイズとして扱われますよね。
>
> 一方、DropDownStyle = DropDown / DropDownList の場合、
> デザイン時、コントロールのサイズにリスト部は含まれていませんよね。
>
>
> 実行時で比較してみると、Simple スタイルの場合は
> リスト部が親コントロール(Form など)内から出られませんが、
> DropDown や DropDownList スタイルの場合には
> リスト部が Form からはみ出していても表示できますよね。
Simple スタイルのテストは行いませんでしたが、なるほどです。
> これは、ドロップダウンやポップアップ表示するタイプのコントロールの場合、
> 追加で表示される領域は、そのコントロールの一部ではなく、
> 別のウィンドウが表示されているためである、と考えられます。
>
別のウィンドウが表示されている?
DataGridViewCellの設定でできることではないとお考えなのですね。
>
>>何らかの設定でできるのではないかと思っています。
> パネル部はセル内に配置するのではなく、新規に Form を用意し、
> そこに移動してみてください。
> このフォームの TopLevel プロパティは false にしておきます(既定で false です)。
>
> そして、TimeSpan セルがパネル入力モードになった段階で、
> この子フォームを表示するようなコードを記述し、フォーカスをそこに移します。
>
> あとは、コントロールからフォーカスが Leave したときに
> そのフォームが消えるようにすれば、
> ドロップダウンスタイルと同じ見た目になるかと。
ユーザーコントロールに子フォームをくっつけることができるとは思いませんでした。
実際に行ってみます。
ありがとうございました。
記事No.89447 のレス /過去ログ154より /
関連記事表示
削除チェック/
■89459
Re[3]: DataGridViewのカスタム列セル外表示
□投稿者/ mimio
@
-
(2018/11/30(Fri) 05:06:38)
今まで、ユーザーコントロールにベタベタパネル等を貼り付けていましたが、
今回のことで、間違ったやり方であった事が分かりました。
ありがとうございました。
記事No.89447 のレス / END /過去ログ154より /
関連記事表示
削除チェック/
■89469
Re[4]: DataGridViewのカスタム列セル外表示
□投稿者/ mimio -
(2018/11/30(Fri) 13:37:38)
アローボタンクリックイベントに次のように書きました。
TimeSpanSelectForm sForm = new TimeSpanSelectForm();
sForm.TopLevel = false;
sForm.FormBorderStyle = FormBorderStyle.None;
this.Controls.Add(sForm);
sForm.Location = new Point(20, TimefLPanel.Height); //入力部のパネルの高さ分下に下げる
sForm.Show();
sForm.BringToFront();
DataGridViewでは
this.Controls.Add(sForm);
だと、thisがIDataGridViewEditingControlとなり、
DataGridViewのCell枠内に表示されるので、
this.Parent.Parent.Controls.Add(sForm);
としました。
Location位置を直せば、
this.Controls.Add(sForm);
のthisは、IDataGridViewEditingControlなので、
DataGridViewのCell内表示となりました。
記事No.89447 のレス / END /過去ログ154より /
関連記事表示
削除チェック/
■89470
Re[5]: DataGridViewのカスタム列セル外表示
□投稿者/ 魔界の仮面弁士 -
(2018/11/30(Fri) 14:27:56)
2018/11/30(Fri) 15:04:31 編集(投稿者)
■
No89469
(mimio さん) に返信
> sForm.TopLevel = false;
ごめんなさい!
先の
No89448
の回答で、TopLevel の true/false を逆に書いていました…。
自分のイメージしていた処理は
sForm.TopLevel = true; // 初期値で既に true
sForm.Deactivate += delegate { sForm.Close(); };
sForm.Show(Form.ActiveForm);
という物です。(子コントロールとするわけではない)
Deactivate イベントは、sForm 以外の場所をクリックした場合に
キャンセル扱いとしてパネルフォームを閉じるために挿入しています。
ただしこの方法だと、ActiveForm がパネルフォーム側に移ってしまうのが難点です。
また、上記は親フォームがモードレスであることを想定しています。
ShowDialog で表示されたモーダル ウィンドウ上にある DataGridView からも
一応呼び出せますが、その場合、そのモーダルウィンドウの
呼び出し元(オーナーウィンドウ)をクリックした場合は、
Deactivate イベントが発生しません。
(モーダルフォーム自身をクリックした場合は、Deactivate が発生する)
> DataGridViewのCell枠内に表示されるので、
> this.Parent.Parent.Controls.Add(sForm);
> としました。
子コントロールとして配置する場合は、こういう風にも書けます。
DataGridView 上に配置したい場合
// IDataGridViewEditingControl.EditingControlDataGridView プロパティ
this.EditingControlDataGridView.Controls.Add(sForm);
親 Form 上に配置したい場合
// Control.FindForm メソッド
this.FindForm().Controls.Add(sForm);
ただしこの方法をとる場合、Controls.Add メソッドに渡すのは
TopLevel = false な Form ではなく、Panel 等の方が良さそうです。
記事No.89447 のレス /過去ログ154より /
関連記事表示
削除チェック/
■89496
Re[6]: DataGridViewのカスタム列セル外表示
□投稿者/ mimio -
(2018/11/30(Fri) 18:04:05)
■
No89470
(魔界の仮面弁士 さん) に返信
> 2018/11/30(Fri) 15:04:31 編集(投稿者)
>
> ■
No89469
(mimio さん) に返信
>>sForm.TopLevel = false;
>
> ごめんなさい!
> 先の
No89448
の回答で、TopLevel の true/false を逆に書いていました…。
>
> 自分のイメージしていた処理は
> sForm.TopLevel = true; // 初期値で既に true
> sForm.Deactivate += delegate { sForm.Close(); };
> sForm.Show(Form.ActiveForm);
> という物です。(子コントロールとするわけではない)
>
> Deactivate イベントは、sForm 以外の場所をクリックした場合に
> キャンセル扱いとしてパネルフォームを閉じるために挿入しています。
>
> ただしこの方法だと、ActiveForm がパネルフォーム側に移ってしまうのが難点です。
>
> また、上記は親フォームがモードレスであることを想定しています。
>
> ShowDialog で表示されたモーダル ウィンドウ上にある DataGridView からも
> 一応呼び出せますが、その場合、そのモーダルウィンドウの
> 呼び出し元(オーナーウィンドウ)をクリックした場合は、
> Deactivate イベントが発生しません。
> (モーダルフォーム自身をクリックした場合は、Deactivate が発生する)
>
>
>>DataGridViewのCell枠内に表示されるので、
>>this.Parent.Parent.Controls.Add(sForm);
>>としました。
>
> 子コントロールとして配置する場合は、こういう風にも書けます。
>
>
> DataGridView 上に配置したい場合
> // IDataGridViewEditingControl.EditingControlDataGridView プロパティ
> this.EditingControlDataGridView.Controls.Add(sForm);
>
> 親 Form 上に配置したい場合
> // Control.FindForm メソッド
> this.FindForm().Controls.Add(sForm);
>
>
> ただしこの方法をとる場合、Controls.Add メソッドに渡すのは
> TopLevel = false な Form ではなく、Panel 等の方が良さそうです。
いろいろな方法があるんですね。
いくつか試してみて、最も良さそうなものを探してみます。
しばらく、プログラミングから離れますので、
結果はかなり後になります。
記事No.89447 のレス /過去ログ154より /
関連記事表示
削除チェック/
<<
0
>>
パスワード/
-
Child Tree
-