C♯相談室 Part18
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん♯
NGNG(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。
過去スレは>>2-5あたり。
関連リンク
http://onigiri.s3.xrea.com:8080/csharp/index.php?%5B%5B%A5%EA%A5%F3%A5%AF%5D%5D
ソース置き場.NET
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1003826049&rm=10
0153デフォルトの名無しさん
NGNG内部クラスのことか?
class MyClass {
class MyItem {
}
}
みたいに MyClass の中で MyItem を宣言すれば OK よん
0154153
NGNG0155デフォルトの名無しさん
NGNGMyClass
{
public MyClass()
{
}
public MyItem items=new MyItem();//これでいけました
public void Add()
{
}
}
こういう風にメソッドの外でクラスを作ることをなんていうんでしょうか?
0156デフォルトの名無しさん
NGNG>>152
まず基礎から一つずつ積んでけ。
0157デフォルトの名無しさん
NGNGListViewにPictureBoxの機能を連動するようなMyClassを作りたかったんですが
PictureBox継承にしてしまうと、MyClassを使う場合、pictureboxの機能も使えてしまって
ごちゃまぜでややこしいので、できればMyClass使う場合、pictureBoxを意識しないで
使えるような設計をしたかったんです
MyClass.items //ListView
MyClass.View //ListViewで選択されてるitemをPictureBoxに表示するメソッド
0158デフォルトの名無しさん
NGNGどうもでした
0159153
NGNG0161デフォルトの名無しさん
NGNG0162デフォルトの名無しさん
NGNG0163153
NGNG�@ 『内部クラス』は『クラスの中で宣言されたクラス』を指す。
>>153 では MyItem がコレ
�A 内部クラスといっても、普通のクラスとの本質的な違いは殆どない。
>>155 はスコープの問題。
�B 『クラスの宣言』と『インスタンスの作成』は全く違うことに注意。
下手すると両方とも「クラスの作成」になっちまうからな
>>160 は、内部クラスを『メソッドの外で宣言する物と思い込んでいる』
ような気がする。(合ってなくはないが微妙にニュアンスが……)
0164デフォルトの名無しさん
NGNGクラスのライブラリってどこか参照できるところがあれば
教えてください。
0165デフォルトの名無しさん
NGNG0166151
NGNGんーなかなかむずかしいすねー
内部クラスっていうのは作ったことないです
クラスっていうのは実体がない設計図みたいなもので
インスタンスはその設計図を元に具現化したもの・・・
実際MyClassを使うメインのクラスでは
public Form1:
{
private MyClass[] mc=new MyClass();//>>155のMyClass
public Form1()
{
}
private void View()
{
//mc.AddでMyClassのListViewにファイル名追加してさらに
//MyClassの中のprivateなPictureBoxでform1に画像を
//表示する
mc[0].Add("filename");
}
}
結局、Form1でインスタンス化するんだから、MyClass内でMyItemsをインスタンス化
するのは無駄なことなのかも?
内部クラスとスコープこの二つの単語をもう少し勉強してきます
0167デフォルトの名無しさん
NGNG0168デフォルトの名無しさん
NGNG0169151
NGNGこんな構造作りたいんだけど・・
MyClass.View.PictureBox
MyClass.ListView
>>166のやり方でさっきからやってるけど
MyClassのメソッドでPictureBoxに画像表示してるけど
Form1に表示されない・・・・
んー、素直にPictureBoxを継承すればすんなり行くんだけど・・
pictureBoxの機能はすべてMyClass内で自動でやってほしんだよね・・
0170151
NGNGMyClass.View.PictureBox
これじゃなかった
pictureBoxはMyClassのプロパティ?として使いたいんだった
あーやっぱ出直してくる
0171デフォルトの名無しさん
NGNGアクセシビリティもおいとこう。
根本的にFormに表示できるのは、
・祖先がControlであるクラスで、
・FormのControlsプロパティに追加された上記クラスのインスタンス
のみだ。
お前さんのMyClassとやらは条件を満たしてるのかね?
//しかしフィールドも知らない人がよくこんなことしようと考えるなぁ。
//Hello worldから始める人って少なくなったのかなぁ。
0172151
NGNGPictureBoxを継承した自作クラスでFormに描画できるのはそういうことだったんですね
MyClassは継承もしてないし、Controlでもないと思います
Controlもよく意味がわかってないですが^^;
フィールドというのは、クラスの先頭で宣言するpublic int a;などのように
データを保存するだけのもののことをいうんですよね?
FormにListViewなどを配置すると、Formクラスの先頭に
private ListView listView1;
ていうのができますが、これはプロパティ?それともフィールド?
0173デフォルトの名無しさん
NGNGお前の聞いてることはC#とか言語以前の問題だ
0174デフォルトの名無しさん
NGNG・・・・・。
0175デフォルトの名無しさん
NGNG0176デフォルトの名無しさん
NGNGまずは入門書を読み飛ばさず一冊読んでおおまかな概要や用語をつかむことだ。
用語がわからないのでは、まさに文字通り、話にならないから。
ttp://pc5.2ch.net/test/read.cgi/tech/1065196964/
0177デフォルトの名無しさん
NGNG0178デフォルトの名無しさん
NGNGしかしここまでひどいのは初めて見た
0179176
NGNG「白い白馬」やっちまった。
0180デフォルトの名無しさん
NGNGほんとそうだよな。
こういう書き込み見てると頭の頭痛が痛いよ。
0181デフォルトの名無しさん
NGNGなんかそのせりふ頭痛に寄生されてるみたいでキモイ
0183デフォルトの名無しさん
NGNG0184デフォルトの名無しさん
NGNG0185デフォルトの名無しさん
NGNG眺めただけという
0186デフォルトの名無しさん
NGNG座布団一枚!
0187151
NGNGちゃんと仕事して家族養ってるし年収も1000万もらってるんですけど
ちょっと興味湧いたのでプログラム始めたんです
プログラム初めてからまだ1週間です
わたしはバカって言われたことありません
0188デフォルトの名無しさん
NGNG0189デフォルトの名無しさん
NGNG本物のネ申が降臨しました
0190在日外国人参政権反対
NGNG馬鹿かどうかはわかりませんが、貴方のここで書いていることはほとんどが釣りと疑わせるようなものであることはまちがいないです.
私も釣られてるんでしょうか?
0191デフォルトの名無しさん
NGNG0192デフォルトの名無しさん
NGNG0193デフォルトの名無しさん
NGNG0194デフォルトの名無しさん
NGNGそんなもん継承させないでくれ...
0195151
NGNG自作コントロールというのはいわゆるDLLのことだったんですね
0196デフォルトの名無しさん
NGNG0197デフォルトの名無しさん
NGNG0198151
NGNGそれを /target:library オプションを付けてコンパイルしたものがDLLなんですね。
そこで質問なんですが、自動車免許(大型)の更新には、焼きそばは必要なんでしょうか?
0199デフォルトの名無しさん
NGNG0200デフォルトの名無しさん
NGNGだから、コントロール=DLLじゃないって。
0201デフォルトの名無しさん
NGNG0202デフォルトの名無しさん
NGNG0203デフォルトの名無しさん
NGNG0204151 ◆0XlGlYK4pE
NGNGファイルが送られてきたら、リストビューにファイル名追加して
さらに画像をピクチャーボックスに表示する
こういう動作をするクラスを作りたいんです
ListViewの機能にPictureBoxの機能を加えたようなもの
このクラスの名前を例えばMyClassします
MyClassにPictureBoxを継承してしまうと
MyClassを利用する側はPicturBoxのメソッドにもアクセスできることになる
利用する側は直接PictureBoxのメソッドを利用することはないのに
利用できるようになるのは無駄というかわかりにくいですよね?
利用する側からはPictureBoxのメソッドの存在を隠蔽したいんです
そこで、継承ではなくMyClassの内部にPictureBoxをオブジェクトとして扱おうとしたけど
今度は利用する側(Form1)に表示されない・・
そこで自作コントロールを作ればいいと考えたんですけど
DLL作ってるんですけど、結構面倒ですね、うまく動作してるか
デバッグしながら確認出来ないから
一旦DLL作って、それをフォームに貼り付けてやらないと
チェックできないし・・
じゃあ、どうすればいいのか・・・コントロールを作りながらそのコントロールを
利用する側も一緒に作っていく方法がわからなくて困ってます
0205151 ◆0XlGlYK4pE
NGNG利用するこはできないですよね?
もしできるなら、この問題は解決するんですけど
0206デフォルトの名無しさん
NGNGこっちのスレに行け。
http://pc5.2ch.net/test/read.cgi/tech/1065196964/l50
0207デフォルトの名無しさん
NGNGForm1はDLLにしないとMainメソッドから呼べないとでも?
0208デフォルトの名無しさん
NGNGどっから送られてくるのか知らんがw
とりあえず、大量の画像のファイル名をListViewに羅列して、
マウスがListViewのアイテム(画像ファイル名)上に来たら、該当する画像を表示する。
こんな感じでいいの?
0209デフォルトの名無しさん
NGNG0210151 ◆0XlGlYK4pE
NGNG今画像の振り分けソフトを作っているんです
起動時にlistView1に画像のアドレスが一覧されていて
Form1上のMyClass.PictureBoxをクリックすると、listView1で選択されている画像ファイルが表示されるとともに
そのファイルがMyClass.ListViewに追加されるというものです
この処理をすべてForm1のメソッドでやればいいんですけど、MyClassを何十個も増やせるようにしたいので
そうなってくると非情に面倒な結果になります
あと、今適当にやってたら、プロジェクト右クリックでユーザーコントロール追加できるんですね
これで簡単にユーザーコントロールをグラフィカルに作ることができました。これ便利ですね
クラスの説明とかはいろいろあるのに、VC#自体の説明書がないので、まだ、このソフト使い慣れてない・・
で、ユーザーコントロールは簡単に作ることができて、フォームに追加することはできたんだけど
いざ、デガッグしようとすろと、ユーザーコントロールはビルドされていなければいけませんと出て
やっぱり、いちいちビルドしてからでないと使えないみたいです
0211デフォルトの名無しさん
NGNG0212デフォルトの名無しさん
NGNG151は自分の分をわきまえろ。
んな高度なもん作る前にやることがあるだろ。
0213151 ◆0XlGlYK4pE
NGNGええ、そうなんですよ。その作り方もわからなかったし、存在すら知らなかった・・
でもIDEでGUIで作れたので便利です。IDEの説明がもっと充実していればなぁ
0214199
NGNGとりあえず151は入門書を256回読んでから首吊れ。
0215デフォルトの名無しさん
NGNGそれはともかくとして、このスレもう4年も経つんだな。
0216デフォルトの名無しさん
NGNG↓
〆 ̄TTTTTTTTTTTTTTT7
| =|  ̄ ̄ ̄┴┴┴ ̄ ̄ ∨
|=|  ̄ ̄――― ̄ |
| =| 巛lllllllllllllllii ̄ ̄iillllllllllllll|
| =| ___llll lll___|
|=\人 o > / o フ<
|i⌒i| へ ̄ ̄, \ ̄ ̄ , .|
|| |.|  ̄ \ ̄ |
|| ‖ // ( | ヽ |
| \| イ_ ^  ̄ ̄ |
| ≡ ./| \王I王I王I王I王フ|
/| =/ | |
/ |/ 人 =≡≡= ノ
― ̄| \ へ _ イ
| \  ̄ ̄ ̄
0217デフォルトの名無しさん
NGNG0218デフォルトの名無しさん
NGNGという風に載っていたのですが、この場合の内部というのはどこまでを指すのでしょうか?
public class Form1 : Form
{
/*独自のメソッド*/
public void MyMethod()
{
}
}
この場合、MyMethod()は別スレッドから直接呼び出しても問題ないでしょうか?
0219デフォルトの名無しさん
NGNGそれはクラスの外部のメソッドなのか?
違うだろ?
0221デフォルトの名無しさん
NGNG0222デフォルトの名無しさん
NGNGあなたが実装しなかったメソッド(つまり .NET Framework に含まれているメソッド)。
自分が実装したメソッドなら、他スレッドから安全に呼べるかどうかは自分でわかるはず。
たとえばその void MyMethod() は何もしないので当然他スレッドからも安全に呼べる。
0223151 ◆0XlGlYK4pE
NGNG0224デフォルトの名無しさん
NGNG本物の 151 はアドバイスに従って「ふらっとC♯(Part5)」へ移動、
187=偽151が面白がってあらしている状態だと思う。
読んでないけど。
0225デフォルトの名無しさん
NGNG下のコードを実行すると、
public Form()
{
Init();
MessageBox.Show("form","");
}
private void Init()
{
MessageBox.Show("init","");
}
public void Form_Load(object s, EventArgs e)
{
MessageBox.Show("load","");
}
なぜか、
MessageBox.Show("form","");
MessageBox.Show("init","");
MessageBox.Show("load","");
の順番で実行(MessageBoxが表示)されます。
"form"と"init"の順番が逆な気がするんですが、なんでこうなるんでしょう(;´Д`)
プチパニック状態なんですが。
0226225
NGNGまずコンストラクタ(Form())が実行されて、
その中でInitが呼び出されて、
最後に、Loadイベントが発生するんですよね。
なんか勘違いしてるんでしょうか・・・
0227デフォルトの名無しさん
NGNG0228デフォルトの名無しさん
NGNGinit→form→loadの順でメッセージボックスでるぞ
0229デフォルトの名無しさん
NGNG0230225
NGNGForm()の中でMessageBox.Show("init","");
Init()の中でMessageBox.Show("form","");
を呼び出してました。 orz
0231デフォルトの名無しさん
NGNG0233デフォルトの名無しさん
NGNG0234デフォルトの名無しさん
NGNG↓
0235デフォルトの名無しさん
NGNGユーザーコントロールを配置して
デバッグしようとすると、ユーザーコントロールはビルドされていないとダメって
コンパイル時に起こられるのですが、みなさんはどうしてますか?
VS.NETproとかだとこういうエラーはでないんですか?
0236デフォルトの名無しさん
NGNGユーザコントロールはビルドされていませんというエラーが出るけど、
バグを潰すとそんなエラーはでなくなって普通に動くよ。
0237デフォルトの名無しさん
NGNGWin32ではDLLすら扱ったことないのですが、
.netでプラグインを実現するにはどういった方法がありますか?
構想としては、
例えばある基底型をアプリ側で用意しておいて、
プラグイン側ではそれから派生して新しい型を作ってDLLにして、
アプリ側でそのDLLを動的に読み込んでその型のインスタンスを作る、
なんて流れが出来ればなあと思っているのですが、。、。
0239デフォルトの名無しさん
NGNGclass hoge<T>
{
int num = 0;
T typ;
public hoge()
{
typ += num;
}
}
で、Tがint以外の時はエラーになるもんなん?
ボクシングが動くんだか動かないんだかよくわからんのですが・・・・。
0240151ホンモノ ◆Ibpv.GcsrQ
NGNG誰かがこのスレにコピペしました。
でもレスしてくれたので返答します
>>236
ソース自体にはなんらバグはありません。
どうやら、C#stdではDLL化していないユーザーコントロールは
一緒にコンパイルしてくれない仕様みたいですね。
もともと、私のC#std2002はクラスライブラリ作れない仕様ですし・・・
結局現在は、Formでインスタンス化してユーザーコントロールを使ってます
また、ここで質問していたことすべて実現しました。
どうもお騒がせしました。そして結果的に荒れた原因も作ってしまい
申し訳ありませんでした。
0241デフォルトの名無しさん
NGNGなんでボクシングの話になるんだ?
operator + (T, int)
が定義されていないTだったら、どうやってもコンパイルできないだろ。
0242デフォルトの名無しさん
NGNG0243デフォルトの名無しさん
NGNGttp://vision.kuee.kyoto-u.ac.jp/~nob/doc/csharp/csharp.html
この辺が参考になるかな。
>>238
ttp://d.hatena.ne.jp/akiramei/searchdiary?word=%2a%5bC%23%5d
の下の方が参考になるかな?
Tが解決されるのはあくまで実行時。
Tに対して+なんて使うと問答無用でコンパイルエラーがでてしまう。
operatorはインターフェイスベースではないからwhereでの制限も不能なのだ。
0244デフォルトの名無しさん
NGNGはい、C++と勘違いしてる厨房がいますよ
0245237
NGNG貴重なページの紹介、ありがとうございます。
さっき書いた構想を、そのまま実装すればいいんですね。
0246デフォルトの名無しさん
NGNG{
private ListView lv1=new ListView();
private B b=new B();
private Add()
{
lv1.Items.Add("test");
b.Add(lv1.Items[0]);
}
}
public Class B()
{
private ListView lv2=new ListView();
private Add(ListViewItem item)
{
lv2.Items.Add(item) //実行時にここで複数の場所に追加できませんとエラーでます
}
}
なぜエラーが出るのでしょうか?
0247デフォルトの名無しさん
NGNG○public Add(ListViewItem item)
書き間違え
0248デフォルトの名無しさん
NGNGListViewItem は、複数の箇所(複数の ListViewや、一つのListViewに複数回)に追加できないからです。
Clone でコピーを作るか、新しく new で作るかして追加してください。
0249デフォルトの名無しさん
NGNGb.Add((ListViewItem)lv1.Items[0].Clone);
か
b.Add(new lv1.Items[0]);
ということですか?
0250デフォルトの名無しさん
NGNGドラッグ&ドロップにてデータの受け渡しをするにはどうしたらいいのですか?
0251デフォルトの名無しさん
NGNGまずform2のListBoxのAllowDropをtrueにして、から?
0252デフォルトの名無しさん
NGNGttp://dobon.net/vb/dotnet/control/draganddrop.html
■ このスレッドは過去ログ倉庫に格納されています