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

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

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

Re[3]: VB.NET:コントロールをまとめるクラス


(過去ログ 30 を表示中)

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

■14663 / inTopicNo.1)  VB.NET:コントロールをまとめるクラス
  
□投稿者/ ヒジキ (5回)-(2008/02/25(Mon) 10:08:26)

分類:[.NET 全般] 

こんにちは。VB初心者です。

現在、コントロールをグループ化するクラスを作成しています。座標やサイズを、指定した比率で縦横にズラッと整列させるだけのものです。

その中でリストを使っているのですが、VBのリストは型指定が必要であり、今回はコントロール全般を入れる必要があったり、構造を全部知っているほうが気分が良いので自作のリストを使っています。

リストに入れたコントロールへのアクセスは以下のような感じです。

Member.Get(Number).Item

Memberがリストクラスで、Get()が引数で指定した位置にある参照を返して、Itemが、Object型で何でも入れられるフィールドです。

Object型ですから色々問題がありますが、例えばMe.Member.Get(Number).Item.Heightという書き方でリストに入れたコントロールの高さにアクセスできます。コントロール全般なんでも入れるという感じなので、今のところキャストしていません。

実際設定自体はできています・・・が、何か変です。

例えばMe.Member.Get(Number).Item.Height+=1 と書いても、全く値が変わりません。ちゃんと参照できていないのかなって思ってMe.Member.Get(Number).Item.Height=1000とかやるとちゃんと反映されます。

Me.Member.Get(Number).Item.Height=140.3333333(←143.33は計算した値)
を入れて、設定した値を確かめると136になっています。

これはリストからのアクセスが問題でしょうか?それともコントロールの仕様でしょうか?コントロールの単位ってそもそもなんなんでしょうか?
引用返信 編集キー/
■14674 / inTopicNo.2)  Re[1]: VB.NET:コントロールをまとめるクラス
□投稿者/ よねKEN (123回)-(2008/02/25(Mon) 11:06:27)
> その中でリストを使っているのですが、VBのリストは型指定が必要であり、今回はコントロール全般を入れる必要があったり、構造を全部知っているほうが気分が良いので自作のリストを使っています。

Control型ではだめですか?

> 例えばMe.Member.Get(Number).Item.Height+=1 と書いても、全く値が変わりません。ちゃんと参照できていないのかなって思って
> Me.Member.Get(Number).Item.Height=1000とかやるとちゃんと反映されます。

何のコントロールですか?
何のコントロールかわかりませんが、上記の説明からの判断では、
それはそのコントロールの仕様でしょう。

例えば、ListBoxの場合、IntegralHeightプロパティがTrueの場合には
"1項目の高さ"の倍数に高さが調整されます。

> Me.Member.Get(Number).Item.Height=140.3333333(←143.33は計算した値)
> を入れて、設定した値を確かめると136になっています。

こういうこともコントロールによっては起きます。

> コントロールの単位ってそもそもなんなんでしょうか?

ピクセルです。ControlクラスのHeightプロパティのヘルプに載っています。
引用返信 編集キー/
■14676 / inTopicNo.3)  Re[1]: VB.NET:コントロールをまとめるクラス
□投稿者/ まどか (456回)-(2008/02/25(Mon) 11:14:52)
> Member.Get(Number).Item

"Get"はよくありません。
自動詞ではないのでそれだけでは意味がわかりません。>"Run"は自動詞なので意味がわかります。
またItemはインデックス指定したメンバという使い方をしますので、Member.Item(Index)が自然です。
下記を読まれることをお勧めします。
「クラスライブラリ開発のデザインガイドライン」
http://msdn2.microsoft.com/ja-jp/library/ms229042(VS.80).aspx

> Memberがリストクラスで、Get()が引数で指定した位置にある参照を返して、Itemが、Object型で何でも入れられるフィールドです。

コントロール限定であれば、Control型のほうがよいでしょう。

> Object型ですから色々問題がありますが、例えばMe.Member.Get(Number).Item.Heightという書き方でリストに入れたコントロールの高さにアクセスできます。コントロール全般なんでも入れるという感じなので、今のところキャストしていません。

これもできればOption Strict Onにして型指定プログラミングしたほうが間違いが少なくなりますね。
事情があってOffにしているのであれば仕方ありませんが。

> 例えばMe.Member.Get(Number).Item.Height+=1 と書いても、全く値が変わりません。ちゃんと参照できていないのかなって思ってMe.Member.Get(Number).Item.Height=1000とかやるとちゃんと反映されます。
>
> これはリストからのアクセスが問題でしょうか?それともコントロールの仕様でしょうか?コントロールの単位ってそもそもなんなんでしょうか?

たとえば、リストボックス、テキストボックス、コンボボックスはそのままでは入れたとおりの高さにはなりません。
デザインでプロパティ設定してみればお分かりになると思います。
AutoSizeについて調べてみるとよいでしょう。
ただし、コントロールの挙動により必ずそれで解決しない場合もあります。
引用返信 編集キー/
■14685 / inTopicNo.4)  Re[2]: VB.NET:コントロールをまとめるクラス
□投稿者/ ヒジキ (6回)-(2008/02/25(Mon) 12:28:27)
お返事ありがとうございます!

コントロールってのは、Control型を継承したクラスなわけですね。こんなことも私は知りませんでした。

また、コントロールのサイズ指定って、それぞれ特徴がある感じですね。型を調べてそれぞれ調整するか、コントロールがそういう仕様なら、そのままにしてもそれはそれで正しい感じなので、まあ良いかなって感じがしてきました。

クラスのメンバの名前の付け方もちゃんと勉強しなきゃな感じです。お恥ずかしい。

また何かあったら教えてください。よろしくお願いします!
引用返信 編集キー/
■14686 / inTopicNo.5)  Re[3]: VB.NET:コントロールをまとめるクラス
□投稿者/ ヒジキ (7回)-(2008/02/25(Mon) 12:32:35)
すみません。解決ボタン押し忘れました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -