VB.NET質問スレ (Part21 ..
[2ch|▼Menu]
950:デフォルトの名無しさん
07/07/06 07:16:55
>>949

その 「メンバー」 の意味するものとは、元オブジェクトのフィールドのことですよね、

しかし、Clone 自体のインスタンスは、明らかに、元オブジェクトのインスタンスとは
別物になるはずですよね?

それが、cntrlClone と cntrl が別ものとして

   cntrlClone IsNot cntrl  は True 

とはなっているのに、cntrlClone を操作すると、どういうわけか、cntrl が動いて
しまうようなのです。cntrlClone と cntrl の両方が画面に現われるかと思っていると
片方しか現われないのです。つまり、cntrlClone はで来ていないかのように見える
のです。

こういうことはおかしいように思うのですが、よくわからないのでした。

951:デフォルトの名無しさん
07/07/06 07:20:06

それとも、cntrlClone への操作が、自動的に cntrl 側にも同時に伝わってしまって
同時に2つとも同じ操作の対象になってしまっているのでしょうか??

まさかそういうことはちょっと信じられないのですが・・・。

952:デフォルトの名無しさん
07/07/06 07:37:17
class B { public int Ope() { .. } }

class A {
  B b = new B();
  public int Ope() { return b.Ope(); }  
}
こういう構造ならいくらAのクローンを作ってもBはひとつ。
a もクローンa もインスタンスは違っても共通の動作になるだろ

953:デフォルトの名無しさん
07/07/06 07:54:52
>>952
そのおっしゃってることの意味は>>949の意味かと思いますが、

画面にすでに cntrl があった場合に、>>948のように

  cntrlClone = DirectCast(cntrl.MemberwiseClone, コントロールのタイプ名)

のようにして作成した場合、実体として cntrl と cntrlClone は別モノで、
別々のコントロールとして作成されるとすれば、

  cntrlClone.Top = cntrlClone.Top + 10

と操作したら、cntrl の Top が +10 してしまうのはおかしいのではないかと・・・

それとも、cntrl が何かの派生であった場合、Baseクラスに対しても Clone を
別に作成しないといけない、というようなことなのでしょうか?まさか


954:デフォルトの名無しさん
07/07/06 08:13:15
Windows.FormsのFormやらButtonがどういう構造になってるかは知らんが、
実体はWin32のアンマネージドリソースなんだから、
SizeやらLocationやらは毎回Win32のリソースに問い合わせてる可能性が高いぞ。
そうなると両方のオブジェクトが同じハンドルのWin32リソースを操作するわけだから
同じになるのは当然だろ。
ICloneable.Cloneが実装されてないのに、中身もわからないクラスのクローンを作るのは
無謀だと思うぞ。

955:デフォルトの名無しさん
07/07/06 08:19:32
>>953
既に954が書いてるし、俺はあまりWin32に明るくないんだけど、
要するに、例えばFormにTextbox1があるとして、Form上に見えている
テキストボックスはTextbox1そのものではなく、「Textbox1が内部にもっている何物か」
に過ぎないということなんでしょう。

それなら話の辻褄あうでしょ。

956:デフォルトの名無しさん
07/07/06 08:44:23
>>954-955

どうもです、やっぱり 

  cntrlClone = DirectCast(cntrl.MemberwiseClone, コントロールのタイプ名) ・・・[1]

で コントロールの別実体の Clone が作れると思わない方がいいでしょうか?

ICloneable.Clone については、
URLリンク(www.atmarkit.co.jp)

なども参照してみて実装してみたりしてますが、この使い方では結局 Clone
の作成は [1] でやっているんですよね。

普通に最初から New でコンストラクトして、必要なフィールドなどを値でコピーして
地道に作成するほかないでしょうか。そうなると、 MemberwiseClone の利用方法が
今一不明になるわけですが・・・どうもよくわかりません

957:デフォルトの名無しさん
07/07/06 08:48:58
>>956

あっ、これ書いてみて今気がつきましたが、この参照サイトにあるのは [1] ではなく、

  Dim hWankuma As WankumaData = DirectCast(Me.Clone(), WankumaData)

・・・
Private Function Clone() As Object Implements System.ICloneable.Clone
Return Me.MemberwiseClone()
End Function

となってるところが違うのか・・・、もしかしてこれでしたか?ちょっとやってみます。
だとしたら自分の使い方のミスですね。飯食ってからやってみてまた報告します。
どうもでした。

958:デフォルトの名無しさん
07/07/06 09:41:34
ああ、くそう
ここで交わされる会話がスラスラ理解できるようになりたいw

959:デフォルトの名無しさん
07/07/06 11:14:28
たいしたこと言ってないから

960:デフォルトの名無しさん
07/07/06 12:36:43
>>956-957
なんか書いてること読むと基本が理解できてない感じ。
自分でクラス作れない人?

だったら場当たり的な「調べ方」では永遠に埒あかないと思うよ。

少なくともクラスと構造体の区別が理解できていれば、
フィールドの値(オブジェクトのメモリーイメージ)だけ複製しても
無意味な場合があることはすぐ理解できるはず。


961:デフォルトの名無しさん
07/07/06 12:58:22
>>960

うーん、おっしゃってることは分ってるつもりですが、
要はコントロールの複製を作るにはこういうメソッド使えない
ということでしょうか?

もし使えるとしても、では後何をどうすれば複製を作成できるようになるでしょう?

毎回、Newでコンストラクトして作成して、それにフォールド値をいちいちコピーする
やり方では、クラスをバージョンアップしてフィールドが増えたりするたびにそこに
手を入れる必要があるので忘れやすく、そういうことを防止するためにはこのメソッドを
使うほうがいいという感じで書いてあるところが多くあるかと思います。

では、現実の実体としてコントロールをこのメソッドも使って複製したい場合、
どれとどれとどれのどのような手続きをへて可能になるのか、それが知りたいのですが、
現状の知識ではわかりません。またそうした使い方をして説明してあるサイトが見つからない
のです。

ちなみに、当然というか、>>957で試してみてもやっぱりだめでした。まー同じことだろうとは
思ってましたが、やっぱりその通りでした。


962:デフォルトの名無しさん
07/07/06 13:03:03
>>954-955のご指導もありましたが、もしオブジェクトの実体を指すインスタンスが
別途にできていないのだとするとそういうことになるのかもしれませんが、
しかし、たとえフィールド値のコピーだけだとしても、そうだとすると、コントロールの
実体を指すプロパティが他にあって、それのCloneを作成する必要があるということ
でしょうか?

もしよろしければ、その辺をご指導いただけますか?

963:デフォルトの名無しさん
07/07/06 14:27:19
>うーん、おっしゃってることは分ってるつもりですが、
ダウト


>コントロールの 実体を指すプロパティが他にあって、それのCloneを作成する必要があるということ
>でしょうか?

大雑把にいうと
Control ->
NativeWindowクラスのプライベートフィールド->
IWin32Window(Win32ハンドルのラッパ)->
アンマネージドの世界

素直にICloneableを実装して必要なフィールドを自力で埋めろ、ってこった。


964:デフォルトの名無しさん
07/07/06 15:21:46
意識的に自分で使ってるプロパティだけ新しいオブジェクトに移せばいいだろ
コントロールなんて大概「同じもののように見える」で十分
手軽にできるようにしたかったら,
コントロールの初期化をラップしといて簡単に再現できるようにするとか

965:デフォルトの名無しさん
07/07/06 15:28:26
>>963
どうもです。

おっしゃてることは、ですから、要するに、

>>957
Private Function Clone() As Object Implements System.ICloneable.Clone
  Return Me.MemberwiseClone()
End Function

の中の Return Me.MemberwiseClone() は使えません(>>961の通り)ということで、
全部毎回フィールドを自分で世話するという、以前からある手法でやるほかない、
ということなのですね。

つまり、少なくともコントロールに関するかぎり、 MemberwiseClone() は有効にはならず
利用できない、ということで納得するほかないと・・・。わかりました、ということはせっかく
MemberwiseClone() というメソッドが継承されていても、使えないメソッドなのだという
ことなのですね、少なくともControlクラスにおいては。

ではやはりそのようにするしかなさそうですね。ご指導感謝します。

966:デフォルトの名無しさん
07/07/06 15:29:58
>>964

同様のご意見ということで、わかりました。無理そうなので
結局そういう感じでやることに致しました。

967:デフォルトの名無しさん
07/07/06 16:42:48
>Dim hWankuma As WankumaData = DirectCast(Me.Clone(), WankumaData) 
Wankumaってここを見たんだろうけど、
URLリンク(blogs.wankuma.com)
URLリンク(blogs.wankuma.com)

ICloneableの実装の説明としてみると例えとして変なので軽く理解したら他をあたったほうがいい。

968:デフォルトの名無しさん
07/07/06 17:03:04
ADO.NETでウィザードを使ってデータベースに接続したり,コントロールに連結したりした
アプリケーションを配布する場合,データベースへのパスがユーザによって変わってくる
と思いますが,どこでConnectionStringの変更を指定したらいいのですか?

具体的には,ウィザードを使うとFormのRegion〜EndRegionの間にOledbConnectionに関する
記述がありますが,配布した時に最初にデータベースの位置をユーザが指定して,それを
レジストリに書き込みたいのですが,それに関する記述はどこに書いたらいいでしょうか?
Form_Loadですか?

969:デフォルトの名無しさん
07/07/06 18:49:34
CheckdListboxコントロールの継承に関して質問です。

このコントロールの中にあるItemsにAddやRemoveなどのコマンドがありますが、
こちらを継承、もしくはItemsにメンバー変数などを追加するには
どのようにすれば良いのでしょうか?

やりたい事は、CheckdListboxコントロールは、主にItemsの「Index、item、Checked」と
三つの情報を取り扱いますが、こちらに一つ追加したい。

現状は、CheckdListboxコントロールの継承クラスに、メンバーを追加して、
ItemAdd とか ItemRemove とかを作って無理やり実現させています。


970:デフォルトの名無しさん
07/07/06 18:50:50
>>945
ヒント:ErrorProvider

971:デフォルトの名無しさん
07/07/06 22:52:48
>>969
継承についてもっと勉強してください。
あなたの考えてることは不可能です。

972:デフォルトの名無しさん
07/07/06 23:02:22
>>971
その前に君969の言ってることがわかるの?
俺にとっては>>969の文章はサッパリ理解不能なんだが。
きっとエスパーなんだね君は。

自分の勝手な想像と書いてあることの区別がつかない痛い奴でなければ。

973:デフォルトの名無しさん
07/07/06 23:38:51
>>972は自分でさっぱり理解不能な場合、答える人は
全てエスパーに見えるらしい。

…あ、釣りですか。そうですか。

974:デフォルトの名無しさん
07/07/06 23:43:46
いや釣りじゃなくて嫌味ね。
しかし、嫌味が通じない人間の人生ってきっとさぞかし「楽しい」んだろうな。
おっと、この人嫌味が通じないんだったなw

975:デフォルトの名無しさん
07/07/07 00:14:44
くだらね。

976:デフォルトの名無しさん
07/07/07 00:54:58
なんか最近.net関連のスレに気違いが混じってるなぁ

977:デフォルトの名無しさん
07/07/07 00:56:52
「釣りですか」というのが嫌味だと理解できなかった可哀相な人がいるスレはここですか?

978:デフォルトの名無しさん
07/07/07 01:01:31
そういや「全てエスパーに見えるらしい」ってもの嫌味の部類だよなあ
通じなかったみたいだけど。

979:969
07/07/07 09:52:05
自己解決しました。

980:デフォルトの名無しさん
07/07/07 10:09:52
>>932がさっきから腹いせにスレを荒らしている件

981:デフォルトの名無しさん
07/07/07 10:26:25
フォォムのLoad中〜Load完了までの状態を判定するにはどうすればいんですかね?
Visible=False Then じゃなんとなくダサいんですが

982:デフォルトの名無しさん
07/07/07 10:49:43
だれが判断したいわけ?


983:デフォルトの名無しさん
07/07/07 12:29:48
>>982
入社2年目のプログラマーです

984:デフォルトの名無しさん
07/07/07 13:01:08
自作コントロールのItemプロパティを作成したんだけど
出来ればデザイン時に項目を設定できるようにしたいんです。

確かシリアライズ出来るようにしなければいけないと思ったんですが
ちょっと情報が探せませんでした。
ご存知の方簡単で構いませんのでお教え願えませんか?


985:デフォルトの名無しさん
07/07/07 13:18:26
>>984
ん?propertyになっているなら、デザイン時に設定できるだろ?

986:デフォルトの名無しさん
07/07/07 14:08:17
>>984
悪いけど酷い日本語だなあ。何が言いたいのか意味わからんよ。

なので推測で答えるけど、プロパティグリッドで独自のUIを使いたいってことなら
多分ここの記事が参考になると思う。

URLリンク(www.comrade.co.jp)

987:デフォルトの名無しさん
07/07/07 14:18:56
デザイナまで作ろうってんじゃなくて単にプロパティウィンドウに出したいだけじゃねぇの?
BrowsableAttribute属性付けるだけでいいレベルじゃないのか。

988:デフォルトの名無しさん
07/07/07 14:25:21
プロパティグリッドが俺やアンタの作った俺様コレクションの俺様アイテムの
編集方法を理解できるわけないでしょアホか。

989:デフォルトの名無しさん
07/07/07 14:52:08
日本語云々に拘っている変な人がいるよね。

990:デフォルトの名無しさん
07/07/07 16:09:18
向こうで書きにくくなったJittaが暴れているんだろ。

991:デフォルトの名無しさん
07/07/09 12:13:11
VB2005で、IEのプロキシを設定したいのだけど、コマンドがわかりません。
教えていただけませんでしょうか。

992:デフォルトの名無しさん
07/07/09 12:17:34
>>991
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
のProxyServerの値をVBでいじればいい


993:デフォルトの名無しさん
07/07/09 12:18:17
>>991
どんな方法で設定するのか知らないけど
HKEY_CURRENT_USER\…\Internet Settings
このレジストリいじるのじゃなくって別の方法?

994:デフォルトの名無しさん
07/07/09 12:45:49
>>981
普通に書けば、メンバ変数
    Private m_loaded As Boolean = False
とプロパティ
    Public ReadOnly Property Loaded() As Boolean
        Get
            Return m_loaded
        End Get
    End Property
を持たせておいて、OnLoadで
    Protected Overloads Overrides Sub OnLoad(ByVal e As System.EventArgs)
        MyBase.OnLoad(e)
            m_loaded = True
    End Sub
でいいと思いますが。

>Visible=False Then じゃなんとなくダサいんですが
Boolean値をリテラルと比較するのは「ダサい」というより「間抜け」ですね。

>>988
>俺様コレクション
かどうかは判りませんが、それが既知の型の配列であれば
何もしなくともプロパティグリッドに表示されますね。
まあ、そうならないから質問してるんでしょうけど。

995:991
07/07/09 22:15:08
>>991>>992
さっそく、ありがとうございました。
とても参考になります。

まだレジストリをいじったことがないので、
まずはレジストリのいじり方を調べてみます。



996:デフォルトの名無しさん
07/07/10 09:25:38


997:デフォルトの名無しさん
07/07/10 09:26:07
t

998:デフォルトの名無しさん
07/07/10 09:26:42
t


999:デフォルトの名無しさん
07/07/10 09:27:11
p


1000:小倉優子 ◆en0rG2J.f6
07/07/10 09:28:10
1000ならジュースでも飲むか

1001:1001
Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。


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

5100日前に更新/282 KB
担当:undef