トップページ⇒tech
1001コメント310KB

ふらっとC#,C♯,C#(初心者用) Part67

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2010/12/16(木) 18:23:33
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からない場合など、勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

なお、テンプレ2行目が読めない回答者は邪魔なので後述のC#相談室に移動して下さい。

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっとC#,C♯,C#(初心者用) Part66
http://hibari.2ch.net/test/read.cgi/tech/1290854247/

■関連スレ
C#, C♯, C#相談室 Part63
http://hibari.2ch.net/test/read.cgi/tech/1289733048/
VB.NET質問スレ(Part35)
http://hibari.2ch.net/test/read.cgi/tech/1284423653/
くだすれC++/CLI(初心者用)part2
http://pc12.2ch.net/test/read.cgi/tech/1268613679/

■備考
コードの量が多い場合は下記サイトを使うなどしたほうがいいかも
http://ideone.com/
コードを貼り付けてRun codeのチェックをはずしてsubmitボタンを押すと
コードを鯖側にアップして専用のアドレスが発行されます。

直接貼る場合は下記サイトなどを利用してhtmlエンコードした方が
インデントも残って見やすいです
http://kawama.jp/php/encode_html.php
0455デフォルトの名無しさん2010/12/30(木) 09:35:49
クラスって何の為にインスタンス化するの?
スタティックメソッドじゃダメなの?
0456デフォルトの名無しさん2010/12/30(木) 09:56:00
いいよ
0457デフォルトの名無しさん2010/12/30(木) 10:46:25
キャー
ミナガワケンジサーン
04584322010/12/30(木) 11:25:19
>>453
理解に及ばず申し訳ない…
>>454
ピンときました!
ありがとうございます。
試してみます!
0459デフォルトの名無しさん2010/12/30(木) 11:51:02
再度質問させてください。
StringのContainsは"xxを含む名前の物"ですが、
"xxという名前の物"を調べるには何を使えばいいのでしょうか。
0460デフォルトの名無しさん2010/12/30(木) 11:55:33
str == xx
str.Equals(xx)
上の方が普通
0461デフォルトの名無しさん2010/12/30(木) 12:00:22
test
0462デフォルトの名無しさん2010/12/30(木) 12:09:18
>>460
ありがとうございます!
0463デフォルトの名無しさん2010/12/30(木) 12:13:43
すげーな。
俺、459の質問の意味が全くわからなかったぞw
0464デフォルトの名無しさん2010/12/30(木) 12:28:48
struct Person
{
public string name;
public uint age;
public string address;
}

class Person
{
public string name;
public uint age;
public string address;
}

これって根本的に同じですよね?
コンストラクタで値の改変とかのメソッドを実行しない場合って、
複数の変数の保持にクラス使う意味無いですよね。

保守性の為に部品として使うならスタティックメソッドで良いし、
何の為に実体化するのかわからなくなってきた・・・
クラスを実体化するメリットを教えてください
0465デフォルトの名無しさん2010/12/30(木) 12:33:06
>>464
> これって根本的に同じですよね?
どんな根本を想定してるのか知らんが
おいらの感覚では根本的に別物だな

> コンストラクタで値の改変とかのメソッドを実行しない場合って、
> 複数の変数の保持にクラス使う意味無いですよね。
意味が分からん
構造体があれば十分って意味?

> 保守性の為に部品として使うならスタティックメソッドで良いし、
なんでメソッドが出てくるのか…?

