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

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

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

Re[2]: JavaScriptをC#に


(過去ログ 78 を表示中)

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

■46105 / inTopicNo.1)  JavaScriptをC#に
  
□投稿者/ まぐねしうむ (82回)-(2010/01/26(Tue) 11:50:37)

分類:[C#] 

お世話になります。
以下のJSのコードをC#に変更しているのですが
一箇所わかりません。

どなたか教えてください。

◆JSのコード
処理の内容はフォームのListBoxを状態に応じて表示、非表示にするものです。

function SetSubMenu(val){
var element = document.getElementById("test");
	for (var i=0;i<element.options.length;i++) {
		var option = element.options[i];
		//alert('「'+option.value+'」');
		if(val == option.value){
			document.getElementById(option.value).style.display = "block";
			ここの「style.display 」の書き方が分かりません。
		} else {
			document.getElementById(option.value).style.display = "none";
		}
	}
}


◆C#のコード

HtmlElementCollection forms = wb.Document.GetElementsByTagName("select");
HtmlElement selectElements = forms["test"];
HtmlElementCollection optionElementsDown = selectElements.GetElementsByTagName("option");
foreach (HtmlElement opElementsDown in optionElementsDown)
{
	//styleはあるが、style.displayは存在しない。
	opElementsDown.style.display = "none";
}

引用返信 編集キー/
■46110 / inTopicNo.2)  Re[1]: JavaScriptをC#に
□投稿者/ おのでら (5回)-(2010/01/26(Tue) 12:22:31)
おのでら さんの Web サイト
【HtmlElement.Style プロパティ】
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.htmlelement.style(VS.80).aspx

上記リンク先の解説のところにあるようにセミコロン区切りの文字列で指定する必要があるみたいですね。(試していないので確認してみてください^^;)
引用返信 編集キー/
■46111 / inTopicNo.3)  Re[1]: JavaScriptをC#に
□投稿者/ ぽぴ王子 (480回)-(2010/01/26(Tue) 12:37:12)
ぽぴ王子 さんの Web サイト
No46105 (まぐねしうむ さん) に返信
> お世話になります。
> 以下のJSのコードをC#に変更しているのですが
> 一箇所わかりません。

HtmlElement クラスの Style プロパティは String 型ですね。ということは、Style.display は存在しないと思います。
(display という名前のプロパティは String には存在しないので)
# MSDNは見てみました?

で、元のJSのコードを見ると

> 			document.getElementById(option.value).style.display = "none";

これはつまりHTML的には
<option style="display.none">
というような表記になります。
なので、おのでらさんが書かれているように

> 	opElementsDown.Style = "display: none";

と書く必要があるかと思います。
(これも試していないので確認してみてください)

引用返信 編集キー/
■46112 / inTopicNo.4)  Re[2]: JavaScriptをC#に
□投稿者/ はまんじ (1回)-(2010/01/26(Tue) 13:01:16)
>opElementsDown.Style = "display: none";

opElementsDown.Style.Add("display", "none");

ではないかと。
不安ならば

opElementsDown.Style.Remove("display");
opElementsDown.Style.Add("display", "none");

でどうでしょうか?

引用返信 編集キー/
■46114 / inTopicNo.5)  Re[3]: JavaScriptをC#に
□投稿者/ おのでら (6回)-(2010/01/26(Tue) 13:07:16)
おのでら さんの Web サイト
> opElementsDown.Style.Add("display", "none");

opElementsDown は「HtmlElement」で宣言されているので HtmlElement.Style プロパティは string 型になるみたいですね
引用返信 編集キー/
■46115 / inTopicNo.6)  Re[2]: JavaScriptをC#に
□投稿者/ まぐねしうむ (83回)-(2010/01/26(Tue) 13:12:38)
No46111 (ぽぴ王子 さん) に返信

回答ありがとうございます。
opElementsDown.Style = "display:none";をやってみてみた所、
非表示になりませんでした。

おのでらさんの提示してくれたHP内の
「STYLE Attribute」の項目を確認した所「display」はありませんでした。
http://msdn.microsoft.com/ja-jp/library/ms534651(en-us,VS.85).aspx

なのでもしかしたら違うやり方なのでしょうか?

また、 はまんじさんの方法では
'string.Remove(int)' に最も適しているオーバーロード メソッドには無効な引数がいくつか含まれています。
引数 '1': 'string' から 'int' に変換できません。
string' に 'Add' の定義がありません。
となってしまいます。

これはぽぴ王子さんの指摘の通り、HtmlElement クラスの Style プロパティは String 型だからですよね?



