C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

RGBを入力するためのカスタムコントロール

[トピック内 14 記事 (1 - 14 表示)]  << 0 >>

■90372 / inTopicNo.1)  RGBを入力するためのカスタムコントロール
  
□投稿者/ ちょろQ (1回)-(2019/03/05(Tue) 12:28:13)

分類:[.NET 全般] 


VB.NETを使っており、
RGBを入力するためのカスタムコントロールを作製したいと考えています。

具体的には、
NumericUpDownが3個、横に並んだようなものを作りたいのですが
どのようにすれば良いですか?


あるいは、既存のコントロールで使えそうなものってありますでしょうか?

引用返信 編集キー/
■90373 / inTopicNo.2)  Re[1]: RGBを入力するためのカスタムコントロール
□投稿者/ 魔界の仮面弁士 (2082回)-(2019/03/05(Tue) 12:37:51)
No90372 (ちょろQ さん) に返信
> VB.NETを使っており、
> RGBを入力するためのカスタムコントロールを作製したいと考えています。

標準の ColorDialog クラスでは、
RGB 値をテキストボックスで表現しているようです。


Using dlg As New ColorDialog()
 dlg.FullOpen = True
 If dlg.ShowDialog() = DialogResult.OK Then
  TextBox1.BackColor = dlg.Color
 End If
End Using



> 具体的には、
> NumericUpDownが3個、横に並んだようなものを作りたいのですが
> どのようにすれば良いですか?
UserControl を用意して、そこに NumeriUpDown を並べてみてください。
また、UserControl に対して、プロパティ・メソッド・イベント等も追加実装する必要があります。

たとえばフォームから値を読み書きする際、入力した RGB 値を個別に分けて
Red , Green, Blue という Integer なプロパティで管理するのか、
あるいは、Color プロパティとして読み書きできるようにするのかなど。
引用返信 編集キー/
■90374 / inTopicNo.3)  Re[2]: RGBを入力するためのカスタムコントロール
□投稿者/ ちょろQ (3回)-(2019/03/05(Tue) 12:47:21)
ありがとうございます。
NumeriUpDown を並べるというところまでは分かりました。

あとは、

プロパティ・メソッド・イベント
なのですが、
これの作り方が分かりません
どこのwebページを参考にすれば良いですか?


引用返信 編集キー/
■90375 / inTopicNo.4)  Re[3]: RGBを入力するためのカスタムコントロール
□投稿者/ ちょろQ (4回)-(2019/03/05(Tue) 12:48:43)
あと、

Red , Green, Blue という Integer なプロパティで管理する
のではなく、


Color プロパティとして読み書きできるようにしたいと考えています。

引用返信 編集キー/
■90376 / inTopicNo.5)  Re[3]: RGBを入力するためのカスタムコントロール
□投稿者/ 魔界の仮面弁士 (2083回)-(2019/03/05(Tue) 13:01:00)
No90374 (ちょろQ さん) に返信
> プロパティ・メソッド・イベント
> なのですが、
> これの作り方が分かりません

メソッドやプロパティの作り方は、
UserControl だろうと Form だろうと、本質的には変わりません。


Function 〜 End Function や
Property 〜 End Property の作り方が分からない状態なら、
まずはコントロールの自作に入る前に、
入門書等を一通り学んでから手がけた方が良いかも…。



No90375 (ちょろQ さん) に返信
> Red , Green, Blue という Integer なプロパティで管理する
> のではなく、
> Color プロパティとして読み書きできるようにしたいと考えています。

NumericUpDown の Value プロパティは Decimal 型なので、
まずはそれらを Byte 型に変換してください。

あとはそれらを Color.FromRgb(Byte, Byte, Byte) メソッドに渡せば
色情報を Color 構造体にすることができます。


逆に、Color プロパティに設定された色情報を、NumericUpDown に渡すためには、
Color 構造体の R プロパティ、G プロパティ、B プロパティにて分解できます。
引用返信 編集キー/
■90377 / inTopicNo.6)  Re[4]: RGBを入力するためのカスタムコントロール
□投稿者/ ちょろQ (6回)-(2019/03/05(Tue) 14:01:13)
実際使ってみると大体使い方が分かりました。

一つ分からないのですが、
ユーザーコントロールをフォーム上に配置し、
そのユーザーコントロール内のいずれかのコントロールに変更がなされた場合に
アクションを起こしたいのですが
NumericUpDown3.ValueChanged
のようなものが見当たらないのですが
どのようにすれば良いですか?

Usefcontrol1.changed
みたいなものってどうやってやりますか?
引用返信 編集キー/
■90378 / inTopicNo.7)  Re[5]: RGBを入力するためのカスタムコントロール
□投稿者/ 魔界の仮面弁士 (2084回)-(2019/03/05(Tue) 14:39:33)
No90377 (ちょろQ さん) に返信
> ユーザーコントロールをフォーム上に配置し、
> そのユーザーコントロール内のいずれかのコントロールに変更がなされた場合に
> アクションを起こしたいのですが
> NumericUpDown3.ValueChanged
> のようなものが見当たらないのですが
> どのようにすれば良いですか?

『Public Event ColorChanged As EventHandler』などを自前で用意してください。

イベントを発生させるためには、変更処理時に
「RaiseEvent ColorChanged(Me, EventArgs.Empty)」と呼び出します。



ついでに、デザイン時にコントロールをダブルクリックした時に、
イベントハンドラが自動生成されるよう、UserControl の先頭に
DefaultEventAttribute を付与しておくと良いでしょう。



Imports System.ComponentModel

' <DefaultProperty("Color")> _
<DefaultEvent("ColorChanged")> _
Public NotInheritable Class UserControl1
引用返信 編集キー/
■90383 / inTopicNo.8)  Re[6]: RGBを入力するためのカスタムコントロール
□投稿者/ ちょろQ (7回)-(2019/03/05(Tue) 18:20:21)
ありがとうございます。
うまくいきました。

ところで、
TableLayoutPanelを使って
3つのNumericUpDownを横に並べているのですが
ユーザーコントロール編集画面上では、
マージンはほぼなく配置してあるにも拘わらず、
フォーム上にそのコントロールを配置すると
周りのかなりマージンができてしまいます。
カスタムコントロールを使わずに
普通にNumericUpDownを並べるだけだとこのようなマージンはほとんど発生しないのですが。。
このマージンをなくすにはどうしたら良いですか?

引用返信 編集キー/
■90384 / inTopicNo.9)  Re[7]: RGBを入力するためのカスタムコントロール
□投稿者/ 魔界の仮面弁士 (2086回)-(2019/03/05(Tue) 18:41:56)
No90383 (ちょろQ さん) に返信
> TableLayoutPanelを使って
> 3つのNumericUpDownを横に並べているのですが

色指定なら、NumericUpDown.Hexadecimal を
切り替えられるようなプロパティもあると良さそう。


> ユーザーコントロール編集画面上では、
> マージンはほぼなく配置してあるにも拘わらず、
> フォーム上にそのコントロールを配置すると
> 周りのかなりマージンができてしまいます。

余白に影響するところとしては、このあたり。

NumericUpDown コントロール
 ・Margin プロパティ
 ・Anchor プロパティ
 ・Dock プロパティ

TableLayoutPanel コントロール
 ・CellBorderStyle プロパティ
 ・Padding プロパティ
引用返信 編集キー/
■90385 / inTopicNo.10)  Re[8]: RGBを入力するためのカスタムコントロール
□投稿者/ ちょろQ (8回)-(2019/03/05(Tue) 18:53:04)
 ・Dock プロパティ

 ・CellBorderStyle プロパティ
この辺りは全てnoneになっていました。

 ・Padding プロパティ
もゼロです。

 ・Margin プロパティ
をゼロにするとかなりましになりましたが
まだ少しだけマージンが残っています。