> 何の為に実体化するのかわからなくなってきた・・・
> クラスを実体化するメリットを教えてください
人が二人いたら二つインスタンスが必要だろ?
0466デフォルトの名無しさん2010/12/30(木) 12:39:05
>>465
保持してる変数だけでみたら扱い同じですよね?
クラスと構造体の違いがわからなくて
メソッドの事は忘れてください
0467デフォルトの名無しさん2010/12/30(木) 12:42:47
まず値型と参照型の違いを理解しているかどうかだ
0468デフォルトの名無しさん2010/12/30(木) 12:43:31
Personみたいな単語が出てくる時点で基本的に常にクラスだけでおk。
構造体を使うのは特殊な場合に限られる。違いが分からないなら使う意味無し。
たとえばインスタンスAがインスタンスBを参照してて、Bが編集フォームで変更された場合
BがクラスならAが参照してるBも更新されるけど、構造体だと変わらない。
0469デフォルトの名無しさん2010/12/30(木) 12:52:13
>>466
似てるように見えるが扱いが違う
http://ufcpp.net/study/csharp/oo_reference.html#classification
0470デフォルトの名無しさん2010/12/30(木) 12:55:48
>>467-468
classが参照型で、structが値型だというのは覚えてるんですが、それだと
クラスの
Person a = new Person();
Person b = new Person();
と
構造体の
Person a = new Person();
Person b = a;
は同じことになるんですかね
0471デフォルトの名無しさん2010/12/30(木) 12:58:43
ならない
クラスはCloneしないと複製できない
構造体はコピーになる
0472デフォルトの名無しさん2010/12/30(木) 13:05:21
464じゃ無いけど、使い分け俺も良く分からん。
根本的には別物だと思う、使用するメモリがスタックかヒープかって結構大きい違い。
構造体
・スタックなのでアクセスが早い。(生成も?)
・(メンバは別として)シャローコピーされない分イミュータブルオブジェクトに向く?
・GCの対象外なので破棄も早い
クラス
・変数の実態は参照(4or8バイト)なので、受け渡しが早い。
・参照により複数の変数から同一インスタンスにアクセスできる。

以上が俺の認識。
スタックって何MB使えるの?
Color構造体の例とか見ると、Enumをベースに拡張したい場合に使えばいいかな?
0473デフォルトの名無しさん2010/12/30(木) 13:13:19
>>470
これを実行するとわかるよ
http://ideone.com/bbtBH

>>472
基本的にクラスでいいと思うよ
0474デフォルトの名無しさん2010/12/30(木) 13:15:38
なるほど、よくわかりました
ありがとうございます

それだと、値型のように別のオブジェクトで変数を持ちたいけど、
いずれ継承で拡張したい場合なんかは、いったいどうしたら
0475デフォルトの名無しさん2010/12/30(木) 13:16:02
public class A
{
public int hoge { get; set; }
}

public struct B
{
public int hoge { get; set; }
}

public void Test(A a, B b)
{
a.hoge++;
b.hoge++;
}

ここら辺の違いさえわかってれば
大概は「どっち使おうが気にすることは無い」んじゃないかな。
0476デフォルトの名無しさん2010/12/30(木) 13:18:29
継承じゃなくてインターフェイスにする
0477デフォルトの名無しさん2010/12/30(木) 13:21:11
まず引数に値を返す構造が嫌い
0478デフォルトの名無しさん2010/12/30(木) 13:24:30
outも使えない、そんな世の中じゃ
0479デフォルトの名無しさん2010/12/30(木) 13:25:43
嫌いだったとしても、ちゃんとわかって使わないと
返らないと思って使ってたら返ってた、なんてことになるって話だろう
0480デフォルトの名無しさん2010/12/30(木) 13:27:14
>>477
Fillなんちゃらとか、適切な名前ならいいでしょ
0481デフォルトの名無しさん2010/12/30(木) 14:45:16
回転が出来ません!

Quaternion xz = new Quaternion(new Vector3D(1, 0, 1), degreexz);
A.Rotate(xz);

回転角degreexz[°]でXZ軸でAを回転させたいのですが、どこがおかしいでしょうか。ご指南お願いします。
0482デフォルトの名無しさん2010/12/30(木) 14:46:46
マルチなのでスルーで
0483デフォルトの名無しさん2010/12/30(木) 14:50:48
間違えてXAMLのとこに書いちゃったからこっちに書きなおしたんだけど、
マルチだからスルー、とかよくわkんないんだけど、なんか答えちゃいけない規則でもあるの?
0484デフォルトの名無しさん2010/12/30(木) 14:51:45
削除依頼が出ていませんのでスルーで
0485デフォルトの名無しさん2010/12/30(木) 14:59:28
マルチ?だと答えちゃいけない規則とかあるの?テンプレに書いてないけど。
0486デフォルトの名無しさん2010/12/30(木) 15:03:35
2ちゃんねるの使い方がわかってないのでスルーで
0487デフォルトの名無しさん2010/12/30(木) 15:18:34
質問が意味不明
何のライブラリのQuartanionやVector3Dなのかわからない。
C#から使えるMS製ライブラリのうちQuartanionやVector3Dを含むものは複数存在する。WPFならそう書け。
何を回転させたいのか具体的に書け。
0488デフォルトの名無しさん2010/12/30(木) 16:55:52
string Aの中に、List<string>にはいっている文字列がいくつ入っているか数えたいのですが、
どうやればいいかわかりません。
LINQを使えばできたと思うのですが、どう書けばいいものやら…
どなたか教えていただけませんでしょうか?よろしくお願いいたします
0489デフォルトの名無しさん2010/12/30(木) 17:13:44
list.Count(A.Contains)?
0490デフォルトの名無しさん2010/12/30(木) 17:22:07
var count = Regex.Matches(A, list.Aggregate((x, y) => x + "|(" + Regex.Escape(y) + ")")).Count;
とか
0491デフォルトの名無しさん2010/12/30(木) 17:49:51
クラスか構造体か迷ったらここを参考にするといい
http://msdn.microsoft.com/ja-jp/library/ms229017.aspx
0492デフォルトの名無しさん2010/12/30(木) 17:50:44
>>491
MSDNにしてはわかりやすい。
0493デフォルトの名無しさん2010/12/30(木) 18:04:50
>>491
>インスタンスのサイズが 16 バイト未満である。
っていうとintだと3つまでか?
0494デフォルトの名無しさん2010/12/30(木) 18:12:18
Rectangleディスってんのか?
0495デフォルトの名無しさん2010/12/30(木) 18:52:48
>インスタンスのサイズが 16 バイト未満である。
また随分と簡潔な基準だな。
これだと、構造体にするべきケースって殆ど無さそう。
0496デフォルトの名無しさん2010/12/30(木) 19:07:54
元の文章読みなおせ。
0497デフォルトの名無しさん2010/12/30(木) 19:08:58
C#で録音機能をつけたいのですが、方法はありますか?
自分が製作しているプログラムは複数音の再生なので、それを録音したいのです。
録音の方法はPCから鳴っている音を録音する方法が良いのかなと考えています。
サウンドレコーダー程度のものでいいので、つけることは出来ますか?
サウンドレコーダーがC#のプログラム上で自動で録音を始めることさえ出来れば良いのですが…

長文大変申し訳ありません。
よろしくお願いします。
0498デフォルトの名無しさん2010/12/30(木) 19:11:11
ありがとうございます。
試してみます!
0499デフォルトの名無しさん2010/12/30(木) 21:34:03
チャーリー浜か
0500デフォルトの名無しさん2010/12/31(金) 14:36:03
録音ソフトの録音スタートのボタンを
ウィンドウメッセージで押すとかすればいいんじゃないの
0501デフォルトの名無しさん2010/12/31(金) 15:43:18
異なるウェブフォーム間で効率的に値を受け渡す方法が分かりません
WebForm1.aspx内のclass Aで計算した値をWebForm2.aspx内のclass Bへ受け渡したいです

始めにclass A内の計算を実行して、Labelに結果を表示してからWebForm2.aspxへ移り
WebForm2.aspxのclass Bでclass Aの計算結果を使用したいので
class Bでclass Aをインスタンス化しclass A内の計算を実行させると
2度同じ計算をさせることになるので一度で済ませる方法がないか探しています
0502デフォルトの名無しさん2010/12/31(金) 16:24:15
セッション使えば?
0503デフォルトの名無しさん2010/12/31(金) 19:32:03
C#スレのみなさん、今年もありがとうございました。大変お世話になりました。

