09/04/08 15:35:20
それでは Public Shadow Property X は
public new override X
{get return ...みたいな感じで書けばいいってことですか?
805:デフォルトの名無しさん
09/04/08 15:36:43
ああちがうか、そもそもoverrideとoverridesのちがいがわかってませんでした。
勉強してきます。
806:デフォルトの名無しさん
09/04/08 15:43:35
WebBrowserのDocumentで、mshtmlを経由してiframeの中身にアクセスしようとするとUnauthorizedAccessExceptionになるのですが、
これを回避するにはどうすればいいのでしょうか。
807:デフォルトの名無しさん
09/04/08 18:51:30
public class Bar
inherits Foo
overrides sub f()
end sub
shadows sub g()
end sub
overloads sub h()
end sub
end class
をリフレクションで調べるとこういう違いがあるようだべさ。
public class Bar : Ansi,Auto
extends public class Foo : Ansi,Auto
public virtual Void f()
public Void g()
public Void h(),HideBySig
public constructor Void .ctor(),SpecialName
C#の場合全部のメソッドにHideBySigが付いてるんだよね。
808:デフォルトの名無しさん
09/04/08 19:28:38
すみません。馬鹿な質問いいですか?
フォームにラベルがいくつかありまして、それぞれ
lbl001
lbl002
lbl003
という名前になっています。
で引数に001とか002を渡すと通し番号の一致するラベルのテキストを""に変えるメソッドを
作りたいのですが、どうしたら良いのでしょうか?
解りにくい文章ですみませんが、お願いします。
809:808
09/04/08 19:30:47
private void hoge(string number)
{
lbl+number.text="";
}
という感じなのですが・・・
810:デフォルトの名無しさん
09/04/08 19:36:25
public void ClearLabel(string labelName)
Control control = this.Controls.Find(labelName, false)[0].Text = "";
thisはForm
811:デフォルトの名無しさん
09/04/08 19:39:39
ああ、最初の変数宣言はイラネ
public void ClearLabel(string labelName)
Control control = this.Controls.Find(labelName, false)[0];
control.Text = "";
または
public void ClearLabel(string labelName)
this.Controls.Find(labelName, false)[0].Text = "";
812:デフォルトの名無しさん
09/04/08 19:42:38
public void Func(int number)
{
string name = "lbl" + number.ToString("000");
foreach (FieldInfo info in this.GetFields())
{
if (name == info.Name)
{
Label label = (Label)info.GetValue(this);
label.Text = "";
}
}
}
813:デフォルトの名無しさん
09/04/08 19:43:55
ラベルを配列に入れりゃいいんじゃないの
814:デフォルトの名無しさん
09/04/08 19:46:45
>>808
そういうことをするならラベルをコレクションで管理しとけ
リフレクションを使うのはあくまで応急処置
最初からコレクションで生成してもいいし、どうしてもデザイナを使いたいなら以下のようにする
var labels = new List<Label>();
labels.Add(lbl001);
labels.Add(lbl002);
labels.Add(lbl003);
815:808
09/04/08 19:58:30
みなさまありがとうございました!
>>811
public void ClearLabel(string labelName)
this.Controls.Find(labelName, false)[0].Text = "";
この場合labelNameは"002"とかでもlbl002を見つけてくれるのでしょうか?
>>812
なるほど。僕でも判る解りやすいコードですね
>>814
おっしゃる通りです。以降気をつけます
816:デフォルトの名無しさん
09/04/08 20:21:07
>>815
見つけてくれないからlabelNameを自分で作成すれ
817:808
09/04/08 21:27:47
>>816
ありがとうございました!
僕はデザイナでしかコントロールを置いたことがないので
名前の重複がありうるなんて知りませんでした。
なので名前のわかっているコントロールを探すなんてナンセンスな感じを
うけましたが、自分が無知だっただけでした!
818:デフォルトの名無しさん
09/04/08 21:49:25
何も解かってないことが解かった
819:デフォルトの名無しさん
09/04/08 21:54:33
>>817が何を言ってるのかまるでわからない・・・
820:デフォルトの名無しさん
09/04/08 21:56:19
なんとなく理解できる俺もほ乳類を名乗って問題無いのか・・・
821:デフォルトの名無しさん
09/04/08 23:41:34
>819
多分Nameプロパティとフィールド参照名をごっちゃにしてるんだろ。
>817
参照名はスコープ内で重複しないけど、コントロールごとに設定できるNameプロパティの値は重複可能。
デザイナーは勝手に「Name = 参照名」に設定してるから一意に見えるだけ。自前でNameを設定してなければ、
int num = 2;
Label label = this.Controls[ "lbl" + num.ToString("000")] as Label;
if( label != null ) { 処理 } else { エラー処理とか }
自前のコードでNameを設定してて同じNameの奴が重複してたら、最初に追加されたやつ(普通はデザイナーが作った方)が返ってくる。
どうしてもフィールド名のほうでアクセスする必要がある場合は、>812みたいにリフレクションを使う。
でもクラス内で完結することに使うことはまずない。
822:デフォルトの名無しさん
09/04/09 00:09:57
Regexクラスを使った正規表現って
交差演算子「&&」は使えませんよね?
823:デフォルトの名無しさん
09/04/09 00:12:33
古語でも可也
824:デフォルトの名無しさん
09/04/09 00:18:44
>>822
MSDN読め。