- PR -

コントロールのサイズを変更したい

投稿者投稿内容
秋刀魚
会議室デビュー日: 2008/11/10
投稿数: 16
投稿日時: 2008-11-10 16:40
はじめまして。秋刀魚と申します。

早速ですが、皆様のお知恵をお貸し下さい。

現在、VS2005/C# にてWebアプリの開発をしております。
トップにマスターページがあり、そこにパネルを配置してあるんですが、
このパネルのサイズを動的に変更するにはどうすれば良いのか悩んでおります。

やりたい事は以下の通りです。
@ Webアプリを実行中のIEの表示領域のサイズを取得したい
A 取得した@のサイズに合わせてマスターページに配置したパネルの大きさを変更したい。

@についてはJavaScriptを使用して取得できました。
問題はAで、同じくJavaScriptで設定しようとしたんですが、実行してみると
全く反映されていません。

以下、サイズの取得と設定のJavaScriptソースです。

<script type="text/javascript">
var w = document.documentElement.clientWidth;
var h = document.documentElement.clientHeight;
var pn = "<%=Panel1.ClientID%>";
var c = document.getElementById(pn);
if(c!=null){
c.Height = h;
c.Width = w * 0.3;
alert(c.Height+" / "+c.Width);
}
</script>


どうすれば動的にサイズを設定できるのか、ご教授下さい。
ぴあちゃん
ぬし
会議室デビュー日: 2008/02/07
投稿数: 287
投稿日時: 2008-11-10 17:03
コード:
<script type="text/javascript"> 
var w = document.documentElement.clientWidth; 
var h = document.documentElement.clientHeight; 
var pn = "<%=Panel1.ClientID%>"; 
var c = document.getElementById(pn); 
if(c!=null){ 
  c.Height = h; 
  c.Width = w * 0.3; 
  alert(c.Height+" / "+c.Width); 
} 
</script> 



どこに書いたんですか?

秋刀魚
会議室デビュー日: 2008/11/10
投稿数: 16
投稿日時: 2008-11-10 17:20
引用:

ぴあちゃんさんの書き込み (2008-11-10 17:03) より:
コード:
<script type="text/javascript"> 
var w = document.documentElement.clientWidth; 
var h = document.documentElement.clientHeight; 
var pn = "<%=Panel1.ClientID%>"; 
var c = document.getElementById(pn); 
if(c!=null){ 
  c.Height = h; 
  c.Width = w * 0.3; 
  alert(c.Height+" / "+c.Width); 
} 
</script> 



どこに書いたんですか?





返信ありがとうございます。

書いた場所は、マスターページのHTMLソースです。
</form>タグの直前です。
ぴあちゃん
ぬし
会議室デビュー日: 2008/02/07
投稿数: 287
投稿日時: 2008-11-10 23:57
onload に書いたらどーなりますか?

秋刀魚
会議室デビュー日: 2008/11/10
投稿数: 16
投稿日時: 2008-11-11 09:35
引用:

ぴあちゃんさんの書き込み (2008-11-10 23:57) より:
onload に書いたらどーなりますか?





おはようございます。

最初に書いたスクリプトをfunction にして、Site1.Master.cs (マスターページのC#ソースファイル)内で

コード:

ClientScriptManager cs = Page.ClientScript;
cs.RegisterClientScriptBlock(this.GetType(), "SetS", "onload=function名;", true);



のようにしましたが、「実装されていません」というランタイムエラーが
発生してしまいました。

スクリプトを<head>タグ内に記述したところ、<%= %> が使えないとのことでしたので、
hiddenフィールドで.cs からパネルのClientID を渡しています。


[ メッセージ編集済み 編集者: 秋刀魚 編集日時 2008-11-11 14:13 ]
秋刀魚
会議室デビュー日: 2008/11/10
投稿数: 16
投稿日時: 2008-11-11 15:33
追加で報告です。

Page_Load 内で、

コード:
string kaigyo = Environment.NewLine;
StringBuilder sb = new StringBuilder("function Ps(){" + kaigyo);
sb.Append(" var w = document.documentElement.clientWidth;" + kaigyo);
sb.Append(" var h = document.documentElement.clientHeight;" + kaigyo);
sb.Append(" var pn = \"" + Panel1.ClientID + "\";" + kaigyo);
sb.Append(" var c = document.getElementById(pn);" + kaigyo);
sb.Append(" if(c!=null){" + kaigyo);
sb.Append("     c.Height = h;" + kaigyo);
sb.Append("     c.Width = w * 0.3;" + kaigyo);
sb.Append("     alert(c.Height+\" / \"+c.Width);" + kaigyo);
sb.Append(" }" + kaigyo);
sb.Append("}" + kaigyo);
ClientScriptManager cs = Page.ClientScript;
cs.RegisterClientScriptBlock(this.GetType(), "SetSs", "onload=" + sb.ToString(), true);



としてみたところ、スクリプト自体は実行されているようです。
(alert が表示されました)

しかし、パネルのサイズに変化はありませんでした。

もう少し色々いじってみます。
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2008-11-11 15:42
実行時の HTML ソースを見て、
生成された JavaScript がその HTML 中で実行される正しいコードになっているか、
を確認してみてはいかがでしょうか。
秋刀魚
会議室デビュー日: 2008/11/10
投稿数: 16
投稿日時: 2008-11-11 16:08
引用:

Kingさんの書き込み (2008-11-11 15:42) より:
実行時の HTML ソースを見て、
生成された JavaScript がその HTML 中で実行される正しいコードになっているか、
を確認してみてはいかがでしょうか。



返信ありがとうございます。

生成された javascript は以下のようになっていました。
コード:
<script type="text/javascript">
//<![CDATA[
onload=function Ps(){
 var w = document.documentElement.clientWidth;
 var h = document.documentElement.clientHeight;
 var pn = "ctl00_ContentPlaceHolder1_Panel1";
 var c = document.getElementById(pn);
 if(c!=null){
     c.Height = h;
     c.Width = w * 0.3;
     alert(c.Height+" / "+c.Width);
 }
}
//]]>
</script>



alert が数字が入った状態で表示されましたので、実行はされていると思いますが、
どこが悪いのか勉強不足なため分かりません。

今調べているところなのですが、もしお分かりでしたら、ヒントだけでも
お教え願えないでしょうか。

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