来年はどうもQtスレに行くことになりそうです。
0504デフォルトの名無しさん2010/12/31(金) 21:35:20
そうですか。初心者さんに丁寧に教えてあげてくださいね。
0505デフォルトの名無しさん2010/12/31(金) 22:35:05
>>502
ありがとうございます
0506デフォルトの名無しさん2010/12/31(金) 22:54:49
何度も聞いたが答えないようなのでもう一度言う
インデクサの使い方教えろ
0507デフォルトの名無しさん2010/12/31(金) 23:22:11
クラスを配列と同じような感覚で使いたいとき
0508デフォルトの名無しさん2010/12/31(金) 23:37:03
public class A
{
public int this[int a, int b, int c]
{
get
{
return a*b*c;
}
}
}



A test = new A();
Console.Writeline("{0}", test[1,2,3]);



6
0509デフォルトの名無しさん2010/12/31(金) 23:40:38
普通は Collection クラスに使用する
3 次元ベクトル を表す Vector3D クラスのコレクションクラス Vector3DCollection を作ったとしたら、
それを配列のように扱いたいことがあるはず。

んじゃあ、配列使えよって言うかもしれないが、配列にはメソッド作ったり出来ないし、
その他ゴニョゴニョできないからね。(拡張メソッドレベルなら作れるけど。)

まあ、string とかも添字に使えるから色々な使い方があるだろうが。
0510デフォルトの名無しさん2011/01/01(土) 00:18:40
便乗だけど、VB製クラスのPropertyInfoがインデクサかどうか確実に見分ける手段ってある?
0511デフォルトの名無しさん2011/01/01(土) 08:38:48
>>497です。
>>500さんありがとうございました。

ウィンドウメッセージとは具体的にどのような命令(コード)なのでしょうか?
初心者の質問で申し訳ないです。
0512デフォルトの名無しさん2011/01/01(土) 10:56:07
>>510
型に付いてるDefaultMemberAttributeを調べる
PropertyInfoだけじゃ分からん
0513デフォルトの名無しさん2011/01/01(土) 11:43:31
TextBox内でのSortの方法を教えてください。
0514デフォルトの名無しさん2011/01/01(土) 12:07:00
それだけじゃ誰も答えられません。
0515デフォルトの名無しさん2011/01/01(土) 13:08:48
>>512
Reflectorで見てもDefaultMemberAttributeが使われてないから不思議だったんだけど、C#だと出ないのね
ありがと
0516デフォルトの名無しさん2011/01/01(土) 15:24:03
>>419
何もかもが終わった
byte[]のwavデータを一時停止するなんて高度(笑)なことができるわけがなかったんだ


・DirectAudio
Direct〜は嫌いだから使わない

・XAudio
wav再生できない

・WPFのMediaElement(一番簡単)
ファイルからしか再生できない
silverlight使えばsetsourceでいけるけど勉強する気がない

・ActiveXのWMP
ファイルからしか再生できない
0517デフォルトの名無しさん2011/01/01(土) 15:28:29

> Direct〜は嫌いだから使わない
> Direct〜は嫌いだから使わない
> Direct〜は嫌いだから使わない
0518デフォルトの名無しさん2011/01/01(土) 15:55:49
>>517
文句は言わせないぜ
へへへ
0519デフォルトの名無しさん2011/01/01(土) 16:28:05
>・XAudio
>wav再生できない

