🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

継承

継承(インヘリタンス)はオブジェクト指向プログラミングに存在するシステムです。継承はオブジェクトが各自定義する必要をなくし、継承元のオブジェクトで定義されている内容を引き継ぎます。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

Q&A

解決済

4回答

5743閲覧

ユーザーコントロールの作成

TaikiMurata

総合スコア12

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

継承

継承(インヘリタンス)はオブジェクト指向プログラミングに存在するシステムです。継承はオブジェクトが各自定義する必要をなくし、継承元のオブジェクトで定義されている内容を引き継ぎます。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

0グッド

0クリップ

投稿2019/10/03 00:30

編集2019/10/03 00:53

###主なやりたいこと
ユーザーコントロールで作成したコントロール内のサイズの変更の方法を実装
###定義
.使う人が複数で、配置したいコントロールの各内部の大きさがそれぞれ違う
.大きさが違うだけで使いたい機能は同じ
.各自コントロールを使う人たちの技量があまり高くないのでなるべくコントロールを配置後に
コードを使用するしてサイズ調整を書かせるのは避けたい。

ユーザーコントロール内部に3つのコントロールを配置する。
[入力TextBox] [ボタン] [Viewラベル]
###コントロールの役割

コントロール名役割
TextBoxKeyを入力する
ボタンマスタを表示する
ViewラベルKeyに対応するValueを表示する
UserControl上記のcontrolを配置する

###機能
1.入力TextBoxにKeyを入力すると、設定されているデータソースからKeyに対応するValueをラベルに表示する。
2.ボタンを押すとマスタを表示する。
表示されたマスタのデータ明細を選択時に値を取得してKey、Valueをそれぞれのコントロールにセットする。

###困っていること
使う人によってTextBox、ボタン、ラベルのそれぞれのサイズを変更したい。
その場合、使う側にどうやって使わせるように作ったらいいのかがわかりません。

案1.テキストボックス ボタン ラベルにサイズを変更するPropertyを作ってコードでやらせる?
案2. 作ったユーザーコントロールを継承したユーザーコントロールを作成してもらって、サイズを変更したコントロールを各自使ってもらう?

一番良いのはコントロールを配置した後に、各自がデザイナ上でコントロールの端っこを持つ等して
簡単にそれぞれのテキストボックスやラベルのサイズが変更できるようになることです。

何かいい案とかありましたら教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Y.H.

2019/10/03 00:50

Controlから継承したカスタムコントロールではなく、 UserControlから継承したユーザーコントロールのようですので、 「タイトル」「主なやりたいこと」に記載されている「カスタムコントロール」 という文言は「ユーザーコントロール」に修正願います。
TaikiMurata

2019/10/03 00:55

指摘ありがとうございます。 修正しました!
guest

回答4

0

コントロールでなくフォームにコントロールを配置してフォームを継承する案はどうでしょうか。
コントロールの Modifiers を protected/protected internal/public のいずれかにすれば、デザイナで位置や大きさを変更できます。

投稿2019/10/03 02:47

編集2019/10/03 02:57
KOZ6.0

総合スコア2707

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TaikiMurata

2019/10/03 04:13

回答ありがとうございます。 ユーザーコントロールのため、 恐らくコントロールを継承して使用しても同じような形でデザイナ上で各自が変更できそうです。 難点はコントロール群が大量に増えてしまうことでしょうか。 候補の一つとしてあげたいと思います。
guest

0

回答にならないかもしれませんが…

コントロールが

[入力TextBox] [ボタン] [Viewラベル]

のたかだか3個しかないユーザコントロールを用意して,その結果として
そのコントロールのサイズなり配置なりを調整する手段で悩むのであれば,
ユーザコントロールという手段を使わない方が楽になったりはしないのでしょうか.

すなわち,これら3個のコントロール自体は各々が勝手に作って勝手に配置し,
それらを連携させるコードを使い回すようにすればよいのではないかな…とか.

投稿2019/10/03 02:11

編集2019/10/03 02:12
fana

総合スコア11985

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TaikiMurata

2019/10/03 02:33

回答ありがとうございます。 サイズ変更したときにテキストボックスのサイズはフォントによって変わるのが難点で。。。 anchorで引っ張れない(; ・`д・´)? その案も候補にいれます!
TaikiMurata

2019/10/03 08:28

枠のサイズだけなら解決しそうです! 実装に取り入れてみます。 フォントの大きさも枠に合わせて適切に変えるには 現在設定されているフォント書体の高さや個別文字の高さ等いろいろ計算しなくてはなりそうなので見送ります。。。
guest

0

ベストアンサー

デザイナでサイズ変更するよう実装することは可能です。しかし、難しいので費用対効果を考えるとお勧めしません。
対応するプロパティを作るのが一番現実的だと思いますが、使用する人数が少なくて形式が決まっているなら、それぞれカスタマイズしたものを提供してもいいと思います。これは手間だけの問題です。

追記

カスタムデザイナーについて一応引用すると、こんな感じです。

チュートリアル: デザイン時機能を利用するコントロールを作成する

慣れていれば簡単に作れますし、一番正統派の解決法ではあります。質問者さんによってはこれを勧めます。

投稿2019/10/03 00:38

編集2019/10/03 05:42
Zuishin

総合スコア28669

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TaikiMurata

2019/10/03 08:35 編集

回答ありがとうございます。 実装が難しいですが、一番やりたい事がベストに実装できる方法を提供してくださりましたので ベストアンサーとさせていただきます! 今回の実装に関しては、 指摘して頂きました複数のサイズを用意したコントロールを用意することによって解決することにしました。(学習コストにあまり時間が割けない為)
guest

0

ユーザーコントロールにTextBoxなどを直接配置するのではなく、レイアウト用のコンテナを使って配置します。
Windowsフォーム・コントロールの基礎(その2)
すると使ったコンテナの機能でドラッグで色々動かせたりします。

投稿2019/10/03 01:30

hihijiji

総合スコア4152

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TaikiMurata

2019/10/03 01:38 編集

配置してinitializeにコードが生成された後 内部のコントロールも動かせるようになるコンテナがあるということでしょうか?
hihijiji

2019/10/03 01:52

コンテナの中の枠内に1つのコントロールだけを収める感じです。 大概は複数のコンテナを幾重にも入れ子にすることになるでしょう。 何でもできるわけではなく、コンテナによって得手不得手はあります。 また、どうやっても実現できない移動もありますから出来ることを見定めて出来る範囲でデザインするしかありません。
TaikiMurata

2019/10/03 01:59

それだとコントロールの作成者はデザイン変更が容易ですが、コントロール使用者のデザイン変更は結局コンテナのサイズ変更Propertyを実装することになりますか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問