1read 100read
2012年2月プログラム35: ふらっとC#,C♯,C#(初心者用) Part85 (681) TOP カテ一覧 スレ一覧 2ch元 削除依頼
UNIXプログラミング質問すれ Part10 (295)
Git 3 (1001)
おまいら最強の麻雀プログラムしてみろよ Part5 (522)
プログラム関係の雑誌について (211)
Excel VBA 質問スレ Part23 (222)
【初心者歓迎】C/C++室 Ver.77【環境依存OK】 (705)

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


1 :12/01/31 〜 最終レス :12/02/15
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からない場合など、勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
なお、テンプレ2行目が読めない回答者は邪魔なので後述のC#相談室に移動して下さい。
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっとC#,C♯,C#(初心者用) Part84
http://toro.2ch.net/test/read.cgi/tech/1326737378/
■関連スレ
C#, C♯, C#相談室 Part70
http://toro.2ch.net/test/read.cgi/tech/1327570969/
ミスターサタンのC#相談室 
http://hibari.2ch.net/test/read.cgi/tech/1092656075/
VB.NET質問スレ(Part38)
http://toro.2ch.net/test/read.cgi/tech/1325083428/
くだすれC++/CLI(初心者用)part2
http://hibari.2ch.net/test/read.cgi/tech/1268613679/

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

3 :
C#で2chに書き込む方法教えろ

4 :
スレッド間でメッセージ通信を行うにはどうすればいいですか?
Win32APIならPostThreadMessage/GetMessageを使うのですが。

5 :
スレッドについてです。
スレッドとは、時間がかかる処理を行なってもGUI等が止まらないようにする物ですよね
Form1_Loadでスレッドを作って、while(true){progressBar1.Value++;}と時間がかかる(というか終わらない)処理をやらせたのですが、
理想は、プログレスバーが伸びつつ、GUIが表示されてウインドウのサイズや場所を変えれる。というのを想像していたのですが
プログレスバーが伸びつつ、GUIは固まってしまっています。
workerは別スレッドなのではないでしょうか。なぜGUIが固まってしまうのでしょうか
http://pastebin.com/HCeZxCrm
また、この様に別スレッドでファイルをダウンロードし保存するコードがちょくちょくありますが
http://dobon.net/vb/dotnet/internet/downloadfile.html
この手段を使わなくても、別スレッドを作り、そこでファイルのDL&保存処理を行うのとは何が違うのでしょうか。

6 :
BinaryFormatter formatter = new BinaryFormatter();
FileStream fs = new FileStream(ファイル名, FileMode.Create);
formatter.Serialize(fs, projInfo);
fs.Close();
上記の処理で、serializationexception はハンドルされませんでした
というエラーが発生します。BEAN クラスのシリアライズがもれているのでしょうか?
見直して、漏れは無かったのですが。

7 :
メインフォームとサブフォームがあり、サブフォームではさまざまな設定を行う、
という設計のツールを開発してます。
サブフォームで設定した情報を一つのクラスにまとめてXMLファイルに保存したかったので、
シングルトンクラスを使いました。
ですが、さまざまな不具合が発生してしまってどう調べてもわからないので、
お知恵を拝借させてください。
不具合1.
Form1のLoadイベントでXMLファイルのデシリアイズを行っているのですが、
うまく読み込んでくれません。Form2を開くとForm2の情報は読み込まれてます。
不具合2.
XMLファイルが無い場合にはきちんとした値を保存するのですが、XMLファイルがあると
上書き保存してくれず、値は初期のままです。こちらもForm2の情報だけは更新されます。
恥を忍んでクラスとロード部分などのソースをアップしました。
http://ideone.com/JEqZp
アドバイスや、もっと楽にできる方法などをいただけると嬉しいです。
何卒よろしくお願いします。

8 :
>>5
> workerは別スレッドなのではないでしょうか。なぜGUIが固まってしまうのでしょうか
workerは別スレッドだが、Invokeは指定したデリゲートをUIスレッドにやらせるためのもんだ
> この手段を使わなくても、別スレッドを作り、そこでファイルのDL&保存処理を行うのとは何が違うのでしょうか。
WebClientがProgressChangedを起こしてくれて楽、とか
非同期IOは明示的にスレッド使うより効率的なことが多い
>>6
まあなんか足りんのだろ
それだけじゃ何ともいえない

9 :
>>7
とりあえずForm1_Loadにブレークポイント貼ってステップ実行してみたら

10 :
>>7
シングルトンやめてみたらw

11 :
シングルトンで思い出すのが昔くりーむしちゅーの有田が何かの番組で
はめられて遊ばれるネタがあったけどその際にあだ名がクルトンとかなってたのを思い出す

12 :
すみません、自己解決しました。
貼ったソースはクラス参照の部分を分かり易く全文書いていたのですが、
本当はクラスを変数化(?)してました。
それを直したら上手く動きました。
お騒がせしてすみませんでした。

13 :
>>4
GUIスレッドに対してならControl.BeginInvoke
その他はそれで何したいかによる

14 :
>>4
ウィンドウがあろうがなかろうが
オブジェクトで通信するだろjk

15 :
どっちにしてもForm1_Loadに終わらない処理書いたりするなよ…

16 :
座標X:Yを指定するだけでグラフ上に放物線がかけるライブラリ教えてください

17 :
Excel使え

18 :
お断りします

19 :
ポップアップメニューを階層構造にしたいのですが
下層のメニューアイテムにアクセスする方法がわかりません。
どのようにアクセスすればいいでしょうか?

20 :
>>16
protected override void OnPaint( PaintEventArgs e )
{
    base.OnPaint( e );
    int offset = this.ClientSize.Width / 2;
    for( int x = -offset; x < offset; x++ )
    {
        int y = x * x / 100 * ( -1 ) + this.ClientSize.Height;
        e.Graphics.DrawRectangle( Pens.Black, x + offset, y, 1, 1 );
    }
}

21 :
>>20
これってForm1.csのどこに貼り付ければいいのでしょうか?(ぇ

22 :
>>19
IDEで適当にポップアップメニュー作った後に Desingner.csファイルを覗いて見ると良い

23 :
>>22
さんくす。なるほどDropDownItemsか。

24 :
>>21
白いところ

25 :
>>21
フォームのOnPaintの機能を上書きしてるから、フォームのコードの無難な白いところに貼っとくがヨロシ。

26 :
>>24-25
うおすごい
フォームに貼り付けただけなのにフォームにグラフが出てきました

27 :
OnPanitでFormに直接書くより内部的にbitmap作ってそこに書くコードあげればいいのに
その方がbitmapを保存したりと利用の幅が広がるのに

28 :
こういうふうにしてみました
これはコップみたいになるのですが、ウィンドウの下から山みたいに表示するにはどういう風に書き換えればいいのかご教示お願いします
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.DrawRectangle(Pens.Black, 0, 0, 1, 1);
e.Graphics.DrawRectangle(Pens.Black, 10, 10, 1, 1);
e.Graphics.DrawRectangle(Pens.Black, 20, 20, 1, 1);
e.Graphics.DrawRectangle(Pens.Black, 30, 10, 1, 1);
e.Graphics.DrawRectangle(Pens.Black, 40, 0, 1, 1);
}

29 :
>>28
その辺は座標系の話だね
PCのGUIの座標系は一般的に左上が0,0で右下が正
グラフをしたからはやすとなると計算しないとダメかな?

30 :
>>29
フォームのWidthとHeightを取得して
その値からXとYを引いていけば出来そうですね
ありがとうございます

31 :
ということでやってみたんですが全部表示されません
Heightで取得するって間違ってますか?
protected override void OnPaint(PaintEventArgs e)
{
int height = Height;
e.Graphics.DrawRectangle(Pens.Black, 0, height-0, 1, 1);
e.Graphics.DrawRectangle(Pens.Black, 10, height - 10, 1, 1);
e.Graphics.DrawRectangle(Pens.Black, 20, height - 20, 1, 1);
e.Graphics.DrawRectangle(Pens.Black, 30, height - 30, 1, 1);
e.Graphics.DrawRectangle(Pens.Black, 40, height - 40, 1, 1);
}

32 :
this.clientsize.height

33 :
ClientRectangle

34 :
Pathとか使って回転とか使ったほうが早いかもな
直感的に作業できるし

35 :
ちょっと書いてみるので待ってね