え?
0520デフォルトの名無しさん2011/01/01(土) 16:35:03
>>519
やる気がないってことだよ
言わせんな恥ずかしい
0521デフォルトの名無しさん2011/01/01(土) 18:47:54
XAudioでwavはやったことあるけど
wavはヘッダだけ飛ばせばあとはデータをそのままバッファに直接書き込むだけ
0522デフォルトの名無しさん2011/01/01(土) 23:20:36
>>516
言い訳が酷すぎるだろw
0523デフォルトの名無しさん2011/01/01(土) 23:59:28
楽しんでいただけたのなら光栄でございます
一時停止なくてもボタン1つ消えて使用者が少し不便になるだけだし
まぁなくてもいいかなって気分になってきたのだ(・´ω`・)
0524デフォルトの名無しさん2011/01/02(日) 04:51:35
http://www1.axfc.net/uploader/Sc/so/189877.zip
pass:news
0525デフォルトの名無しさん2011/01/02(日) 04:55:09
できるかどうか不明ですが
0526デフォルトの名無しさん2011/01/02(日) 07:29:52
FormのClickにハンドラを書くときに
Form.Click +=まで入力すると 「new EventHandler(Form_Click); 挿入するにはTabを押してください」と表示され
Tabを押すと、Form.Click +=new EventHandler(Form_Click); 「このクラスにハンドラー'Form_Click'を生成するにはTabを押してください」となり
またTabを押すと自動で
void Form_Click(object sender, EventArgs e) {
  throw new NotImplementedException();
}
まで挿入されますが、これをTab押したときにラムダで挿入するやり方はありますか?

こんな感じで挿入してくれるとうれしいのですが。
Form.Click += (sender, e) => {
};
0527デフォルトの名無しさん2011/01/02(日) 10:16:50
無理
(以下のコードスニペット作れば
0528デフォルトの名無しさん2011/01/02(日) 12:25:52
VS2008Proを使ってます。
ListViewで列、項目を入力して試しにデバッグさせてみたらアイテム名が表示されません。
デザイナでは視覚的に確認できるのですが、書き出すと真っ白になってしまいます。
どういった原因が考えられるでしょうか?
0529デフォルトの名無しさん2011/01/02(日) 14:39:06
>書き出すと
???
ビルドして実行すると、ってこと?
0530デフォルトの名無しさん2011/01/02(日) 15:18:40
>>529
はい。ビルドして実行すると、です。
0531デフォルトの名無しさん2011/01/02(日) 16:07:06
ちょいとくだらない質問するけど
ListBoxって選択されてる項目のTextしか取得できないの?
Items.Countでループさせて、全項目のText取得したいんだけど
もしかして、ループ時に順次select状態にしてText取得していかなきゃだめなの?
そんでループ処理後にselect状態の項目をループ前の状態に戻すしかないの?
うーん・・・
0532デフォルトの名無しさん2011/01/02(日) 16:10:35
Items[i].SubItems[j].Text
0533デフォルトの名無しさん2011/01/02(日) 16:12:24
ごめんListViewと間違えた。
0534デフォルトの名無しさん2011/01/02(日) 16:15:02
>>531
本当にくだらない質問だな....
こんなところにうだうだ書いてる時間に試してみればいいのに
05355282011/01/02(日) 16:34:47
ListViewのプロパティでOwnerDrowをFalseにしたらビルド後も正常に表示されました。
お騒がせしました。
0536デフォルトの名無しさん2011/01/02(日) 16:44:23
>>534
試したからいってるんだけど
「それしかないの?」って
フフン
0537デフォルトの名無しさん2011/01/02(日) 17:00:50
>>531
ListBoxに与えるテキストって利用者が勝手に変えたりするの?

固定なら最初からstring配列で持っておいて・・・とかすればいいんじゃないの?
0538デフォルトの名無しさん2011/01/02(日) 17:23:11
ここで答えてくれる人ってどんなライブラリ使えばいいか即答するけど、
もしかして全部覚えてるの?
0539デフォルトの名無しさん2011/01/02(日) 17:25:37
>>538
ライブラリを数個しかしらなくてもその時々でたまたま知ってる人が覗いてれば問題ない

0540デフォルトの名無しさん2011/01/02(日) 18:23:44
>>537
ありがとう
それしかないか
0541バルサン(´・ω・`) ◆E.J7ujd3Xbu. 2011/01/02(日) 18:34:31
(´・ω・`)
0542バルサン(´・ω・`) ◆E.J7ujd3Xbu. 2011/01/02(日) 18:47:17
(´・ω・`)あ
0543バルサン(´・ω・`) ◆E.J7ujd3Xbu. 2011/01/02(日) 18:55:12
なんや(´・ω・`)
0544デフォルトの名無しさん2011/01/02(日) 18:57:09
ListBox..DisplayMember = "Name";
ListBox..ValueMember = "Code";
ListBox.DataSource = (DataTable)xxx;

でforeachやforでxxxのDataRowを参照すればいいんじゃないの?

0545デフォルトの名無しさん2011/01/02(日) 19:22:55
>>524
ありがとう
wavデータサイズを固定指定してるところを可変にして、ループ再生用のwhileを消して、再生中ステータス取れるようにして
もろもろ修正したらうまく動いたよ
ありがとう
0546デフォルトの名無しさん2011/01/03(月) 03:08:49
>>544
ありがとう
でもこれでいけたYo
(string)listbox1.Items[0]
0547デフォルトの名無しさん2011/01/03(月) 17:40:04
public interface interfaceA {
 int a;
}
public interface interfaceB : interfaceA {
 int b;
}
public class classC : interfaceB { 
}

の時、classC.aは使えないんですか?
0548デフォルトの名無しさん2011/01/03(月) 17:40:24
c#からサウンドプレイヤーをコマンドから起動し、録音をします。
そのとき録音時間を変数などに入れて時間を指定して起動させたいのですが方法はありますか?
コードはこれです。

Process roku = new Process();
roku.StartInfo.FileName = Environment.GetEnvironmentVariable("ComSpec"); // cmd.exe
roku.StartInfo.CreateNoWindow = true; // 起動に ウィンドウ を使用しない
roku.StartInfo.UseShellExecute = false; // 起動に OS のシェルを使用しない
roku.StartInfo.RedirectStandardInput = false; // 標準リダイレクト入力を不許可
roku.StartInfo.RedirectStandardOutput = true; // 標準リダイレクト出力を許可
roku.StartInfo.Arguments = @"/C SoundRecorder /FILE rec1.wma /DURATION 0000:00:00 /ON"; // コマンド設定(/C = 実行後 終了)
roku.Start(); // 起動

下から2行目の@"/C SoundRecorder /FILE rec1.wma /DURATION 0000:00:00 /ON"の
DURATION 0000:00:00に数値を入れるといいのですが、それを変数を使って代入したいのですが
どう書けば時間を指定できますか?

0549デフォルトの名無しさん2011/01/03(月) 17:45:58
>>548
マルチメディア系のAPIとか機能使って録音した方がよくねえ?
0550デフォルトの名無しさん2011/01/03(月) 17:46:39
>>548
string time = "0000:00:00";
roku.StartInfo.Arguments = @"/C SoundRecorder /FILE rec1.wma /DURATION " + time + @" /ON"
0551デフォルトの名無しさん2011/01/03(月) 17:55:21
>>547
そもそもinterfaceにフィールドは定義できない
0552デフォルトの名無しさん2011/01/03(月) 18:08:45
>>549
使い方がよくわからなかったので諦めました。

>>550
ありがとうございます。

指定する時間が複数の場合、あらかじめ代入してた変数を使って行いたい場合はどうすればよいですか?
秒の部分しか使わないのですが…。
05535502011/01/03(月) 18:36:44
>>552
string time = "0000:00:00";
の秒の部分を変える。
0554デフォルトの名無しさん2011/01/03(月) 18:42:04
やりたいことがよくわからんが

string sec = "00";
string time = "0000:00:" + sec;

こんな感じでいいんじゃね?
■ このスレッドは過去ログ倉庫に格納されています