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

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

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

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

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

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

■関連スレ
C#, C♯, C#相談室 Part62
http://hibari.2ch.net/test/read.cgi/tech/1284775031/
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
0232デフォルトの名無しさん2010/10/21(木) 21:07:08
String.PadRight or PadLeft
0233デフォルトの名無しさん2010/10/21(木) 21:09:07
>>231
文字を作り出すのなら new String(char, count) も。
参考書より、この手のものはコンストラクタかメソッドか静的メソッドのどれかにあるわけだから
入力補完を眺めるのがいいと思うよ。
0234デフォルトの名無しさん2010/10/21(木) 21:22:02
>>233
理想の動きができました
ありがとうございます
0235デフォルトの名無しさん2010/10/21(木) 21:27:09
>>233は文字列を作り出すならこういうやり方もあるよ」とうことであって
>>231の目的ではPadRightとPadLeftが正解だろ
そのまんま「文字列が指定した文字数に達していなかったら足りない分だけ指定した文字で埋める」メソッドだ
0236デフォルトの名無しさん2010/10/22(金) 07:34:12
ReactiveExtensionsって何?おいしいの?
0237デフォルトの名無しさん2010/10/22(金) 07:48:04
>>236
イベントにたいする処理や非同期呼び出しをLINQ使って簡単に処理出来るようになるよ。
0238デフォルトの名無しさん2010/10/22(金) 08:15:49
まだ始めたばかりのものなのですが、
フォームアプリのHowToが知りたくて、「"C#" フォームアプリケーション」でググったのですが、
「Hello World!」入門サイトか、逆にやたら難しい研究サイトみたいなのしか出てこないですね?
中間くらいの難易度で実用的なアプリのサンプルと、
そのコードの解説をしてるようなサイトか参考書を教えて欲しいです。お願いします。
0239デフォルトの名無しさん2010/10/22(金) 08:22:40
>>238
@ITの.NET Tipsとかはどう?
0240デフォルトの名無しさん2010/10/22(金) 08:23:57
>>238
2ch 専用ブラウザの作り方
http://cs2ch.blog123.fc2.com/blog-entry-1.html
0241デフォルトの名無しさん2010/10/22(金) 11:36:48
>>239
こんな大きなサイトがあったのですね!参考になります。ありがとうございました。
0242デフォルトの名無しさん2010/10/22(金) 12:25:23
>>238
入門と@ITの中間くらい。わかりやすい。実用ではない
ttp://ufcpp.net/study/csharp/index.html
0243デフォルトの名無しさん2010/10/22(金) 14:12:22
( ^ω^)おっおっ
0244デフォルトの名無しさん2010/10/22(金) 16:16:00
(´・ω・`)…
0245デフォルトの名無しさん2010/10/22(金) 16:58:35
ω・`)…
0246デフォルトの名無しさん2010/10/22(金) 17:05:16
・`)…
0247デフォルトの名無しさん2010/10/22(金) 17:06:22
`)…
0248デフォルトの名無しさん2010/10/22(金) 23:34:57
…
0249デフォルトの名無しさん2010/10/23(土) 00:05:24
Form1でボタンを押すとForm2が開くようにしたいのですが、

Form2 frm2 =new Form2();
frm2.Show();

だとボタンを押す事に別のForm2が開いてしまいます。
一つだけ開けるようにするにはどうしたらいいですか。
0250デフォルトの名無しさん2010/10/23(土) 00:08:00
private Form2 frm2;
private void button1_Click(object sender, EventArgs e) {
 if (frm2 == null) {
  frm2 = new Form2();
  frm2.FormClosed += (s, e1) => frm2 = null;
  frm2.Show();
 }
}
0251デフォルトの名無しさん2010/10/23(土) 00:08:58
ボタンを押せなくする
0252デフォルトの名無しさん2010/10/23(土) 00:10:26
Form2 frm2;
これをForm1のどこからでも参照できる位置に置いて

frm2 =new Form2();
この部分をLoadイベントもしくはShowイベントなどで一度だけ呼ばれるようにする
0253デフォルトの名無しさん2010/10/23(土) 00:34:02
>>250,252
有り難うございます。
0254デフォルトの名無しさん2010/10/23(土) 00:35:04
>>249
シングルトンパターンの応用でいいでしょ。
Form2のコントスラクタをprivateにして(この場合静的クラスは不可)、
こんなメソッドを作ればOK.