あと、ちなみに、
ユーザーコントロール内の
Numericupdownのmaximumやminimumを
元のフォームのコード上から編集するにはどうしたら良いですか?

引用返信 編集キー/
■90386 / inTopicNo.11)  Re[9]: RGBを入力するためのカスタムコントロール
□投稿者/ 魔界の仮面弁士 (2087回)-(2019/03/05(Tue) 19:14:35)
No90385 (ちょろQ さん) に返信
> ゼロにするとかなりましになりましたが

どのような配置なのかにもよりますが、セル幅一杯にしたいなら、
子コントロール側を Anchor = None / Dock = Fill / Margin = 0,0,0,0 にします。

ただしこれでも、NumericUpDown 自体の枠線部は残るので、
それも除去したい場合は BorderStyle も None にしてみましょう。


> まだ少しだけマージンが残っています。

単に「少しだけ」と言われても、実際の画面イメージや設定値を見ているわけでは無いので、
どのプロパティを幾つに設定した上で、何ピクセルのマージンが生じているのかを
判断することは難しいです。


> あと、ちなみに、
> ユーザーコントロール内の
> Numericupdownのmaximumやminimumを
> 元のフォームのコード上から編集するにはどうしたら良いですか?

自作した Color プロパティの読み書きに応じて、NumericUpDown の Value プロパティを
読み書きさせることはできているのですよね?

それと同じように、NumericUpDown の Maximum / Minimum を
設定するためのプロパティあるいはメソッドを設けましょう。
引用返信 編集キー/
■90387 / inTopicNo.12)  Re[10]: RGBを入力するためのカスタムコントロール
□投稿者/ ちょろQ (10回)-(2019/03/05(Tue) 19:26:13)
>
> 自作した Color プロパティの読み書きに応じて、NumericUpDown の Value プロパティを
> 読み書きさせることはできているのですよね?
>

言え、これはできていません。


<Description("The image associated with the control"),
Category("Behavior")> '表示
Public Property Color() As Color

Public Event ColorChanged As EventHandler



Private Sub NumericUpDown1_ValueChanged(sender As Object, e As EventArgs) Handles NumericUpDown1.ValueChanged, NumericUpDown2.ValueChanged, NumericUpDown3.ValueChanged

Color = Color.FromArgb(CInt(NumericUpDown1.Value), CInt(NumericUpDown2.Value), CInt(NumericUpDown3.Value))
RaiseEvent ColorChanged(Me, EventArgs.Empty)

End Sub


とやっているのでNumericUpDown のvalueを直接編集する方法は分かっていません。

どのようにしたら良いですか?

引用返信 編集キー/
■90388 / inTopicNo.13)  Re[11]: RGBを入力するためのカスタムコントロール
□投稿者/ 魔界の仮面弁士 (2088回)-(2019/03/05(Tue) 20:34:52)
No90387 (ちょろQ さん) に返信
>>自作した Color プロパティの読み書きに応じて、NumericUpDown の Value プロパティを
>>読み書きさせることはできているのですよね?
> 言え、これはできていません。

であれば、このあたりの解説が参考になるかもしれません。
2003 時代の古いチュートリアルですが、コード部は現行バージョンでも使えるので。

【10 行でズバリ!! Windows フォーム向けユーザーコントロールの作成 (VB)】
https://code.msdn.microsoft.com/10-Windows-VB-aa85f5a2



上記サンプルの場合、UserControl 上に 「TextMessage プロパティ」を設けており、
その中で、UserControl のフィールド変数 _textMessage を読み書きしています。

それと同様に、UserControl 上に 「Maximum プロパティ」を設けて、
その中で、UserControl 上の Nu,ericUpDown の Maximum を読み書きします。
引用返信 編集キー/
■90395 / inTopicNo.14)  Re[12]: RGBを入力するためのカスタムコントロール
□投稿者/ ちょろQ (11回)-(2019/03/07(Thu) 12:13:55)
ありがとうございます。
うまくいきました。

解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