36 :
サンプル
http://ideone.com/ot26c
X軸を中心に回転はできない?ぽいのでグラフの情報をpathに入れるときにy方向を単純に-1かければいける

37 :
そんなことは自分で考えさせろよー

38 :
わからなくて悔しかったんですね笑

39 :
>>32-33
取れました!ありがとうございます
>>34-36
サンプルありがとうございます!
コード読んで勉強してみます

40 :
すまん訂正版
http://ideone.com/xXnie

41 :
widthとかheighってマイナス受け付けないんだな
誤算だった
X軸とかY軸の回転もできなのは辛かった
見つけてないだけかもしれんが

42 :
全部読んでないんで勘違いしてるかも知れないけど、
単純な平行移動とか軸の反転ならワールド変換で出来るんですよ。
フォントが絡んでくると話がややこしいけどね。

43 :
>>42
勉強不足だけどやりかたがあった
http://ideone.com/xNsb3
たぶんこれで問題ないんじゃないかな?
まあ最悪はグラフと文字は分けて描けばいいだけだしねえ
文字もPathに突っ込めるので
・グラフのメモリなど
・グラフ本体(個別に色分けしたければ必要個数分)
・文字
でそれぞれわけて描けばいいだけ
基本的なやり方は今貼ったのでOK

44 :
>>13
GUIスレッドに対しては使いません。そもそもGUIはないです。
VC++ではPostThreadMessage/GetMessage/PeekMessageでスレッド間通信をしていたので、
同じようなことができればと思ってます。
>>14
ウィンドウはありません。
オブジェクトで通信というのはどのようにやるのでしょうか。教えてください。

45 :
static void Main(string[] args)
stringは何故配列なの?

46 :
>>45
コマンドライン引数は複数食えるんだよ。

47 :
以下のプログラムを引数食わせて実行してみるといいよ。
引数はスペース区切りでいくつでも食える。
ttp://ideone.com/1Vkmo

48 :
ジム

49 :
俺がガンダムだ。

50 :
文字列も座標系をあわせてみた
http://ideone.com/cy2wu

51 :
>>44
コレクションをロックしながらしたらいいんちゃうん
class HogeMessage {}
var queue = new Queue<HogeMessage>();
//PostThreadMessage
lock ((queue as ICollection).SyncRoot) {
 queue.Enqueue(new HogeMessage());
}
//GetMessage
lock ((queue as ICollection).SyncRoot) {
 var q = queue.Dequeue();
 .....
}
//PeekMessage PM_NOREMOVE
lock ((queue as ICollection).SyncRoot) {
 var q = queue.Peek();
 .....
}
SynchronizedCollection使ってもいいかもしれんけど

52 :
Queryを指定してEventLogを取得し、取得したEventRecordから
<EventData><Data></Data></EventData>内のデータを文字列で
取得しています。具体的には、下記イベントを取得しています。
 ProviderName: EventLog
 ID: 6008
このイベントログは、PCを強制電源OFF(電源ボタン長押しなどによる)
した後にPCを起動させたら書き込まれるログなのですが、
EventDataの情報内に、強制電源OFFしたときの日時の情報が書き込まれています。
取得したEventRecordに対して、EventRecord.Properties[1].Value.ToString();
を実行すると、例えば、"2011/12/29" という文字列が取得できます。
■質問■
この文字列を String str = record.Properties[1].Value.ToString(); とし、
String str2 = "2011/12/29"; とした場合、
str.Equals(str2) が false になるのですが、これは何故でしょうか?
なお、Properties[0].Valut.ToString() で取得できる時刻は、
String str3 = "19:42:35" と Equal でした。
DateTime dt = DateTime.Parse("YYYY/MM/DD hh:ss:mm");
という記述でDateTimeが生成できるのですが、
上記で取得したstr2を用いて String を作り DateTimeParse()
を実行すると、FormatException で死にます。
Debugを進め、String str2 = "2011/12/29"; として作成したものと
相異があることが分かりました。
debug中のキャプチャ
ttp://www.dotup.org/uploda/www.dotup.org2583153.png.html

53 :
どうしてだろね。
的外れかも知れないけど、文字コードレベルで比較はしてみた?

54 :
アドレスを比較している?

55 :
>>44
無いよ。
キューでもつかっとけば?

56 :
別クラス、別スレッドで元クラス(form1)のメソッド(public bool func(int no) {return true;})に
引数付きでアクセス&戻り値を取るにはどうしたらよいのでしょうか
formにform1型のthisが入っています。
func()とするだけなら
delegate void hoge();
form.Invoke(new hoge(form.func));
でよいのですが、引数を渡す方法が分かりません。

57 :
Invokeに引数取るオーバーロードあるだろ
MSDN見れ

58 :
スレッドはやはり壁らしい

59 :
app.configでstring[]はどのように書くのですか?

60 :
StringCollectionじゃダメ?

61 :
>>58
旧VBポジションだから乗り換え組&プログラミング初心者が多いんじゃね?

62 :
>>53,54
レスありがとうございます。
下記の通り、解決しました。
Stringを一文字(char)ずつ比較したところ、
EventDataから取得した日付文字列には、
Unicode character LEFT-TO-RIGHT MARKなる、
0x200e が含まれていることが分かりました。
具体的には、下記の●の場所に。
"●2012/●01/●31"
この0x200eを、""に置換したところ、
文字列は一致し、DateTimeも生成できました。
余談ですが、同様のMARKとして
RIGHT-TO-LEFT MARK 0x200f もあるようです。

63 :
型そのものを返す構造体やクラスって作成可能なのでしょうか?
intの値ではなくintそのものを返すものです。
無理ですよね?

64 :
Type型というのは存在するが
それで何したいの

65 :
>>63
ちょっと何言ってるのか(
でもTypeオブジェクトなら返せるよ

66 :
動的生成したいんじゃないの?

67 :
>>64-65
ありがとうございます。
動的に型を定義しなければいけなくなってしまって。
string型を入れたらstringの文字列で型を返してくれるものを作りたいんです。
ちょっと研究してみます。
本当にありがとうございます。助かりました。

68 :
>>66
そうです!今Typeクラス見てます。やってみます。

69 :
普通にクラス書くだけで、実行時型情報や動的生成はサポートしてるよ。
すべてのクラスの基底クラスはObjectクラスだから。

70 :
>>67
初心者はそんなことしないほうがいいよ

71 :
むしろ初心者しかやらないだろ

72 :
>動的に型を定義
さらっととんでもないことを書いてるなw

73 :
なわけないだろ。
昔、MS技術者は、MFCでCマクロ使ってそれを実装したんだぞ。
今は言語自体がそれをサポートしてるから楽なもんだ。

74 :
>>72
初心者は使わないけど普通に使う。
だから、最近のC++でもC#でもサポートしている。

75 :
>string型を入れたらstringの文字列で型を返してくれるもの
文字列で型名を指定してインスタンスを生成したいってこと?
それとも型名を文字列で返せればいいの?
>動的に型を定義
と話がいまいちつながんなくね?

76 :
object instance = Activator.CreateInstance(Type.GetType("System.Int32"));
まあこれのこったろうけど

77 :
どういうケースでこれを使うんだ
型名が文字列ってことはどこからか入力するんだろ

78 :
interfaceで解決しそうな予感

79 :
動的生成は簡単な例で例えると、ワードにエクセルの表を貼るみたいなときに使う。
ワードはエクセルの型を知らない。けどワードのドキュメント上でエクセルが動いてるみたいな。
実際は型名の文字列なんかどうでもよくて、objectのポインタか型情報さえあればnewできんだよね。
ユーザーが勝手に機能拡張できるアプリとかではよく使う。

80 :
>>79
やっぱりそういう勘違いだと思った。
全然たとえになってないじゃん。
ワードがエクセルのオブジェクトの型を知っていようがいまいが、
エクセルのオブジェクトの型はエクセルのバイナリがビルドされた時点で確定しているものに過ぎない。

81 :
単純にファクトリを書くのを横着しているだけのような気も

82 :
>>80
おれ質問者じゃないしなんの勘違いだよ?
実行時型情報、動的生成の基本的な説明をしてるだけ。例えは例え。
COMがそれをサポートしてるから他のアプリからどんなオブジェクトでもコピーして使える。
おまえが実行時型情報、動的生成という概念を知らないだけじゃないの?

83 :
COMはタイプライブラリインポータで型読んでるから使えンだろうがよ

84 :
それをサポートするって言うんだよ。

85 :
それを型を知らないとは言わないと思うな〜
タイプライブラリに書いてあるのはインターフェースだよ?
それを読み込んで型を知らないって言うのかな〜

86 :
static void Main(string[] args)
これ変数だから、argsじゃなくても良いんでしょ?
なんで"args"なの?
教えてくださいな。

87 :
>>86
引数を英語にしてくださいな。
C言語系は省略の美学が多少有るんだよな。

88 :
どの言語も同じだろ

89 :
>>85
アプリをビルドをしたときに知らなくても、あるいは、実行時まで知らなくても、
必要なときに型を知る方法があることを実行時型情報をサポートしてると言う。
要はインスタンスのvoidポインタだけあればその型情報を取得できるということだ。
そして実行時に知った型でnewできることを動的生成という。
で、COMやc++、c#はそれらをサポートしてる。初心者用説明オワリ。

90 :
>>87
ありがとう^^

91 :
質問者ですけど。stringから生成した型でさらに宣言をしないといけないんですよ。
だから構造体でType型を返し、そrをType型に入れて宣言してみたんだけど
error CS0118: `scriptname.TypeTeigi' is a `field' but a `type' was expected
とか出てる。
すごく単純なことをやるためにすごく複雑な問題を抱えてしまった。

92 :
<T>

93 :
参照型の new は全部動的生成じゃね?
動的メモリ確保という意味では。
「動的な何か」の何の部分を省略して会話おかしくなってる感が。
CreateInstance は動的型情報の参照、動的なアセンブリ読み込み。

94 :
質問者ですけど。
すいません。設計を見直してみます。

95 :
>>93
単にMSがMFCのCObjectの説明のときに動的生成のサポートと言い出した。
当時はc++コンパイラに実行時型情報の機能はなかった。
だから型不明のクラスを実行時にnewできなかった。
それがMFCマクロでクラスを宣言してれば可能になった。

96 :
当時と今とで動的にできることも開発者の理解もずいぶん変わってるだろうに。

97 :
C言語にはmallocがある。
劇的に変わったのはMFCとCOMから。
当時、Unix勢は口だけでまともに動く実装が一つもなかった。CORBA(笑)みたいな

98 :
"string"ではなく string ってどうやって宣言すればいいのでしょうか?
型は何を使えば?

99 :
string s;

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
VB.NET質問スレ(Part38) (271)
プログラム関係の雑誌について (211)
C/C++の宿題片付けます 156代目 (289)
C/C++の宿題片付けます 156代目 (289)
【GPGPU】くだすれCUDAスレ part5【NVIDIA】 (494)
UNIXプログラミング質問すれ Part10 (295)
--log9.info------------------
***ブラジリアンテイストなヨーロッパ音楽*** (281)
フラメンコ大好き 2 (477)
ヨーロッパ辺りの、身の毛がよだつほどに美しい音楽 (324)
とうよう'sコレクション (853)
溝口肇 (295)
◇◇王菲の音楽について語るスレ◇◇貳◇◇ (778)
【中国語POPS】中国語POPS総合【最新】 (207)
Sissel Kyrkjebo〜シセル・シルシェブー〜 (226)
ケルティックウーマン (Celtic Woman)☆一枚目☆ (672)
♪周杰倫ジェイ・チョウを語るスレpart22 (733)
【ヴァリエテ】フランスのポップス(3)【シャンソン】 (862)
ゴスペル (957)
ジプシーキングス (516)
ガムラン音楽スレッド (622)
フォークの仙人、ピート・シーガーについて語ろう。 (436)
ブラジルのショーロ (317)
--log55.com------------------
タイソン・フューリー
亀田興毅が出てきたときイチローみたいになると思ってた
【o(^_-)O】木村悠【o(^-^)o】
【ミドル級】村田涼太VS竹原慎二【最強】
【猫アッパー】神風永遠先生の殿堂入りを目指す会
【ヘビー級】藤本京太郎vsジョセフパーカー【WBO】
世界と日本のボクシングっていうブログ
亀田興毅さんの偉大な記録と栄光を称えましょう 2