private static Form2 _instance;
public static void ShowInstance()
{
  if (_instance == null)
  {
    _instance = new Form2();
    _instance.FormClosed += _instance_Closed;
  }
  _instance.Show();
}
0255デフォルトの名無しさん2010/10/23(土) 00:38:46
>>251に一票入れたいのに無視されててどうしたものかと思案中
0256デフォルトの名無しさん2010/10/23(土) 00:40:03
>>255
それでもいいけどボタンを再度おせるような状況も考えないといけないからなあ
0257デフォルトの名無しさん2010/10/23(土) 00:43:41
一つしか開かないって言ってるんだから
ボタンを再度押せるような状況考えてやっても
大きなお世話だろうけど、普通はシングルトンだろうな
0258デフォルトの名無しさん2010/10/23(土) 00:45:58
ボタン押したらForm2をアクティブにさせるべきだろう
0259デフォルトの名無しさん2010/10/23(土) 00:48:08
まあこれ以上は蛇足だろうな

質問者の条件が漠然としてるし
その漠然とした要件を一応は満たした回答でてるんだし
0260デフォルトの名無しさん2010/10/23(土) 00:48:08
一つしかいらないからってシングルトンにするのは間違い
Form2の仕様の都合上二つ以上作れない場合に使うもの
0261デフォルトの名無しさん2010/10/23(土) 01:49:46
TimeSpan型の値があるのですが、それが25分かどうか調べたい場合どうしたらいいのでしょうか?

行いたいことは、TimeSpan型の値が25分ぴったりになったときにMessageBoxを表示させたいと思っております。
TimeSpan型の値はライブラリから返される値なので、関数を呼ぶと取得ができます。
0262デフォルトの名無しさん2010/10/23(土) 01:58:36
とりあえず、Timerを提案
0263デフォルトの名無しさん2010/10/23(土) 02:17:41
http://dobon.net/vb/dotnet/file/binaryformatter.html
ここを参考にバイナリへの読み書きを勉強してるのですが、
配列を扱う方法が分かりません。

例えば以下のようなクラスの配列Meiboの中身をバイナリへ順に書き込み、
読み出す時には同じようにMeiboに格納していくには、上記URLの例を
どういう風に変えればいいですか?


//クラス
[Serializable()]
public class Member
{
 public string Name;
 public int age;
}

//クラスの配列
static public Member[] Meibo = new Member[100];

0264デフォルトの名無しさん2010/10/23(土) 02:27:55
>>261
もう少し詳しく書いてくれないかね

もしそのTimespanが実時間と連動しているならSystem.Timers.Timer使えばいい。
そうじゃなくてゲームの中の時間とか、シーク可能な動画の経過時間とかならこんな感じ。
double m = ts.TotalMinutes - 25;
if (0 <= m && m < 1) {  // 25分から25分59秒99
 // do task
}
定期的にTimespanをチェックする方法を知りたいなら、フォームのデザインビューでTimerを追加してそこのイベントに書けばいい
0265デフォルトの名無しさん2010/10/23(土) 02:36:27
>>263
Meibo = (Member[])LoadFromBinaryFile("meibo.bin");
SaveToBinaryFile(Meibo, "meibo.bin");

変えなくてもこれでいいんじゃないか
要素がシリアル化可能ならその配列もバイナリ化できる
0266デフォルトの名無しさん2010/10/23(土) 03:16:38
>>265
できました有り難うございます。
0267デフォルトの名無しさん2010/10/23(土) 08:30:19
>>249は普通にShowDialog()使えばいいとかの話じゃないよな?w
0268デフォルトの名無しさん2010/10/23(土) 10:50:50
>>267
まさか幾ら何でもそんな落ちはないだろw
0269デフォルトの名無しさん2010/10/23(土) 11:18:29
残り所要時間を出したいのですが、とても大きな秒数から日時に変換するシンプルな方法を教えてください。
DateTimeを使えば簡単にできそうな印象はあるのですがどうもスッキリいけません。
0270デフォルトの名無しさん2010/10/23(土) 11:30:59
TimeSpanよく見ろよ
0271デフォルトの名無しさん2010/10/23(土) 11:32:25
Console.WriteLine(new TimeSpan(0,0,1000000).Days);
0272デフォルトの名無しさん2010/10/23(土) 11:36:56
まず時刻と時間を弁別するところから始めた方が良いかもしれない
0273デフォルトの名無しさん2010/10/23(土) 11:42:34
DateTimeの加算演算子はオーバーロードされてるからTimeSpanそのまま加算できます
02742692010/10/23(土) 12:29:13
みなさん、ありがと

お礼 つ焼きそば
0275デフォルトの名無しさん2010/10/23(土) 12:33:43
焼きそばなんているか

そこに手をついて尻をこっちに向けろ
0276デフォルトの名無しさん2010/10/23(土) 13:18:38
お札(さつ)をください
0277デフォルトの名無しさん2010/10/23(土) 13:21:54
                    ,,/⌒`ノ
     ;:;:;.         ,/      `⌒γ
     ;:;:;          (  /⌒⌒"" \\           ど
     ;:;:         ( / ⌒  ⌒:::::::::ヽ i        明  う
     ;:;:.         ヽi (・ )` ´( ・):::::::::::!         る  だ
     :;:;:;.            |  (_人__):::::::::::::::|           く
     ;:;:;:             \  'ー´:::::::::::::/ヽ       な
     ;:;:.         ノ.:!:.:.:.:`ゞ-<7.:〉.:.:.:i.:.:}   ろ  っ
     从 __  _,,,/.:.:/:.:.:.:.:.:| }-{/i.:/.:.:.:.:|.:/     う  た
      从从百円}と_」.:/!.:.:.:.:.:.:.!  ̄ リ.:.:.:.:.:り     ?
         ̄ ̄    ̄  |.:.:.:.:.:./_ :__ヽ.:.:.:.:\
                \/.:.::..:.:.:.:.:.:..:\:.::./
                /.:.:.:.:.:.:.「^Y.:.:.:.:.:.:|´
                 {.:.:.:.:.:.:.:.| ,!.:.:.:.:.:.:|
                  \.:.:.:.:.:.V.:.:.:.:.:.:.:|
                  \.:.:.::|.:.:.:.:.:.:.:!
                    > 'ゝ─‐イ、
0278デフォルトの名無しさん2010/10/23(土) 13:50:40
TimeSpan.FromSeconds
こんなのもあるんだな
0279デフォルトの名無しさん2010/10/23(土) 20:36:44
0280デフォルトの名無しさん2010/10/23(土) 22:32:30
とてつもなく低レベルな質問ですが形振り構ってられないので投稿してみます

C#
0281デフォルトの名無しさん2010/10/23(土) 22:33:23
間違えて書き込んでしまいましたすみません出直してきます
0282デフォルトの名無しさん2010/10/23(土) 22:45:26
形振り構ってられないのに出直してくる余裕あるの?
0283デフォルトの名無しさん2010/10/23(土) 22:51:12
なんだこれw
0284デフォルトの名無しさん2010/10/23(土) 23:35:46
なりふりかまわずのなりふりって形振って書くのか
いい勉強になった
0285デフォルトの名無しさん2010/10/23(土) 23:37:55
D:\chinko.exe --sikosiko

と入力するとstringを返すCUIプログラムがあるとします。
これをVC#のフォームアプリでボタンを押すと実行されてDOS窓みたいなのを表示させず
返値だけ取得したいのですがどうすればいいですか?
0286デフォルトの名無しさん2010/10/23(土) 23:41:32
非表示で実行してファイルにリダイレクト。
終わってからファイルを読み込み、ってのが一番楽。
0287デフォルトの名無しさん2010/10/23(土) 23:43:31
よくわからんけど、Processと回答
ttp://dobon.net/vb/dotnet/process/standardoutput.html
02882802010/10/24(日) 00:06:51
C#について全く知識が無いのですが
「何か展示品が欲しいからC#で簡単なゲームを5日で作ってこい」
という課題を無理に出されました
唯一勉強してるCの方も本を見通しただけでまともなプログラムなんて組めません
正直そこらへんの人とプログラミングに対する知識は差が無いです

何か簡単にプログラムを組めるゲームのお勧め等を教えてもらえないでしょうか(モグラたたきなど
何から取り組めばいいのかわかりません
課題を出した方も無理難題を言って叱りたいだけにしか見えなくて八方ふさがりです
0289デフォルトの名無しさん2010/10/24(日) 00:17:57
>>287
そこ見たんですけど、
psi.FileName = System.Environment.GetEnvironmentVariable("ComSpec");
の行の変え方が良くわかんないんです。
0290デフォルトの名無しさん2010/10/24(日) 00:26:29
FileName = @"D:\chinko.exe"; // アプリ
Arguments = "--sikosiko"; // 引数
0291デフォルトの名無しさん2010/10/24(日) 00:40:51
>>288
じゃんけんでもいいんじゃないの?
グーチョキパーの絵書いて人に選ばせて、COMは自分の手を乱数で選んで、
勝ち負け判定で終わり
余裕があれば、ご褒美とか付ける
0292デフォルトの名無しさん2010/10/24(日) 00:54:09
>ご褒美
脱衣とかw
別の意味で展示できなくて、ちょうど良い当て付けになるなw
02932882010/10/24(日) 00:58:09
>>291
じゃんけん、○罰ゲーム、文字を読むゲーム(クイズ等)をあげたら
調子のんなカスとまで言われたので・・・でも知らない言語、短い期間でモグラ叩きとかまでは作れる気がしません;
じゃんけん以上モグラたたき以下のゲームで自分が作れる、となるともう選択肢がなくて参ってます;
0294デフォルトの名無しさん2010/10/24(日) 00:59:40
>>293
テトリスとかマインスイーパぐらいなら満足してくれそうだな
0295デフォルトの名無しさん2010/10/24(日) 01:02:30
C#でゲーム作れとかどういう状況だよwww
02962932010/10/24(日) 01:12:33
>>294
そういうものなら満足してくれると思います
マインスイーパはデフォでPCについてるので流石に却下されますが・・・
1からC#を勉強してたら時間が無いので、勉強の仕方にも困ってます

>>295
ちょっとしたゲームはVBで作ったことがあるので最初はいける、と思ってたのですが
C#じゃないとダメみたいです、C#を使うことが重要だらしいので
0297デフォルトの名無しさん2010/10/24(日) 01:17:28
>>293
5日後にそいつ殴れば? 面白いゲーム考えましたとか言いながらさ
0298デフォルトの名無しさん2010/10/24(日) 01:18:38
C#でテトリスならすでにソースが公開されてたような・・・
0299デフォルトの名無しさん2010/10/24(日) 01:19:33
とりあえずこのへん読んどけば?
http://ufcpp.net/study/csharp/getstarted.html
0300デフォルトの名無しさん2010/10/24(日) 01:21:42
C#でテトリス
http://cs2ch.blog123.fc2.com/blog-category-3.html
0301デフォルトの名無しさん2010/10/24(日) 01:30:17
>>290
すみません、引数の中にunko.txtなどのファイルのパスがあった場合はどう書くんですか?
どのプログラムで試しても引数にファイルパスが入ってると値が返ってこないんです。
03022962010/10/24(日) 01:42:28
>>297
自分の相方が課題を出されたとき時全く文句を言わないで今になって「できねぇ・・・」って言ってるのが正直つらいです
反論してるときに「とりあえずやってない内から文句言うなよ・・・」みたいな感じの白い目を向けていたのになんなのもう
近頃騒がれてるブラックって常にこんな感じでやりとりしてるのかな、と思ったり・・・

>>299
今そこを参照しているのですが、ゲームを作るにあたって一個一個消化してたら
時間が無くなってしまうのでどうすればいいか途方にくれています

>>300
有難うございます
全部見て参考にしたほうがいいのかな、これ・・・
0303デフォルトの名無しさん2010/10/24(日) 01:48:57
>>302
自分で作ったと言い張らなければいいんじゃないの?
嘘を言っても後で苦労するだろうしw
参考にしたと言っておけば・・
まあ作った経験がないのなら動くソースをいじって勉強するのが最短だよ
0304デフォルトの名無しさん2010/10/24(日) 01:58:21
>>300で貼られた動画の時点で理解できないんだけど詰んでるんだろうか・・・

>>303
有難うございます
怒られそうですが出来ないよりかはマシなので試してみます
ソースまで載せてるサイトが検索してもなかなか見つからないのですが、
どこか展示されているサイトなど知っていたら教えてくださると幸いです
03052992010/10/24(日) 02:00:04
>>302
じゃあ右の目次だけ目を通しとけばいいよ
思い当たったら見ればいい

0306デフォルトの名無しさん2010/10/24(日) 02:00:21
>>304
動画はC#じゃないよ
C(C++?)で作ってるし

それをC#で作るとこうなるってだけだから動画は後で参考にすればいいんじゃね?
1時間も見てると長い

ソース公開されてるでしょ
03072992010/10/24(日) 02:12:55
>>304
その動画貼ってあるサイトで公開されてるソースはこれね
http://sourceforge.jp/projects/cs2h/svn/view/Tetris.tar.gz?root=cs2h&view=tar
03083042010/10/24(日) 02:19:42
>>305
有難うございます
参照したいときに見てみます

>>306
ソースダウンロードしました、一応これは著作権フリーなのかな・・・?
実行できないのですが、何か実行する前にする操作などありますでしょうか
0309デフォルトの名無しさん2010/10/24(日) 02:24:59
フォルダのbin/Debugのなかにblock.pngをいれれば動くんじゃないかな
03103082010/10/24(日) 02:42:32
>>309
有難うございます、無事実行できました


既にあるフリーのソースコードをいじって勉強していく形でいく方針にするとします
以降は自分で出来る範囲まで頑張ってみます
普通なら罵倒される駄目質問に長時間にわたって親身になって答えてくれる皆様には感謝し尽くせません
怖いくらい優しくしてもらって本当に感謝してます、有難うございました
0311デフォルトの名無しさん2010/10/24(日) 04:22:13
自動プロパティでgetのみを作ったのですが
これをクラス内部で変える方法はあるのでしょうか。

public int X { get; }

public void foo() {
  this.??? = 123; // Xを変えたいが記述が分からない
}

---------------------------

自動を使わない方法のみ??
private int _x;
public int X {
 get {
 return this._x;
 }
}

public void foo() {
 this._x = 123;
}
0312デフォルトの名無しさん2010/10/24(日) 04:30:11
>>311
クラス内部からそのまま_xを触れるでしょ
あくまで外部からどうするかだし
0313デフォルトの名無しさん2010/10/24(日) 04:32:32
>>311
自動使わない方法のみか、
public int X { get; private set; }
にするか。
03143112010/10/24(日) 05:01:59
>>312
分かりにくい書き方ですみませんorz

>>313
setをprivateにする記述があったとは!
ありがとうございます。
0315デフォルトの名無しさん2010/10/24(日) 08:58:10
30分でいいから文法に目を通した方がスムーズに進む希ガス
0316デフォルトの名無しさん2010/10/24(日) 12:22:19
public int X { get; }

は、4.0ではコンパイル通るようになったのか?
0317デフォルトの名無しさん2010/10/24(日) 12:25:41
通らない
というか、仮に通ったとしてどういう動作が期待されるわけ?それは
0318デフォルトの名無しさん2010/10/24(日) 12:57:29
>>317
値をセットできないじゃん。何がしたいの?
03193172010/10/24(日) 12:58:12
え?俺?
提案者じゃないのでわかりません
03203162010/10/24(日) 13:57:40
因みに俺も提案者ではないので、聞くなら311に
0321デフォルトの名無しさん2010/10/24(日) 14:51:54
Ω<(ry
0322デフォルトの名無しさん2010/10/24(日) 15:17:57
期待するのは313でしょ。
そういう質問じゃん。
0323デフォルトの名無しさん2010/10/24(日) 15:24:23
class BaseClass{
  public int A {get; private set;}
  public int B {get; private set;}
  public BaseClass(int a, int b);
}

class DrvClass : BaseClass{
  public DrvClass(string c){
    int a, b;
    // cからaとbを計算
    base(a, b);
  }
}

例のように派生クラスの引数から値を計算して
既定クラスのコンストラクタを呼び出したいんですが
なにかいい方法はないでしょうか。



0324デフォルトの名無しさん2010/10/24(日) 15:34:57
class DrvClass : BaseClass {
  class Hoge {
    public int a, b;
  }
  public DrvClass(string c) : this(Parse(c)) {
  }
  private DrvClass(Hoge x) : base(x.a, x.b) {
  }
  private static Hoge Parse(string x) {
  }
}
こんなのとか?
0325デフォルトの名無しさん2010/10/24(日) 15:45:16
>>324
なるほど、ありがとうございます
0326デフォルトの名無しさん2010/10/24(日) 16:27:09
>>324
へー。そんな書き方出来るのか。
0327デフォルトの名無しさん2010/10/24(日) 18:08:50
int[].Average()でint[]{0,326464}の時に0が返ってくる時があるのですが平均値を思い違いしているのでしょうか?
0328デフォルトの名無しさん2010/10/24(日) 18:12:23
いみふ(
0329デフォルトの名無しさん2010/10/24(日) 18:17:21
うん、意味不明。

>>327
「返ってくる時がある」って何?
LINQ の Average は決定論的な動作しかしないはずだけども。

他に何か変な処理してるんじゃないの?
0330デフォルトの名無しさん2010/10/24(日) 18:17:44
>0が返ってくる時がある
ってのは0の場合とそうじゃない場合があるってことか?

普通に考えたら163232以外ありえないが

03313272010/10/24(日) 18:26:00
int rate = (int)int[].Average();
int abc = (int) (1192/rate);

rateが予想に反して0になるから下の割り算でエラーになったのですが問題はrateがどうして
0になるのかがわからないのです。int[]の中身を見ると0,326464が入っていました。
int[]が非同期から持ってきている変数なのでタイミング的にデバッグの数字が一致しない
時があるのでしょうか?
■ このスレッドは過去ログ倉庫に格納されています