> ■No46105 (まぐねしうむ さん) に返信
>>お世話になります。
>>以下のJSのコードをC#に変更しているのですが
>>一箇所わかりません。
>
> HtmlElement クラスの Style プロパティは String 型ですね。ということは、Style.display は存在しないと思います。
> (display という名前のプロパティは String には存在しないので)
> # MSDNは見てみました?
>
> で、元のJSのコードを見ると
>
>> document.getElementById(option.value).style.display = "none";
>
> これはつまりHTML的には
> <option style="display.none">
> というような表記になります。
> なので、おのでらさんが書かれているように
>
>> opElementsDown.Style = "display: none";
>
> と書く必要があるかと思います。
> (これも試していないので確認してみてください)
引用返信 編集キー/
■46116 / inTopicNo.7)  Re[3]: JavaScriptをC#に
□投稿者/ まぐねしうむ (84回)-(2010/01/26(Tue) 13:14:35)
No46115 (まぐねしうむ さん) に返信
追伸です。
opElementsDown.Style = "display:none";をやってみてみた所、
非表示になりませんでした。

ですが、スタイル情報は"DISPLAY: none"に変更されていますが、
ブラウザ上は表示されたままです。

引用返信 編集キー/
■46117 / inTopicNo.8)  Re[2]: JavaScriptをC#に
□投稿者/ こくぶん (38回)-(2010/01/26(Tue) 13:14:50)
2010/01/26(Tue) 13:28:19 編集(投稿者)
No46111 (ぽぴ王子 さん) に返信
> ■No46105 (まぐねしうむ さん) に返信

>>	opElementsDown.Style = "display: none";
> 
> と書く必要があるかと思います。

これだと他のスタイル設定を全部書きつぶしてしまう恐れが。。。

ちゃんとやるなら、

var styles = opElementsDown.Style.Split(new[] { ';' });
for (var i = 0; i < styles.Length; i++)
{
  if (styles[i].Trim().StartsWith("display:"))
  {
    styles[i] = "display: none";
    break;
  }
}
opElementsDown.Style = String.Join(";", styles);

みたいなことが必要かなと。
(これも試していないので確認してみてください)

# HtmlElement の使い方がよく判らないの。。。><

引用返信 編集キー/
■46118 / inTopicNo.9)  Re[1]: JavaScriptをC#に
□投稿者/ みきぬ (739回)-(2010/01/26(Tue) 13:23:19)
> ◆C#のコード
>
> HtmlElementCollection forms = wb.Document.GetElementsByTagName("select");
> HtmlElement selectElements = forms["test"];
> HtmlElementCollection optionElementsDown = selectElements.GetElementsByTagName("option");
> foreach (HtmlElement opElementsDown in optionElementsDown)
> {
> //styleはあるが、style.displayは存在しない。
> opElementsDown.style.display = "none";
> }

ふと気になった点。
この処理はどのタイミングで実行していて、その結果はどのタイミングで反映されるのかしら。
引用返信 編集キー/
■46119 / inTopicNo.10)  Re[4]: JavaScriptをC#に
□投稿者/ こくぶん (39回)-(2010/01/26(Tue) 13:27:43)
2010/01/26(Tue) 13:29:16 編集(投稿者)

No46116 (まぐねしうむ さん) に返信
> ■No46115 (まぐねしうむ さん) に返信
> 追伸です。
> opElementsDown.Style = "display:none";をやってみてみた所、
> 非表示になりませんでした。

この処理はどのタイミングで実行されているのでしょうか?


> ですが、スタイル情報は"DISPLAY: none"に変更されていますが、
> ブラウザ上は表示されたままです。

この「スタイル情報」は何で確認されましたでしょうか?

# うはっ、みきぬさんとかぶった ^^;;
引用返信 編集キー/
■46120 / inTopicNo.11)  Re[2]: JavaScriptをC#に
□投稿者/ まぐねしうむ (85回)-(2010/01/26(Tue) 13:28:52)
No46118 (みきぬ さん) に返信
すみません出来ました。
ちょっと、勘違いをしていました。
もともとのコードは各要素(ListBox)に対してStyleを設定しようと
していましたが、これが間違いでした。

下のコードで動きました。

HtmlElementCollection forms = wb.Document.GetElementsByTagName("select");
HtmlElement selectElements = forms["test"];
selectElements.Style = "display:none";

みなさまありがとうございました!!!
解決済み
引用返信 編集キー/
■46121 / inTopicNo.12)  Re[3]: JavaScriptをC#に
□投稿者/ ぽぴ王子 (481回)-(2010/01/26(Tue) 13:29:24)
ぽぴ王子 さんの Web サイト
No46117 (こくぶん さん) に返信
> これだと他のスタイル設定を全部書きつぶしてしまう恐れが。。。

うわ、確かにそうですね。
ということで、こくぶんさんのコードを参考にしてみてください orz

No46116 (まぐねしうむ さん) に返信
> ですが、スタイル情報は"DISPLAY: none"に変更されていますが、
> ブラウザ上は表示されたままです。

ブラウザ上のHTMLがどのようになっているか、確認してみてください。
JSだとクライアント側で動的に変更されますが、C#で変更した場合は
サーバー側での処理になると思いますので、クライアントにはStyle属性
が設定された状態でHTMLが渡されると思います。
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -