ふらっとC#,C♯,C#(初心者用) Part39at TECH
ふらっとC#,C♯,C#(初心者用) Part39 - 暇つぶし2ch804:デフォルトの名無しさん
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読め。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch