くだスレC#
■ このスレッドは過去ログ倉庫に格納されています
0001毛の生えたブリーフ
NGNG「どんなにくだらないC#プログラミングに関する発言でも誰かが優しく
レスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは
質問者自身なんだか意味がよく分からない質問など、勇気をもって書き込んで
ください。
0153151
NGNG133の言う通りのデザインを作って143さんのとこのリンクに書いてるコードをうなりながら入力したんよ
0154124
NGNGそのボタンの役割についてなにもかかれてないけど
これじゃあ、どんなプログラム作ればいいかわからない。
??ランチャ?もしかしてソフトを起動するだけのプログラム??
んー例題の意味すらわからない・・・
0155デフォルトの名無しさん
NGNG名前が衝突してますがな。
> private System.Windows.Forms.Button button1;
↑
> class button1 : Button
↑
0156デフォルトの名無しさん
NGNG0157デフォルトの名無しさん
NGNG>class button1 : Button
buttonクラスを定義する必要はないはずだ。
この定義が上で作ったボタンのインスタンスとかぶっているからそのエラーが出る。
0158デフォルトの名無しさん
NGNG0159124
NGNG利用法とか便利な使い方とか
ひとつのアプリを作るなんて私には到底無理です。
ヘルプ見ても意味さっぱりですし・・
--------------------------------------------------------------------
コントロール内の選択された項目のインデックスを取得します。
[C#]
public ListView.SelectedIndexCollection SelectedIndices {get;}
プロパティ値
選択された項目のインデックスを格納している ListView.SelectedIndexCollection 。項目が現在選択されていない場合は、空の ListView.SelectedIndexCollection が返されます。
-----------------------------------------------------------------------------------------------
こんなヘルプなんて見てもわかりません
0160デフォルトの名無しさん
NGNG通報しますた。
0161143
NGNGどうせだからprojectごと圧縮かましてUPったほうが良いと思うのだが。
0162124
NGNGなんで通報するの?
0163124
NGNGすいません。どうしてもわからないのでくだらない質問させてもらいます。
ListViewで複数選択されている項目をサブ項目とともに削除したいのですが
ListBoxならこんな感じでいけるのですがこれと同じ動作をするものありますか?
while(listBox1.SelectedIndex != -1)
{
listBox1.Items.RemoveAt(listBox1.SelectedIndex);
}
ListViewでこんな感じでやってるのですがうまくいきません。
listView1.Items.Remove(listView1.SelectedIndices);
よろしくおねがいします
0164143
NGNGとりあえずランチャーのサンプル。
作法で叩かれるの承知の上で出します(w
0165デフォルトの名無しさん
NGNGstrFileっつー版画利案っぽいのは感心しないなw
それから
//ファイル名ね。"\"のままでのいけるようだ。鬱だ。
\を\\にエスケープする必要があるのは " "で囲んだ文字列だけじゃないかと。
それから全ボタンが同じ処理ならば配列かなんかに叩き込んで一括で書いたほうがすっきりするかと。
0166デフォルトの名無しさん
NGNGその1
ListView.ListViewItemCollection items = listView1.Items;
ListView.SelectedIndexCollection sels = listView1.SelectedIndices;
foreach (int index in sels) {
items.RemoveAt(index);
}
その2
ListView.ListViewItemCollection items = listView1.Items;
ListView.SelectedListViewItemCollection sels = listView1.SelectedItems;
foreach (ListViewItem item in sels) {
items.Remove(item);
}
0167143
NGNG>165
ハンガリアン記法は、なんかクセになっちゃって…。
これでないと、なんか不安なっちゃうんだよね。
直さなきゃとは思うのだが…。
>\を\\にエスケープする必要があるのは " "で囲んだ文字列だけじゃないかと。
試したときは、ソース内に直で文字列指定したからか。
なるほど。
>それから全ボタンが同じ処理ならば配列かなんかに叩き込んで一括で書いたほうがすっきりするかと。
そだね。あんまり考えないで適当に作ったから、恥ずかしいところ
いっぱいだ…w
0168166
NGNG0169166
NGNG0171124
NGNG理屈はわかりませんが、うまくいきました!!
感謝です!
0172デフォルトの名無しさん
NGNGコレクションなんだから、foreachで一つずつ消していけって
事では?
0173124
NGNGこれってヘルプでは選択項目のインデックスを取得するって書いてあるのに
インデックスの値を返さないで、コレクション?を返してますよね。
それならコレクションを取得するって書けばいいのに・・・
ヘルプの間違い?それとも私がバカなだけ?
こういうどうとでも解釈とれるヘルプの文法でいつも悩んでます。
ListViewの場合はコレクションで消さないと無理なんですね。
コレクションが何であるかもよくわかりませんが。
foreach(ListViewItem item in listView1.SelectedItems)
{
listView1.Items.Remove(item);
}
一応これでいけるみたいなので使わせてもらいます。
でもこれだとだめなんですよね
foreach(object item in listBox1.SelectedItems)
{
listBox.Items.Add(item);
}
うううむ、ようわからん。
0174143
NGNG0175124
NGNGlistView2(項目2)も削除するには、やはりインデックスが必要だと思うんですが
この場合どうすればいいのでしょうか?
0176デフォルトの名無しさん
NGNG>>166のその1でインデックスを並べ替えて、降順で消していけばよいかと。
0177124
NGNGいけました!!
foreach(int idx in listView1.SelectedIndices)
{
listView1.Items.RemoveAt(idx);
listView2.Items.RemoveAt(idx);
}
これってすごく簡単にわかることなのでしょうか?
こういう方法やコレクションの構造とかヘルプに載ってないと思うのですが・・
基本的な何かの知識が不足してるのかな?
int idx=listView1.SelectedIndices;
だとインデックス取得できないけど
int idx in listView1.SelectedIndices;
これだと取得できるんですよね?
ううん、理屈はわからないけど、これでなんとかアプリ完成しそうです。
わたしも知識増えたら質問に答えるようにしたいです。
どうもありがとうございました。
0178デフォルトの名無しさん
NGNGあれ?並べ替えなくてもOKなの?
実際に試してないから分からんかった。
0179デフォルトの名無しさん
NGNGforeachは抽象化されたfor
この例だとidxに順番にSelectedIndicesの値がはいって、
それぞれについてブロックの中が実行される。
「このコレクションのやつら、順番に全員処理しちゃって〜」
みたいなのがforeach、コレクションはなんかの集合だと思え。
0180124
NGNGはい、並べ直さなくてもちゃんと削除できました
>>179
コレクションはなんかの集合・・
なるほど・・
SelectedIndicesって配列で格納されてるんですね、でもこれだと
listView1.Items.RemoveAt(listView1.SelectedIndices[0]);
項目が選択されていなかったり、重複しようものならエラーがでます。
foreachが一番無難みたいですね
クラスって実際どういう処理を行ってるか見えないので、なんかフラストレーションたまります
0181デフォルトの名無しさん
NGNG>はい、並べ直さなくてもちゃんと削除できました
んなわきゃない。
最後と最後から2番目の2つを選択して消してみ。
0182151
NGNG0183124
NGNGぐほ!ほんとだ、エラーでました・・・
並べ直さないとだめなのか・・・
こんな簡単な処理したいだけなのに・・なんでもっと簡単にできないんだろう・・
並べ直すってソートするってことでしょうか?
できるだけ順番崩さないで間を詰めるようにしたいのですが。
0185124
NGNG0186デフォルトの名無しさん
NGNGインデックスを大きい順に並べ替えて、後ろの項目から消すようにする。
そうすれば削除で番号がずれても影響が出ないから。
ListView.ListViewItemCollection cols = listView.Items;
ListView.SelectedIndexCollection sels = listView.SelectedIndices;
// 配列にコピー
int[] arr = new int[sels.Count];
sels.CopyTo(arr, 0);
// 配列を並べ替え
Array.Sort(arr);
Array.Reverse(arr);
// 順番に消していく
foreach (int n in arr) {
cols.RemoveAt(n);
}
0187124
NGNG0188デフォルトの名無しさん
NGNGこのランチャだとボタン増やせないね。
ドロップしたら動的にボタンが増えたりすると嬉しくないか?
0189デフォルトの名無しさん
NGNG0190151
NGNGそれとこの設定はどこに保存されてるのかな? レジストリ?
0191デフォルトの名無しさん
NGNG0192デフォルトの名無しさん
NGNG.NET Framework にはついてないみたいね。
DllImport を使用するとよろし。
あんまりお勧めはできないけど、手軽にならしたいんだったら sndPlaySound を使いませう。
using System.Runtime.InteropServices;
[DllImport("winmm.dll", EntryPoint="sndPlaySoundA")]
static extern int sndPlaySound(string lpszName, int dwFlags);
sndPlaySound("filename.wav", 1);
0194デフォルトの名無しさん
NGNGボタン増やしてみたんですけど ここは何をしてるとこですか?
//button判別。
Control control = (Control)sender;
String strButtonName = control.Name;
if(strButtonName == "button1")
{
strFile1 = strFile;
}
if(strButtonName == "button2")
{
strFile2 = strFile;
}
if(strButtonName == "button3")
{
strFile3 = strFile;
}
0195デフォルトの名無しさん
NGNG同じ関数がすべてのボタンに割り当てられてるので
どのボタンが押されたのが判別する必要がある。
押されたボタンオブジェクトがsenderにはいるので、その名前で判別してるわけ。
0196デフォルトの名無しさん
NGNGとかのほうが、パフォーマンス良いかも。
0197デフォルトの名無しさん
NGNG例えば「犬」っていうオブジェクトがあったとしますよね?
そのプロパティは「身長・体重・毛色」 メソッドは「走る・鳴く・噛み付く」
で、この例でクラスを説明するとどうなりますかね?
0198143
NGNG>195の説明の通りです。
あんまり無駄に関数増やすの嫌いなので…。読みにくくなるし。
メソッド間の動作の違いが少ないなら、そういうやり方もあると
いう事です。
>188のような動作をさせるなら、Buttonを配列等で管理して
やる必要がありますね。
>151
デフォルトからの変更点はだいたい>143に書いたとおりなので、
どこが違うのかを探してもらえればよろしいかと。
その上で、新しくプロジェクトを開いて、コピペではなく手打ちで
ソース構築してみてください。横に置いて見ながらでも良いので。
さて、アイコン取得はどうすれば良いのだろうか…w
0199143
NGNGクラスは、犬そのものを表現します。その特徴と行動ですね。
犬のクラスのオブジェクト作成すると、そこにあるのは1個体
としての犬です。別のオブジェクトを作成すると、また別の犬
を表します。その区別は、プロパティで行います。
(身長や体重や毛色を別にセットすれば、区別出来ます。
名前も入れるのは当然ですが。)
自然に考えれば、犬によってその行動も異なりますが、実際
にクラス設計する場合は、その差異も全てプログラミング
することになります。(メソッド内部でプロパティをチェックして、
どういう特徴を持った犬ならどういう行動をするかを全て
プログラミングする)
0200143
NGNGhttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1003826049&res=35
0201143
NGNG0202デフォルトの名無しさん
NGNG0203143
NGNGヒントってどうやればいいのだろうか…?
C++Builderなら専用のプロパティが用意されてたのだが…。
0204143
NGNG・アイコン取得、表示
・対象のファイル名をポップアップ表示
http://members.tripod.co.jp/kajusan/LauncherTest2.zip
ToolTip使わなきゃいかんのか。手間にはならんから良いか。
>ポップアップ
0205デフォルトの名無しさん
NGNGツールチップが .lnk の名前で出てくるのが惜しまれる。
0206143
NGNGごはっ。リンク取得します。(素で忘れてた…鬱)
0207143
NGNG・アイコン取得、表示
・リンクターゲット取得、ポップアップ表示
http://members.tripod.co.jp/kajusan/LauncherTest2.zip
アイコンのキャッシュのせいかな?うちの環境だと、エクスプローラ
のアイコンがマイコンピュータのアイコンになってしまってる。
鬱だ。
(特異な例だと思うけど、たとえばAniLaPaintだと、ターゲットが
正常に取得されない…っていうか、設定が普通じゃない。
プロパティで見てもおかしい。なんちゅー設定やねん。)
0208124
NGNG取り組み方が間違っていたように思います。
オブジェクト指向以前の言語では好きなコードから覚えて、プログラムは上から
順に実行されるので順番だけ気にしてコードを打ち込めばそれなりのプログラム
は出来てましたが、このC#はそれが通用しないんですね。
基本である文法をまず学んでから必要なときにコードを学び使用するというのが
一番習得が早そうに思います。
もちろん、記憶力のずば抜けた赤ん坊なら言葉を学ぶように単語(コード)から学んで
それから文章(文法)を成り立てるという方法もいけるでしょうが、私には到底無理です。
もう一度一から基本を勉強してまいります。
0209デフォルトの名無しさん
NGNG0210デフォルトの名無しさん
NGNGCもまだ全然使いこなせてはいませんが、GUIベースでもっと派手なプログラミングがしたいので、
C#への移行を考えています。
これで問題ないでしょうか?
考え方次第でしょうが、Cを完全にマスターしてからとかC++も一通り勉強したほうがいいのでは
ないかとと思ったりもしています。
どうでしょうか?
0211デフォルトの名無しさん
NGNGC# と C、C++ は全然違います。
C++ のバージョンアップ版が C# というわけではないので、最終的に C# に移行したいのならそのまま C# 覚えるのが吉。
0212デフォルトの名無しさん
NGNGC++の深い知識は必要ないけど、Win32 APIは覚えておいた方がいいかも。
GUIやるなら特に。
0213143
NGNGガソバレ。
自分はそんなに真面目じゃなくて、結構適当にやってますw
基礎は必要だけど、あんまり基礎ばっかりだと気分萎えちゃう
から、やっぱり作りたい物を目標に頑張るのが一番かな?
>210
C系で楽にGUI〜〜ってのだったら、C++Builderを推すんだけど、
すでにC#がC++Builder化しちゃってるから、C#で良いです。
GUIもフォームデザイナが楽で良いんだけど、少しは手打ちで
やったほうが良いと思います。構造が良くわかります。
CやC++もC#のための基礎にはなるけど、それはC#でも学べる
ことだし、特別CからとかC++からとか言うのは考えなくて良いと
思います。
0214210
NGNG貴重な意見どうもありがとうございました。
もうすでに「始めようC#」の本を購入して体験版でGUIのプログラムを組んでみたのですが
C#をやるためには、Cへのちゃんとした理解やC++の学習も必要なのでは?
と思い質問させていただきました。
0215デフォルトの名無しさん
NGNG0216143
NGNGSocketはまだ使ったことありませんが……
.NET Framework SDK ドキュメントにSocketクラスがあります。
普通のサンプルも用意されてますし、メソッドの説明にもサンプルがありますよ。
たとえば
http://samples.gotdotnet.com/quickstart/util/srcview.aspx?path=/quickstart/howto/samples/net/TCPUDP/dateTimeClient.src&file=CS\datetimeclient.cs&font=3
とか。どうでしょうか?
0217デフォルトの名無しさん
NGNGあんたは神です。ありがとう。
0218デフォルトの名無しさん
NGNGオブジェクト指向というか、フレームワークやクラスライブラリのことね。
全部覚えてから順に使用するってのは確かに最初は効率悪い。
まずは適当に初めて、どっかの段階で立ち止まって全体を(覚えられなくても)
ざっと読むってのを薦めます。
べつにオブジェクト指向に限らず、潤沢に既存コードを再利用可能な状況では
だいたいそんなもんです (Win32 の API とか、unix で人のソース流用とか)。
0219デフォルトの名無しさん
NGNGただ用意された機能の範囲を超える物は作りづらい
これはVBでも同じですけど
コンポーネント指向の宿命でしょうか
0220デフォルトの名無しさん
NGNGいかにも夏らしいね
0221デフォルトの名無しさん
NGNG143さんが作ってた3つは正常なのになぜか増やしたボタンが機能しない・・・
まったく同じにコピペしてボタンの数字だけ変えたのに
なんでだろ?
0222デフォルトの名無しさん
NGNG0223デフォルトの名無しさん
NGNGボタン増やしてもできたよ。当たり前か。
数字とかsenderで分岐してるとこ再確認。
0224143
NGNGすることは
1.フォームデザイナでbutton4を追加。Clickイベントにbutton_Clickセット。
2.クラスForm1内部でString型でfileName4を宣言。
3.コンストラクタ内部で、button1〜3と同様にAllowDrop、DragEnter、
DragDropをセット。
4.Form1_DragDrop内部で、button1〜3と同様にbutton4の処理も追加
5.button_Click内部で、button1〜3と同様にbutton4の処理も追加。
このくらいかと。
1番3番辺りが忘れやすいかな?あと、1〜3の処理をコピペした時に
4として書き換えるのを忘れた箇所があるとか。
一度成功したら、全部手書きでやってみてね。
プログラム板にUP掲示板って無いの?ソースUP用にありそうなものだけど。
0225デフォルトの名無しさん
NGNGhttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/index.html
のソース置き場.NET(48)あたり
0226143
NGNG今までみてたのは、.NETのスレだけだったのか…。
ソース置き場.NET(48)は、問題のソースじゃなくてサンプルになる
ソースを置く場所だと思うけど。
専用のスレを立てるか、汎用の質問スレを立てるか(Delギコさんが
立ててるけど、これDelphi専用な雰囲気。うーん)したほうが良いと
思うのだが、どうだろうか。
0227221
NGNG143さんのソースでようやくボタン増やせたよ!
原因は「Clickイベントにbutton_Clickセット」でした。。。
昨日何時間もソース見てたんで何がダメなのかサッパリでしたよ
まだまだわかってないんだなぁ
とにかく143さんに感謝! あなたのおかげで何げに良スレ化してますよ(w
もうちょっと慣れたらチャットソフト作りたいなー!
0228デフォルトの名無しさん
NGNG>あなたのおかげで何げに良スレ化してますよ(w
ナイス喧嘩の売り方。
俺たちは役立たずか。
じゃあ役立たずなりに振る舞わせてもらう。
0229デフォルトの名無しさん
NGNG0230デフォルトの名無しさん
NGNG0231デフォルトの名無しさん
NGNG?
E
0233143
NGNGえっと、ドキュメントを見ると、switch文は
ms-help://MS.NETFrameworkSDK.JA/csref/html/vclrfTheSwitchStatement.htm
switch (expression)
{
case constant-expression:
statement
jump-statement
[default:
statement
jump-statement]
}
という定義です。で、評価式であるexpressionの説明では、
expression
整数型または文字列型の式。
ということになってます。整数型は関係ない(Cならポインタに
してやってから数値で評価とか出来るけど、C#は知らない)
として、文字列での式評価に関しては、LauncherTest1で
行っているような、Control継承オブジェクトのプロパティName
で行えます。以下のような感じです。
Control control = (Control)sender;
switch(control.Name)
{
case "button1":
if(fileName1 != null)
Process.Start(fileName1);
break;
}
0234デフォルトの名無しさん
NGNGポリモルできないの?
0235デフォルトの名無しさん
NGNGprivete void exit_Click(object sender, System.EventArgs e)
{
Application.Exit();
}
これやると「無効なトークン 'void' が クラス、構造体またはインターフェイスのメンバ宣言で使用されています。」ってでます
回避する方法はないでしょうか?
0236デフォルトの名無しさん
NGNGコンパイルエラーじゃん・・・。
前後の行も見直して。
0237デフォルトの名無しさん
NGNGprivete → private
0238235
NGNGお、終われませんよ・・・「Application.Exitメソッド」ですよね?
0239143
NGNGえっと、どの部分でしょうか?
>Control control = (Control)sender;
ここは無理です。
error CS0029: 型 'object' を型 'System.Windows.Forms.Control' に暗黙的に変換できません。
switchの評価式に関してでしょうか?
数値型だと
System.Object
System.ValueType
System.Int32
Control型だと
System.Object
System.MarshalByRefObject
System.ComponentModel.Component
System.Windows.Forms.Control
ってことになってますから、無理でしょう。
実際にObject型のsenderをswitch評価式に叩き込んでも、
CS0151が返ってきただけです。
継承先から継承もとへの暗黙の型変換は行えても、その
逆は無理なのでは?
0240143
NGNGこのメソッドは全スレッドで実行中のメッセージ ループをすべて停止し、
アプリケーションのウィンドウをすべて閉じます。このメソッドによって、
アプリケーションが強制的に終了させられることはありません。通常、
Exit メソッドは、メッセージ ループ内から呼び出され、強制的に Run を
返します。現在のスレッドだけのメッセージ ループを終了するには、
ExitThread を呼び出します。
注意
Application.Exit メソッドが呼び出されてアプリケーションを終了
する場合、 Form.Closed イベントと Form.Closing イベントは発生しませ
ん。これらのイベントのいずれかに実行する必要がある検証コードがあ
る場合は、 Exit メソッドを呼び出す前に、開いている各フォームに対して
Form.Close メソッドを個別に呼び出す必要があります。
ループ終了のメッセージを通達するだけのメソッドですから、強制的に
終了は出来ませんね。つまりどこかのループがメッセージに応じて
いないと。
FormをClose()させてやったらどうでしょうか?
0241235
NGNGprivate void Form1_Closing(object sender,System.ComponentModel.CancelEventArgs e)
かな・・・ちょっとやってみます サンクス
0242235
NGNGApplication.Exitやってみたら普通に終われました。
これをコンテキストメニューを使ってフォーム上の右クリックから終わりたいんです
なんでできないんだろう・・・
0243143
NGNGmenuItemのClickイベントがおかしいのではと思います。
0244デフォルトの名無しさん
NGNG0245143
NGNGDoubleClickイベントだけど、VSのフォームデザイナでは標準では
表示されないね。自分でセットしないと。
0246デフォルトの名無しさん
NGNGnrLauncherみたいに
0247デフォルトの名無しさん
NGNG> DoubleClickイベントだけど、VSのフォームデザイナでは標準では
> 表示されないね。自分でセットしないと。
稲妻マーク押して見るべし
0248143
NGNG今わかった。Buttonにダブルクリックなんてあるわけないヽ(`Д´)ノ ウワァァン
0249デフォルトの名無しさん
NGNGちょっと調べた結果、Form.Show.Dialogってやつを使うみたいね
0250デフォルトの名無しさん
NGNG何もないとこのダブルクリックってどやってキャプチャするの?
>>249
なぜにだいあろぐ?
0252143
NGNG>249
「何もないところ」というより、「どこでも、どんな時でも」と言った
方が正確かと。
>250
APIならイベントプロシージャを作ってやって、結構簡単にイベント
監視出来るんだけど…。.NET単体では無理なのかなぁ。
ドキュメント見てるんだけど、それっぽい(システムレベルでの
イベント監視)のは見あたらない。本スレで聞いた方がいいかな?
■ このスレッドは過去ログ倉庫に格納されています