- PR -

TreeViewコントロールの高さor幅の取得方法

1
投稿者投稿内容
yosi
会議室デビュー日: 2003/08/01
投稿数: 11
投稿日時: 2003-08-01 14:46

今、TreeViewコントロールの高さと幅を取得ができなくて困っています。

  string c_height = TreeView1.Height.Value.ToString();
  string c_width = TreeView1.Width.Value.ToString();

とコントロール作成後、上記のように記述をすると0としか値を取得できていません。
エラーも出力されず、どうなっているのか解かりません。

取得方法をご教授願えませんでしょうか。
よろしくおねがいします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-08-01 16:10
こんにちは。
引用:

yosiさんの書き込み (2003-08-01 14:46) より:

今、TreeViewコントロールの高さと幅を取得ができなくて困っています。



 Microsoft Web IE Componentの、TreeViewでしょうか?
Heignt.Valueというところから、そうだと思いますが。。。

 そういう前提で、このコントロールの大きさは、動的に(というか、ノードの数によって)変化します。したがって、コントロールを生成しても、ノードが作成されていなければ幅も高さも0です。

 ノードを設定後、取得してみてください。
yosi
会議室デビュー日: 2003/08/01
投稿数: 11
投稿日時: 2003-08-04 10:09
返信が遅れてしまい申し訳ございません。
諸事情により、返信できませんでした。

Jittaさん、回答ありがとうございます。

>ノードを設定後、取得してみてください。

下記のようにJittaさんの記述どおり、ノードを作成後に
値の取得も試みてみたのですが、"0"の値しかとれない状況
なのです。

------------------------------
foreach(DataRow rowCate in oDS.Tables["SECTION"].Rows)
{
s_count = s_count + 1;
     g_count = -1;

n1 = new TreeNode();
n1.Text = rowCate["SECTION_NAME"].ToString();
n1.Type = "folder";
TreeView1.Nodes.Add(n1);

//子ノード(グループ・ループ)
foreach(DataRow rowSoft in rowCate.GetChildRows("SG_REL"))
{
g_count = g_count + 1;

n2 = new TreeNode();
n2.Text = rowSoft["GROUP_NAME"].ToString();
n2.Type = "file";
n2.NodeData = rowSoft["GROUP_ID"].ToString();
n1.Nodes.Add(n2);
}
}

string c_height = TreeView1.Height.Value.ToString();
string c_width = TreeView1.Width.Value.ToString();

----------------------------------

ですが、

TreeView1.Height = 270;
string c_height = TreeView1.Height.Value.ToString();

と記述すると、値を確認できるのですが取得だけとなると
どうもうまくいきません。

どうかよろしくお願いいたします。
返信の件大変申し訳ございません。


Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-08-04 10:37
引用:

yosiさんの書き込み (2003-08-04 10:09) より:

下記のようにJittaさんの記述どおり、ノードを作成後に
値の取得も試みてみたのですが、"0"の値しかとれない状況
なのです。


 想像ですが...Web用のコントロールなので、HTMLに出力されたときに<... HEIGHT="...">が入っていないと、値を取ることができないかもしれません。

 プロパティエディタで、値を入力しておいた場合は、どうでしょう?
yosi
会議室デビュー日: 2003/08/01
投稿数: 11
投稿日時: 2003-08-04 10:59
回答ありがとうございます。

>プロパティエディタで、値を入力しておいた場合は、どうでしょう?

エディタで値をセットしておくと、取得ができました。
やはりHTMLに出力された時に、HEIGHT値がないと
取得できないということなるのですかね??

だとするとコントロールを作成時に、必要幅を予め取得して、
表示時に代入するというのは実現不可能になるのでしょうか?
固定値のコントロール幅ではなく、動的な値をコントロール幅に
合せてセットしたかったのですが。


Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-08-04 13:09
引用:

yosiさんの書き込み (2003-08-04 10:59) より:
エディタで値をセットしておくと、取得ができました。
やはりHTMLに出力された時に、HEIGHT値がないと
取得できないということなるのですかね??

だとするとコントロールを作成時に、必要幅を予め取得して、
表示時に代入するというのは実現不可能になるのでしょうか?
固定値のコントロール幅ではなく、動的な値をコントロール幅に
合せてセットしたかったのですが。


 PreRenderで取得、設定という方法もありますが、どうでしょう?
 TreeViewコントロールの場合、ピクセル単位での設定になると思いますが、表示するフォント、表示倍率によって必要とする幅が変わるのではないでしょうか?フォントの指定をしていても、ブラウザ側でユーザ指定のスタイルシートが優先されていると、コンテンツ作成者の意図とは変わってしまいます。

 デフォルトですべて表示されますよね?クリッピングなどをするのでなければ、何も指定しなくてよいのではないでしょうか?
yosi
会議室デビュー日: 2003/08/01
投稿数: 11
投稿日時: 2003-08-04 14:18

>PreRenderで取得、設定という方法もありますが、どうでしょう?
 
 PreRenderを使用しても、初期値の幅取得は不可能でした。

> TreeViewコントロールの場合、ピクセル単位での設定になると思いますが、表示するフォン>ト、表示倍率によって必要とする幅が変わるのではないでしょうか?フォントの指定をしてい>ても、ブラウザ側でユーザ指定のスタイルシートが優先されていると、コンテンツ作成者の意>図とは変わってしまいます。

> デフォルトですべて表示されますよね?クリッピングなどをするのでなければ、何も指定し>なくてよいのではないでしょうか?

なぜ初期値で幅を取得したいかといいますと、TreeViewコントロールをポップアップにて
別ウインドウで、最小限の大きさにて表示したいという意図から、このような質問にいたって
います。またユーザー指定による、フォントの変更はユーザーがデフォルト設定を使用してい
ないとのことで、仕方ないという認識の上作業を行っています。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-08-05 12:04
引用:

yosiさんの書き込み (2003-08-04 14:18) より:

なぜ初期値で幅を取得したいかといいますと、TreeViewコントロールをポップアップにて別ウインドウで、最小限の大きさにて表示したいという意図から、のような質問にいたっています。またユーザー指定による、フォントの変更はユーザーがデフォルト設定を使用していないとのことで、仕方ないという認識の上作業を行っています。


 例えば、ノードを展開していたときと、畳んでいたときとでコントロールの描画に必要な領域が変わってきますよね。これはどう対応されるのでしょうか?すべて展開したままとする?


 実は私も同じようなことを考えたのですが、私の方では、高さがもしかするとWindowsの画面では収まらないようなことも発生し得るため、「これくらいあれば見難くはないだろう」という大きさにし、リサイズ可能としました。
1

スキルアップ/キャリアアップ(JOB@IT)