ふらっとC#,C♯,C#(初心者用) Part23at TECH
ふらっとC#,C♯,C#(初心者用) Part23 - 暇つぶし2ch2:デフォルトの名無しさん
08/01/11 15:42:43
C#, C♯, C#相談室 Part44
スレリンク(tech板)

C♯, C#相談室 Part34
スレリンク(tech板)

【新GUI FW】WPF(XAML,AVALON,.NET3.0)【重い?】
スレリンク(tech板)

Windows Live プログラミング
スレリンク(tech板)

初心者のためのプログラミング言語ガイド Part6
スレリンク(tech板)

3:デフォルトの名無しさん
08/01/11 15:44:26
なかなかよろしいスレタイでございますね

4:デフォルトの名無しさん
08/01/11 18:00:44
>>1


5:デフォルトの名無しさん
08/01/11 19:26:59
お聞きしたいのですが
ブラウザ(IE)上に表示されたテキストボックスからテキスト取得ってできるんですかね?
サイトはJAVAアプレットで書かれているものです
参考サイト、ググるキーワードなどあればご教示下さい

宜しくお願いします

6:デフォルトの名無しさん
08/01/11 19:39:32
>>5
まともな方法じゃ無理、やれたとしてもC#の範疇じゃないからWin32スレにでもど~ぞ。

7:デフォルトの名無しさん
08/01/11 19:51:21
>>6
そうですか・・・。

ではWin32スレに行ってきます。
ありがとうございました

8:デフォルトの名無しさん
08/01/11 20:20:37
C#のお勉強で小物のスクリプトをC#でリプレースしてるんですが
IDEでプロジェクト作ってというのはちょっと大げさです。
軽めでC#のメソッドの補完をしてくれるテキストエディタってないですか?

9:デフォルトの名無しさん
08/01/11 20:25:49
新しいプロジェクトから空のプロジェクトを作って自分でソースコードを追加すればいいんじゃない。

10:デフォルトの名無しさん
08/01/11 20:26:26
VSのインテリセンス触ってみては?
たぶんC#やるんならVSが一番いいと思うけど

11:デフォルトの名無しさん
08/01/11 20:29:50
VC#なしのC#なんて存在価値無いよ

12:デフォルトの名無しさん
08/01/11 22:40:10
Properties.Settings.Default.hogehoge
の値を初期状態にしてデバッグ開始する方法ってないの?

13:デフォルトの名無しさん
08/01/11 22:42:13
やれば?

14:デフォルトの名無しさん
08/01/11 22:50:31
コアルータの切り替え失敗したんだね…

15:デフォルトの名無しさん
08/01/12 01:36:32
Visual C# 2005 Express Editionでアプリケーションを作っているのですが、
こいつのデータベースマネージャからでも、ソースコードからでもよいので
MySQLサーバにアクセスしたいと考えております
ぐぐってみたのですが、VC#2005EEではMSSQLかアクセスしか選べないと書いてあるところもありました
やっぱフリーではアクセスできないんでしょうか?

16:デフォルトの名無しさん
08/01/12 01:39:01
>>15
URLリンク(www.mysql.com)

17:デフォルトの名無しさん
08/01/12 01:42:34
>>16
ここ初心者スレなんだしもうちょっと丁寧に書いてあげれば?

18:デフォルトの名無しさん
08/01/12 01:43:05
自分で書けよ^^;

19:デフォルトの名無しさん
08/01/12 01:45:47
>>17
わからないなら何が判らないか聞けよ

20:15
08/01/12 01:53:31
>>16の方が教えてくれたツール?をインストールしました。
けどこのあと結局どうやって接続していいかわかりません
VSのデータベースマネージャとかからできるのかーとか思っていますが・・・

21:デフォルトの名無しさん
08/01/12 02:16:00
>>20
>ソースコードからでもよいので
>VSのデータベースマネージャとかからできるのかーとか思っていますが・・・
どっちだよw

「Visual C# 2005 Express MySQL」、「C# MySQL」でググってみた?
前者はアドイン、後者は接続方法が先頭付近にあるよ?

22:デフォルトの名無しさん
08/01/12 10:20:14
ExpressはMS公式のアドイン以外使えないんじゃなかった?

23:デフォルトの名無しさん
08/01/12 10:55:36
今練習でデータベースを扱うプログラムを組んでいるのですが

ADO.netデータアダプターを利用した

24:23
08/01/12 10:58:44
済みません・・・・改めて

今練習でデータベースを扱うプログラムを組んでいるのですが
da.update(dt);
でデータのアップデートをする場合 トランザクションは自動的に内部処理されて
エラーはロールバックされると考えていいのでしょうか?
それとも確実に行うにはすべて手動で設定していった方が良いのでしょうか?

25:デフォルトの名無しさん
08/01/12 12:09:20
>>21
ぐぐってみました
前者のアドインは有料なのね・・・
後者の接続方法でやってみます
もっと簡単に接続できればいいんだけどなー

26:デフォルトの名無しさん
08/01/12 13:01:29
ODBC使う手もあるけどな
まあMySQL Connector/Netあたりでいいべ

27:デフォルトの名無しさん
08/01/12 13:09:35
VSからMySQLQueryBrowserみたいなGUI環境で接続できればいいのにね

28:デフォルトの名無しさん
08/01/12 13:52:12
有料のにはあるみたいだけどな

29:デフォルトの名無しさん
08/01/12 13:55:01
>>24
トランザクションは使われていない。
System.Data.Common.DbTransactionか
System.Transactions.TransactionScopeを合わせて使う。



30:デフォルトの名無しさん
08/01/12 16:36:16
C# + VS2005 ExpressでのWindowsフォームアプリケーションの
開発に関してお聞きしたいのですが、フォーム(Form)上にテキストボックス(TextBox)
が配置されていて、あるタイミングでクラス(Woker)のメソッド(Method)を呼び出します。
この時、UIをフリーズさせないようにMethodはデリゲートとBeginInvokeを使用した
非同期呼び出しで呼び出され、処理終了後にコールバック(MethodDoneEvent)を使用してTextBoxに
取得した内容を表示します。

Methodでは「任意のWebサーバにHTTPで接続しファイルをダウンロードしてくる」
といった処理が行われているのですが、その際Methodの中で
1.通信の準備
2.Webサーバへの接続
3.ヘッダの取得
4.ファイルの取得
5.通信の後始末
と5つのステップの処理が行われています。

この時1~5の処理の実行と結果を、逐一Form上のTextBoxに表示したいのですが
MethodDoneEventが呼ばれる時には既に5までの処理が完了しているので
リアルタイム表示にはなりません。
1~5までの処理をリアルタイムでTextBoxに表示させたい場合、1~5の各処理を分割し
それぞれを非同期呼び出し・コールバックからの結果取得・反映を行う必要があるのでしょうか?
それとも他に呼出元のFormに対して情報を通知する手段は存在するのでしょうか?

単純にWorkerにFormのインスタンスを保持させて、Method内で直接Form上のTextBoxを更新させれば
早いのですが.NET Frameworkの設計で「フォームメソッド以外にフォームの要素を変更させるのは好ましくない」
といった感じのことを聞いた事があるので・・・・


31:デフォルトの名無しさん
08/01/12 16:42:49
>>30
BackgroundWorker

32:デフォルトの名無しさん
08/01/12 16:46:19
「フォームメソッド」をInvokeすりゃいいんじゃね?

BackgroundWorker使って
その度にReportProgressでProgressChangedイベント起こせば簡単だけど

33:デフォルトの名無しさん
08/01/12 16:58:40
>>31-32
即レスありがとう御座います!

BackgroundWorker・・・こんな便利なものがあったんですね・・・
早速使ってみたいと思います

34:デフォルトの名無しさん
08/01/12 19:05:30
知識が及ばず、検索用のキーワードだけでも良いので教えてもらいたいです。

ファイルをコピーするユーティリティを作ってみていたのですが、少ないファイルなら良いのですが
それが大量だったり大容量だったりするとすごく時間がかかってしまいます。
それとファイルのコピー中はフォーム上のボタンやラベル等々はenable=falseとして操作できないようにしています。

それで肝心のエラーなのですが、同じ処理をさせても出てくれませんorz
確かポンプだとかメッセージがないとか長時間だかとかといった具合の言葉があったのは覚えています。

なのでこういった時間のかかる処理をするときの作法というかベターな方法みたいのはないでしょうか?

35:デフォルトの名無しさん
08/01/12 19:07:12
ryの使い方を再認識した

36:34
08/01/12 20:00:34
すいません、何度かチャレンジしてたら出せました

マネージ デバッグ アシスタント 'ContextSwitchDeadlock' では '(ファイルへのパス)' に問題を検出しました。
追加情報: CLR は、COM コンテキスト 0x1b08b8 から COM コンテキスト 0x1b0a28 へ 60 秒で移行できませんでした。ターゲット コンテキストおよびアパートメントを所有するスレッドが、
ポンプしない待機を行っているか、Windows のメッセージを表示しないで非常に長い実行操作を処理しているかのどちらかです。この状態は通常、パフォーマンスを低下させたり、
アプリケーションが応答していない状態および増え続けるメモリ使用を導く可能性があります。この問題を回避するには、すべての Single Thread Apartment (STA) のスレッドが、
CoWaitForMultipleHandles のようなポンプする待機プリミティブを使用するか、長い実行操作中に定期的にメッセージをポンプしなければなりません。

こいつです、警告っぽいです


37:デフォルトの名無しさん
08/01/12 20:02:09
ネタじゃないの?

>それで肝心のエラーなのですが、

突然話が出てくるんだな。
話の上の部分書き忘れたのか、ゆとりなのか?

38:デフォルトの名無しさん
08/01/12 20:07:07
メッセージポンプが滞る様な何かをしてるんだろうけど

何をしたくて
何をしたら
何が起きたのか

をちゃんと書けよ

39:デフォルトの名無しさん
08/01/12 20:07:17
スレッド作って時間がかかる処理を実行させればいいんじゃないの

40:34
08/01/12 20:07:50
>>37
ええっとどこが突然なのか・・質問の原因を前におけということなら質問の原因がわからないので後に置きました

それで、という接続詞の話ならば間違いなく正しいです、1つ意味を進める意味合いです

41:デフォルトの名無しさん
08/01/12 20:09:18
知識が及ばず、検索用のキーワードだけでも良いので教えてもらいたいです。
(なにをしたら)
ファイルをコピーするユーティリティを作ってみていたのですが、少ないファイルなら良いのですが
それが大量だったり大容量だったりするとすごく時間がかかってしまいます。
それとファイルのコピー中はフォーム上のボタンやラベル等々はenable=falseとして操作できないようにしています。
(なにがおきた(+後述))
それで肝心のエラーなのですが、同じ処理をさせても出てくれませんorz
確かポンプだとかメッセージがないとか長時間だかとかといった具合の言葉があったのは覚えています。
(なにをしたくて)
なのでこういった時間のかかる処理をするときの作法というかベターな方法みたいのはないでしょうか?

こうしてやらないとわからないか

42:デフォルトの名無しさん
08/01/12 20:10:17
エラーが出るとか書いてないのに
いきなりエラーの説明されても・・・

どこで出たエラーなんだ?

43:デフォルトの名無しさん
08/01/12 20:11:37
>>41
肝心のエラーとか言われても、それまでにエラーの話なんて一言もないじゃないか。

44:デフォルトの名無しさん
08/01/12 20:15:02
煽るやつ荒らすやつに一々反応しないでくれ

45:デフォルトの名無しさん
08/01/12 20:16:09
わかんないけど上のレスを見る限りFormで長い処理をやらせるときは
BackgroundWorkerを使えばいいみたいだな

46:デフォルトの名無しさん
08/01/12 20:29:34
こうやってタコは成長していくんだな
いきなりMSDNなんて引いちゃだめだ

47:37
08/01/12 20:31:36
嵐じゃないよ。アホは放置するというのなら
>>34を放置しろ。
内容を適当に書き換えてやろうか?
どこが変わったか読んでみ。

ファイルをコピーするユーティリティを作ったのですが、大量のファイルや大容量のファイルを
コピーすると処理にかなり時間がかかって、途中でエラーが出ます。
それで肝心のエラーなのですが、同じ処理をさせても出たり出なかったりしますorz
内容は(中略)
こういった時間のかかる処理をするベターな方法はないでしょうか?


48:デフォルトの名無しさん
08/01/12 20:37:41
今後>>47に触る奴は荒らしとみなす

49:デフォルトの名無しさん
08/01/12 20:39:43
わたしって~じゃないですか~


50:デフォルトの名無しさん
08/01/12 20:44:03
>>47
> 内容は(中略)
> 内容は(中略)
> 内容は(中略)
> 内容は(中略)


51:デフォルトの名無しさん
08/01/12 20:49:26
C#でユニークID、親のユニークID、表示用のラベルを持ったDataTableを
ListVewにバインドしてツリーを作る方法ありますかね
やっぱコード書いてツリー作るしかない?

52:デフォルトの名無しさん
08/01/12 21:13:50
>>51
ListView?

53:デフォルトの名無しさん
08/01/12 21:44:20
かちゅーしゃだとスレタイが化けるのはおれだけ?
IEその他だとなんともない

「ふらっとC#@`C♯@`C#(初心者用) Part23」
となっている



54:デフォルトの名無しさん
08/01/12 21:45:44
ありゃ書き込んだらカキコはまともに見える
"," が@と`になる

55:デフォルトの名無しさん
08/01/12 21:47:33
回答は(後略)

56:デフォルトの名無しさん
08/01/12 22:04:14
>>52
TreeViewでした(;´д`)

57:デフォルトの名無しさん
08/01/12 23:03:11
PictureBox上でToolTipを表示するのに
マウスカーソルの位置でメッセージ内容を変えてます

Popupイベントでメッセージを変えてるんだけど
ただ、これだどPictureBoxの中でマウスカーソルが移動した場合に
ToolTipが再度表示されなくて悩んでます

同じコントロール上でマウスカーソルを移動したときに
ToolTipを再表示する設定ってできますか?

58:デフォルトの名無しさん
08/01/13 02:07:30
親フォーム(クラス Form1)で、BackgroundWorkerのbgwを作り裏で処理をさせています。
また、Form1から子フォーム(クラス FormOption)を呼び出せるようになっています。

ここで子フォームのボタン(btnOK)を押されたときに、裏処理を中断させたいんですが、どうしたらいいでしょうか。。。
親フォームからだったらクラスが同じなのでbgw.CancelAsync();で良いと思うんですが、クラスが違うので使えません・・・

//まだクラスとかインスタンスとかの概念がよく理解してないのが問題だと思います(´・ω・)
//とりあえず似たようなケースで、異なるクラス間で変数いじったりするならstaticにすればいいってことは分かったんですが・・・

59:デフォルトの名無しさん
08/01/13 02:18:13
子フォームがShowDialogなら、返値みて判断。
Showでキャンセルした時に閉じるなら、子フォームにIsCancelledプロパティ用意して子フォームのClosedイベントでチェック。
一般的には子フォームにCancelledイベントを作ってキャンセルボタン押されたら発生、親フォームはイベントにキャンセル処理を設定。

60:デフォルトの名無しさん
08/01/13 02:18:20
別々のクラスオブジェクトのメソッドから共通のログファイルに書き出ししたい場合は
どのようにすればよろしいのでしょうか?

61:デフォルトの名無しさん
08/01/13 02:21:26
>>60
log4net

62:デフォルトの名無しさん
08/01/13 02:26:47
外部のライブラリを使わない方法を教えていただけませんか

63:デフォルトの名無しさん
08/01/13 02:35:51
>>62
内部に取り込む?

64:デフォルトの名無しさん
08/01/13 02:39:23
>>57
自分でやる。定番のルーチンだと思うけど。

以前の領域かどうか判別して、同じなら何もしない。
違ったらtoolTip.Active をいったんfalse にしといてSetToolTip設定、
Active をtrueに。

65:デフォルトの名無しさん
08/01/13 02:42:15
>>62
ユーティリティクラスの静的メソッドで書けばよかろうもん

66:デフォルトの名無しさん
08/01/13 04:52:46
TextBoxに対して、Ctrl+Vとかのショートカットを送る方法ってありますか?
右クリックメニューに独自処理を追加したいけど難しそうなので、独自処理+標準のコピーペーストとかをもつ
メニューを作りたいと思っています。

67:デフォルトの名無しさん
08/01/13 04:57:15
上記自己解決。
URLリンク(bbs.wankuma.com)
さんざん探してから書いたのに、書き込み後、一発目の検索で発見。
しかも、普通にメソッドで用意されてた。

68:デフォルトの名無しさん
08/01/13 06:30:26
まあ困ったらWeb検索するより先にMSDN/ヘルプを見ろってことだな

69:デフォルトの名無しさん
08/01/13 07:19:16
お~い山田くん、これテンプレに貼っといて

URLリンク(msdn2.microsoft.com)

70:デフォルトの名無しさん
08/01/13 11:04:34
>>60
普通にTraceかTraceSource使えば?

71:デフォルトの名無しさん
08/01/13 12:02:17
tabControlに貼り付けたtoolStripが、勝手に移動したり、visible=falseになったりして困っています。
GripStyle=hiddenです。
ロックかけてもお構いなし。なにか良い回避策ありませんか?
C# 2008 Express Editionです。

72:デフォルトの名無しさん
08/01/13 13:05:39
コンボボックスの値を取得したいのですが
Itemには、No1~No5までの5つの文字があって
ComBoBoxのテキストには(選択してください)
という文字列が入っています
この時、プルダウンメニューからアイテムを選択しなかった時は
ComboBox.Textには(選択してください)が入ってしまうのでしょうか?
またアイテムが選択されてる状態の時は、ComboBox.Textで取得できるのでしょうか?

73:デフォルトの名無しさん
08/01/13 13:30:08
(´・ω・`)しらんがな

74:デフォルトの名無しさん
08/01/13 15:03:01
そんなもん実験すりゃいいだろうが

75:デフォルトの名無しさん
08/01/13 17:13:08
 配列の巡回を持った言語ならC#に限らない話だと思うのですが、
foreach中に配列の要素を消したい時、一番スマートなやり方としてはどんな物が有るでしょうか?
 どうしてもforeachが2回以上必要な気がします。
 プログラミングがうまい人ならもっとマシな方法をしていませんでしょうか?
下に目的の代換えソースを書いてみました。


//あまり綺麗では無いと思う例---
/*
 「予期しない動作を防ぐため、コレクション内容の変更には使用しないでください。」という制限の為
削除する要素へのキーを別途用意した配列に入れてその配列を"又"foreachしています。
*/
foreach(OBJ val in table)
{
 if (val.needDel) delArray.Add(val.key);
}

foreach(key key in delArray) //
{
 table.Remove(key)
}
delArray.Clear()


76:デフォルトの名無しさん
08/01/13 17:21:01
前スレでさんざん水掛け論やってたな確か

77:デフォルトの名無しさん
08/01/13 17:24:07
>>75
つ RemoveAll()

78:デフォルトの名無しさん
08/01/13 17:24:55
そうだな。
元がListBoxだったのにそれそっちのけでなんやかややってたなw

79:デフォルトの名無しさん
08/01/13 17:28:20
OBJとかkeyとかなぜか先頭小文字のneedDelとかvarと紛らわしいvalとか
名前ばっかり気になるw

80:デフォルトの名無しさん
08/01/13 17:29:35
Smalltalk風ですな

81:デフォルトの名無しさん
08/01/13 17:34:54
つうかあの時の奴と全く同じミスをしとる。 >>75
アイテムで削除すると同じキーが複数存在した場合にうまくいかんぞ。

82:デフォルトの名無しさん
08/01/13 17:35:17
foreachは消すためには使えない
そもそも配列はAddもRemoveもできない

83:デフォルトの名無しさん
08/01/13 17:36:01
あらしや釣りでは無いです。

>76 >78
前スレ見てきました。 C#では
ToList().ForEach(index => listBox1.Items.RemoveAt(index) );
あたりが使えそうですね。 これはつまり匿名メソッド?

>79 >80
borland (Pascal?)から来ました。 var,valとalignはテキストエディタで色分けしています。


84:デフォルトの名無しさん
08/01/13 17:38:43
なんで素直にRemoveAll()じゃあかんの?
たしかにあのメソッド名は大変紛らわしいが、アイテムごとに条件を見て
削除するという目的にまさにぴったりなんだが。

85:デフォルトの名無しさん
08/01/13 17:38:50
>>75
for (i = list.Count - 1; i >= 0; i--)
{
if (...)
{
list.RemoveAt(i);
}
}

こんな感じかな。

86:85
08/01/13 17:42:13
しまった。RemoveAll()を忘れてた。


87:デフォルトの名無しさん
08/01/13 17:43:22
>>75の言う配列というのがList<T>のことならRemoveAll一択

88:デフォルトの名無しさん
08/01/13 17:54:26
前スレから見に戻って良かったです。前スレではRemoveAll()出てないし。

ヘルプが2割も理解できてませんが、List<T>::RemoveAllが良いのですね?
Delegateを返す関数を作ってvalueに入れる??

どうでも良い話。自分が一昔前にborlandつかってた頃のソースは小文字のみでした。
何処で聞いたんだっけな?


89:デフォルトの名無しさん
08/01/13 17:54:26
AddやRemoveが使えてるから、配列じゃなくてList<T>なんだろうな。

table.RemoveAll(x => x.needDel)
といったところか

90:デフォルトの名無しさん
08/01/13 17:55:27
>89
ありがとう。 まとまりました。

91:デフォルトの名無しさん
08/01/13 18:17:25
List<T>の各要素に対して、削除と、削除とは別の処理を、1つのループで行うにはどうすればいいの?

92:デフォルトの名無しさん
08/01/13 18:25:38
RemoveAllかなんかで削除してからその他の処理をすれば?

93:デフォルトの名無しさん
08/01/13 18:28:06
RemoveAll厨必死杉

94:デフォルトの名無しさん
08/01/13 18:28:59
List<T>の各要素に対して、削除と、削除とは別の処理を、1つのforeachで行うにはどうすればいいの?

95:デフォルトの名無しさん
08/01/13 18:33:32
forを使うといい

96:デフォルトの名無しさん
08/01/13 18:49:22
URLリンク(bbs.wankuma.com)

97:デフォルトの名無しさん
08/01/13 18:57:39
namber?

98:デフォルトの名無しさん
08/01/13 19:00:00
cgiの仕様だそうだからそっとしといてやれ。

99:デフォルトの名無しさん
08/01/13 20:25:32
XPの音量のプロパティのうちWaveとかの特定のものを操作したいのですが
.NETのライブラリを探してもないようです。
Win32APIを使うしかないのでしょうか?

100:デフォルトの名無しさん
08/01/13 20:32:46
うん
まあちょっと検索すりゃC#ラッパとかすぐ見つかるだろうけど

101:58
08/01/13 20:57:10
>>59
あ・・・ShowDialogって値返してたんですね(´・ω・)戻り値見る方法ですんなり解決しました。ありがとうこざいました。

102:デフォルトの名無しさん
08/01/13 21:43:33
ウインドウを表示するにはどうすればいいのでしょうか?

103:デフォルトの名無しさん
08/01/13 22:10:57
>>102
Form.Show();
とかってことじゃなくて?もうちょっと具体的に言ってもらえればアドバイスもしやすいと思うよ

104:デフォルトの名無しさん
08/01/13 22:44:18
ShowWindow( HWND, int )

105:デフォルトの名無しさん
08/01/13 23:07:42
すいません。

C# 2005 Express Editionを使っているのですが、
フォームのAcceptButtonに設定されているボタンの
クリックイベントをキャンセルするには、
どうしたらよいのでしょうか?

private void buttonOK_Click(object sender, EventArgs e)
{
 if (エラーチェック)
 {
  エラーならキャンセル
 }
以下略

というようなことがやりたいのですが、
フォームのAcceptButtonに設定されているため、
ウィンドウが消えてしまいます。

AcceptButtonに設定するのをあきらめるしかないのでしょうか?

106:デフォルトの名無しさん
08/01/13 23:20:25
うん。

107:デフォルトの名無しさん
08/01/13 23:25:55
VB6.0のフォームデザイナみたいにフォームに点が表示されて
コントロールが配置しやすくなる設定はできないんでしょうか?

108:デフォルトの名無しさん
08/01/13 23:34:01
>>107
formのプロパティーにあるよ。

109:デフォルトの名無しさん
08/01/13 23:41:20
いろんなサンプル見て調べながら、

public void myReceive (){
   remoteEP = null;
   udp.BeginReceive(new AsyncCallback(ReceiveCallback), null);
}

private void ReceiveCallback (IAsyncResult ar){
   byte[] ReceivedBytes = udp.EndReceive(ar, ref remoteEP);
}

udpはUDPClient型
remoteEPはIPEndPoint型

こんなかんじでバックグラウンドでUDPの受信待機&受信をするコードを書いてみたんですが、受信待機状態を中断するにはどうしたらいいんでしょうか・・・良い感じのメソッドとかも見つからなくて困ってます。。。

110:デフォルトの名無しさん
08/01/13 23:42:40
>>106

むう。。。
ありがとうございます。

111:デフォルトの名無しさん
08/01/14 00:04:36
>>108
ツール→オプション→Windowsフォームデザイナ→レイアウト設定でできました

112:デフォルトの名無しさん
08/01/14 08:02:02
Windows2003R2 x64のWndProcにNM_CUSTOMDRAWが飛んでこないんですが、なんで?
x86を明示してビルドすると動くのですが

113:デフォルトの名無しさん
08/01/14 09:21:23
>>112
64bit環境ではIntPtrが64ビットになるから、これが影響してないか?

114:デフォルトの名無しさん
08/01/14 15:33:00
あるバイナリファイルの100万バイト目から10バイトだけデータが欲しいのですが、
こういう時でも律儀に100万バイト分のデータを読み込まないと取得できないのですか?

115:デフォルトの名無しさん
08/01/14 15:36:57
>>114
Seekがあるよ。

116:114
08/01/14 15:46:15
>>115
BaseStream.Seek()メソッドを利用することで取得できました
ありがとうございました

117:デフォルトの名無しさん
08/01/14 16:57:24
File.Copyメソッドについて質問です。

このメソッドを利用して、色々とコピーしてみていると、たまにエラーが出ます。
アクセス権の問題だったりするのですが、例えば
File.Copy(From, To);
このFromを読み込み可能に、Toを読み書き可能にする、というのは無理なんでしょうか?

118:デフォルトの名無しさん
08/01/14 17:00:24
質問の意味がよく分かりませんが。。。
そんな質問してると「日本語でおk」って書かれちゃうと思うぞw

119:117
08/01/14 17:04:24
えっと、こうかけばよかった

File.Copy(From,To);
この時、FromとToのアクセス権の設定の問題でエラーが出るのを回避したいです。
どうすれば良いでしょうか?

120:デフォルトの名無しさん
08/01/14 17:07:31
エラーが出ないようにチェックしてからコピーすればいいじゃまいか。
それともアクセス権を回避して無理やり書き込みたいってことか?

121:デフォルトの名無しさん
08/01/14 17:10:00
無視しようと思えば無視して横車を押せるようなアクセス権なら
そんなものに意味などないと思うんですが間違ってるでしょうか……

122:デフォルトの名無しさん
08/01/14 17:11:10
無理にというより、設定し直してやりたいです


123:デフォルトの名無しさん
08/01/14 17:13:19
>>122
同じことだと思いますが……
設定して「無理に」横車を押したい、と

124:デフォルトの名無しさん
08/01/14 17:16:07
アクセス権がないのにアクセス権を変える権利はあるのかよ。
どう考えても設定間違ってるだろw

125:デフォルトの名無しさん
08/01/14 17:16:29
それを言ったらPCの存在を否定してそうですが……

設定を変えるのは無理そうですね、ファイルアクセス権に限ってというよりファイルアクセス権だからなのかな
世のバックアップソフトは一体どうなってるんだろう

126:デフォルトの名無しさん
08/01/14 17:16:29
ふらっとなのにあげあしとりしか存在しないのかね

それも反応早いし、このスレもういらないだろ正直

127:デフォルトの名無しさん
08/01/14 17:17:23
前スレで「フォームの内容を保存」がどうのと騒いでた人ですが、
なるほど。拡張子がいかなるものであろうと、テキストファイルやHTMLファイルみたいな
テキスト主体のデータをファイルに保存するにはテキスト形式で書き出し、
画像ファイルや音楽、動画ファイルといったデータを保存するにはバイナリ形式で書き出せば良かったのですね。

あとは書き出したい内容を然る場所に書けば、と。

その節は大変お騒がせして、お恥ずかしい(*^ ^*;
(報告したかっただけなので、流してくださって構いません)

128:デフォルトの名無しさん
08/01/14 17:19:27
>>126
揚げ足取りってw
俺はそうは思わないけど、君がそう思うのなら自分の言葉に責任持てよ。

つまり揚げ足取りではない(繰り返すけど揚げ足とってるつもりないぞ)、
真面目な回答をぜひ頼むよ。

それとも自分棚上げ野郎なのか君は。

129:デフォルトの名無しさん
08/01/14 17:25:46
円の描画でつまづいています。

円の内側は塗りつぶしができるのですが,
円の外側を塗りつぶしたい時はどうしたらいいでしょうか



130:デフォルトの名無しさん
08/01/14 17:31:12
>>125
アクセス権の存在意義について考えろ。
アクセス権をオーバーライドできたらアクセス権の意味がないだろ。
バックアップソフトは普通はアドミン権限で実行する。

>>129
円の形でクリッピングして塗りつぶせばいいんじゃね?

131:デフォルトの名無しさん
08/01/14 17:38:45
>>130
解決しました。
ありがとうございます。
勉強になりました。


132:デフォルトの名無しさん
08/01/14 17:44:37
コントロールでkeydownを所得するとき
個々のkyedownイベントでとる方法とPreviewKeyDownのどちらが良いのでしょうか?

ふつうにkeydownで所得できるようなイベントの時はどっちでも同じ?

133:デフォルトの名無しさん
08/01/14 18:49:21
所得ってなんだ…

134:デフォルトの名無しさん
08/01/14 19:31:44
スクロールのついているフォーム全体をキャプチャを目的に,
スクロールを操作してキャプチャを試みています。

コントロールを指定して画像を取得することができたのですが
スクロールは制御すらできません。
なにかよい助言をしていただけませんか?




135:デフォルトの名無しさん
08/01/14 20:31:46
>>133
また揚げ足かよ!と思ったら、その上も所得と書いてる・・・
たぶん132はガチでずっと、取得を所得と思って使ってきたんだろねw

>>132
2.0以降なら、PreviewKeyDownで取得すべき。
KeyDownは発生しないキーがある(IsInputKeyプロパティで発生可になるけど)

136:デフォルトの名無しさん
08/01/14 20:49:19
>>126
揚げ足を取られるのは、アホな質問をした場合に限られる。
まともな質問であればまともな回答が返ってくる。

とられた場合はまずは自分がアホなことを言っていないかを振り返ってみよう。

137:134
08/01/14 21:19:13
どなたかおわかりになりませんか?
いろいろ調べてみましたが,具体的にどのようにしたらいいのか
さっぱり分かりませんでした。

138:デフォルトの名無しさん
08/01/14 21:21:43
WM_SCROLL投げたら?

139:デフォルトの名無しさん
08/01/14 21:21:44
Formの背景色だけを半透明にする方法はないでしょうか?
Opacityオプションで半透明にすると、Form上のLabelなどの文字やButtonまで半透明になってしまいます。


140:デフォルトの名無しさん
08/01/14 21:25:58
>>139
TransparencyKey

141:デフォルトの名無しさん
08/01/14 21:27:47
>>139
TransparencyKeyでは完全に透明になってしまうのですが…

142:デフォルトの名無しさん
08/01/14 21:31:16
背景色をマゼンタにでもしとけば?

143:デフォルトの名無しさん
08/01/14 21:38:53
zlib(RFC1950)で圧縮されたファイルを解凍したいんだけど、C#だけでできる?
DeflateStream はRFC1951、GZipStream はRFC1952を使ってるらしくてうまく解凍できない。
他にzlibに関わるクラスも見当たらないし、もしかしてC#じゃできない?

144:デフォルトの名無しさん
08/01/14 21:40:27
正式な方法が用意されてるかどうかは知らないけど
CでできるんだったらC#でもDllImport使えばできる

145:デフォルトの名無しさん
08/01/14 22:21:36
C#でも自分でプログラム書けばできる

146:デフォルトの名無しさん
08/01/14 22:51:16
携帯からなんでURLは書けないが、Sourceforgeにzlib.netとかいうプロジェクトがある

147:109
08/01/14 23:18:31
良かったらどなたか>>109もお願いします(´・ω・)

148:デフォルトの名無しさん
08/01/14 23:26:39
受信待機状態を中断…もう少し具体的に

149:109
08/01/15 00:09:52
>>148
ありがとうございます。
具体的には、ボタンが押された時にポートを解放(?)してudpを破棄したいということです。

実装としては
udp=new UdpClient(port);としているんですが、ユーザの入力でポートを変更することも出来るようにしたいんです。

とりあえず今日いろいろ考えた末、
ポートを変更するときに呼ばれるメソッドを

public void ChangePort () {
   udp.Close();
   udp = new UdpClient(port);
   myReceive;
}

として、無理矢理破棄して、ReceiveCallback内をtry~catchで起こった例外を全て無視するようにして一応動いたんですが、あまりにも邪道すぎる気がします。。。

150:デフォルトの名無しさん
08/01/15 00:14:11
>>149
いやもそれでほぼオケじゃね?
例外を全て無視じゃなくて外からClose()された時の例外だけ無視するようにすれば。

151:109
08/01/15 00:36:04
>>109
あ゛・・・
これでよかったんですね。例外は基本的に全て処理するべきなのかなぁって思い込みがありました(´・ω・)
とりあえずArgumentExceptionと、タイミングによってはObjectDisposedExceptionがスローされるみたいなんで、これらを無視するようにしておきました。

ありがとうございました。

152:デフォルトの名無しさん
08/01/15 00:53:30
C#のことでなく.NET Frameworkのことですれ違いなんだけど、

C#で文法のことはいいとしてライブラリのことが知りたいんだけど
いい情報源教えてください。

URLリンク(dobon.net)
は読みました。
とりあえず
プログラミングMicrosoft .NET Framework 第2版 (マイクロソフト公式解説書) (単行本)
は買ってみようと思います、

よろしくお願いします。


153:デフォルトの名無しさん
08/01/15 01:15:19
>>152
MSDN

154:デフォルトの名無しさん
08/01/15 02:33:43
アンマネージドなリソースについてなんですが、やり直し等の機能でいつ解放
したらいいかわからないものが出てきた(ファイルとか)ので、ゴミ箱クラス作って
そこで一括管理しようと思ったのですが、対象となる変数の参照カウンタって
取得できないのでしょうか?
やっぱり自分で皮をかぶせるしかないですかね?

155:デフォルトの名無しさん
08/01/15 02:40:28
何が言いたいのかよく分からんが、
LRのガーベジコレクタは参照カウント方式じゃないぞ

156:デフォルトの名無しさん
08/01/15 02:40:59
s/LR/CLR/;

157:デフォルトの名無しさん
08/01/15 02:48:42
>>155
ありゃ、そうなんですか… orz
今ざっと調べたところ、Finalize()を積んでおけばGCが勝手に実行
してくれるみたいなんですが、どうしてもDispose出来ないときは
それでいいんですかね?

158:デフォルトの名無しさん
08/01/15 04:03:32
GC される前にランタイムが落ちるとか、結構ありそうだけどな。
ところで 「やり直し等の機能」 って何?

159:デフォルトの名無しさん
08/01/15 06:24:53
>>157
アンマネージリソースを扱うなら、必ず適切なタイミングで
Disposeを呼ぶような設計しなきゃ駄目だよ。
細かい話が多いので割愛するけど、
ファイナライザに頼るスタイルは色々問題があるのヨ。

ぶっちゃけマネージドな世界では、例えばC++において参照カウンタ式スマートポインタで
自動化できてたリソース管理の一部は使えなくなると思っていた方が良いかと。

160:デフォルトの名無しさん
08/01/15 06:30:02
VBの参考書で勉強しているのですが
Label1.Text = DirectCast(Me.PreviousPage.FindControl( _
"TextBox1"), TextBox).Text

をC#で書くにはどうしたらいいですか?

161:デフォルトの名無しさん
08/01/15 07:42:54
自己解決しましたm(_ _)m

162:デフォルトの名無しさん
08/01/15 08:30:22
>>158
ペイントなどに良くあるやり直し・元に戻す操作です。

>>159
やっぱり自前でDisposeしなきゃだめなんですね…
ちょっと基本設計見直してきます orz

163:デフォルトの名無しさん
08/01/15 14:07:03
Form1とForm2を定義して
Form1内で
Form2 f2 = new Form2();
f2.ShowDialog();
でForm2を呼び出した後にf2内のbutton_Clickイベント処理内でf2の中のテキストボックスや、コンボボックスの値をForm1で取得したいのですが
どうしたらよいでしょうか?

164:デフォルトの名無しさん
08/01/15 15:56:14
Form2がイベント公開してf2内のbutton_Clickイベントハンドラ内でfire
イベントデリゲート自分で定義してテキストやコンボボックスの値をEventArgsにつっこむか
またはプロパティで公開しとく

165:デフォルトの名無しさん
08/01/15 16:31:40
fireってなんでしょうか?ぐぐってもよくわかんないです・・・

166:デフォルトの名無しさん
08/01/15 16:39:14
イベントを起こす、ってことじゃね?

//Form2.cs

public event EventHandler HogeEvent;

private void button_Click( object sender, EventArgs e )
{
 if( this.HogeEvent != nul )
  this.HogeEvent( this, EventArgs.Empty ); // ← ココ
}

-------------------------------------------
//Form1.cs
...
Form2 f2 = new Form2();
f2.HogeEvent += new EventHandler( f2_HogeEvent );
...

private void f2_HogeEvent( object sender, EventArgs e )
{
 //ココが呼ばれる
}

167:デフォルトの名無しさん
08/01/15 18:47:13
>>f2.HogeEvent += new EventHandler( f2_HogeEvent );
これは何をしているのでしょうか?
form1では
private void button_add_Click(object sender, EventArgs e)
{
Addition add = new Addition();
add.ShowDialog();
}
でform2(Addition)を呼び出し、手動で、form2内のテキストエリアやコンボボックスに入力してOKボタンを押す
そのとき、したのイベントに遷移して、このメソッド内で、form1内のデータグリッドを更新できないか?ということなんですが。
private void button_OK_Click(object sender, EventArgs e)
{


}



168:デフォルトの名無しさん
08/01/15 18:52:38
(´・ω・`)しらんがな

169:デフォルトの名無しさん
08/01/15 19:03:28
恥をしのんで質問いたします。
初めてコンソールアプリを作ろうとしているのですが、
エクスプローラーからコマンドプロンプトにディレクトリパスをD&Dで使わせようと思っています。
そのとき、長いフォルダ名を含む場合、絶対パスを表す文字列がダブルクォーテーションで囲まれてしまいます。
そのため、"入力文字列補正処理"を入れるようにしましたが、なんだかスッキリしません。
皆様どうやってやってますか?
以下にソースを書きます。宜しくお願いいたします。



170:169
08/01/15 19:04:04
static void Main(string[] args)
{
  string[] str; //検証用変数
  string Input, Output; //フォルダパス

  Console.WriteLine("入力フォルダパスを入力して下さい");

  //入力文字列補正
  str = Console.ReadLine().Split(new char[] {'\"'});
  if (str.Length == 3) { Input = str[1]; }
  else { Input = str[0]; }

  Console.WriteLine("出力フォルダパスを入力して下さい");

  //入力文字列補正
  str = Console.ReadLine().Split(new char[] { '\"' });
  if (str.Length == 3) { Output = str[1]; }
  else { Output = str[0]; }

  if (Directory.Exists(Input) & Directory.Exists(Output))
  {
   Console.WriteLine("valid");
   Console.ReadLine();
 }
  else
  {
   Console.WriteLine("invalid");
   Console.ReadLine();
  }
}

171:デフォルトの名無しさん
08/01/15 19:07:37
>>167
form2でセットするんじゃなくて、form2はセットさせたい項目をpublicなプロパティで返すようにする
form1でDialogResultをチェックしてform2のプロパティからセットするのが正解

172:デフォルトの名無しさん
08/01/15 19:07:40
Trim(char[])

173:デフォルトの名無しさん
08/01/15 19:18:45
>>167
個人で作ってるだけでプロパティ作るのが面倒くさかったら、
form2の該当の入力フィールド(textBoxとか)のModifiersをPublicにするのも手だけど

174:デフォルトの名無しさん
08/01/15 19:22:07
>>171
丁寧にありがとうございます。
>>セットさせたい項目をpublicなプロパティで返すようにする
というのがいまいちわかりません。
ソース載せます。
//form1(Main)
public partial class Main : Form
{
public Main(){
InitializeComponent();
}

private void button_add_Click(object sender, EventArgs e) {
Addition add = new Addition();
add.ShowDialog();
}
}

//form2(Additon)
public partial class Addition : Form
{
public Addition() {
InitializeComponent();
}

private void button_OK_Click(object sender, EventArgs e) {
//MessageBox.Show(textBox_name.Text+"\n"+ comboBox1.Text+"\n"+textBox1.Text);
}
}

175:デフォルトの名無しさん
08/01/15 19:24:50
public partial class Addition : Form
{
 public string 結果 { return textBox_name.Text+"\n"+ comboBox1.Text+"\n"+textBox1.Text; }
}

176:デフォルトの名無しさん
08/01/15 19:24:57
>>173
publicにしたら、Form1.csの補完機能からform2のコントロールが見えました!
ありがとうございます!

177:175
08/01/15 19:25:16
ミス
 public string 結果 { get { return textBox_name.Text+"\n"+ comboBox1.Text+"\n"+textBox1.Text; } }

178:デフォルトの名無しさん
08/01/15 19:37:02
はじめまして。

まことに簡単な質問で恐縮なのですが、DataGridViewのculomnsのプロパティで
オートインクリメントをしたい列があるのですが、どうすればよいでしょうか?

よろしくお願いいたします。

179:デフォルトの名無しさん
08/01/15 20:33:34
>>169
な、何を言ってるのかね?

180:デフォルトの名無しさん
08/01/15 20:53:51
>>169
ただファイルを開くとかくらいなら、
ダブルクォーテーションがあっても問題なかった気がするけど。

181:デフォルトの名無しさん
08/01/16 10:43:24
>>169
dos窓でドロップやったことないのか?
スペース含むパス取り込むためにデフォルトで""囲みになるのが普通だよー

182:デフォルトの名無しさん
08/01/16 11:16:56
問題あるならTrimでもすりゃいいんでは?


183:デフォルトの名無しさん
08/01/16 11:40:31
C#でExcelを操作しようと調べているんですが、断片的な
情報しか見つける事ができませんでした。

何か参考になる本やサイトなど知っていたら紹介して貰えませんか?

184:デフォルトの名無しさん
08/01/16 12:33:03
COM Excel C# でググるとか

185:169
08/01/16 13:21:32
>>180

そうだと思ったんですが、パスを変数に格納した後にフォルダの存在確認を>>170の下の方で
行っているんですが、""つきのパスだと存在しないよって言われちゃうんですよ。

>>182
調べてみます

186:デフォルトの名無しさん
08/01/16 13:51:48
つか、D&Dできるの始めて知ったぜ。いつもいちいちコピペしてた。

187:デフォルトの名無しさん
08/01/16 14:00:08
Vistaでできないな、、、XPをリモートデスクトップで出してみたらこっちではD&Dできるが・・・

188:デフォルトの名無しさん
08/01/16 14:38:39
VS2005でC#の勉強をしています。
質問なのですが、テキストファイルに
1 200
2 356
3 1250
4 870
5 692
といったような行列があり、それをC#のプログラムで読み込み
1000以上の値を持つものだけピックアップすることはできるでしょうか。
ピックアップした後に計算もしたいので、変数にその値を代入したいのです。
よろしくお願いします。

189:デフォルトの名無しさん
08/01/16 15:00:03
StreamReaderとかで開いて
ReadLineして
パースすればいい

190:デフォルトの名無しさん
08/01/16 15:01:21
var hoge =
 from line in File.ReadAllLines(@"...")
 from str in line.Split(' ')
 let value = Int32.Parse(str)
 where value >= 1000
 select value;



191:デフォルトの名無しさん
08/01/16 15:05:51
VS2005や言うてるやろスカタン

192:169
08/01/16 15:46:16
>>188

StreamReader sr = new StreamReader(filepath);
List<int[]> list = new List<int[]>();
do
{
  string str = sr.ReadLine();
  if (str != "")
  {
   string[] ary = str.Split(new char[] { ' ' });
   int n1 = int.Parse(ary[0]);
   int n2 = int.Parse(ary[1]);
   if (n2 > 999)
   {
    list.Add(new int[] { n1, n2 });
    }
  }
}
while (sr.Peek() != -1);

193:169
08/01/16 15:51:20
どうやら手動で削除するほかなさそうですね。
splitを使って面倒なことをしてましたが、
Trim(もしくはReplaceでも可)を使って少しコードがすっきりしました。
ありがとうございました。



Console.WriteLine("入力フォルダパスを入力して下さい");

Input = Console.ReadLine().Trim(new char[] { '\"' });

Console.WriteLine("出力フォルダパスを入力して下さい");

Output = Console.ReadLine().Trim(new char[] { '\"' });

if (Directory.Exists(Input) & Directory.Exists(Output))
{
  Console.WriteLine("valid");
  Console.ReadLine();
}
else
{
  Console.WriteLine("入力したフォルダパスが不正です");
  Console.ReadLine();
}



194:デフォルトの名無しさん
08/01/16 21:00:02
オマイラそれ絶対なんか間違ってるだろwww

195:デフォルトの名無しさん
08/01/16 21:20:34
すみません、教えてください。

VS2005 .netでプログラムしていますが、HOMEPATHの取得法はあるのでしょうか?

もしあるならば方法をご教授ください。

よろしくお願いします

196:デフォルトの名無しさん
08/01/16 21:23:02
994 名前:デフォルトの名無しさん[sage] 投稿日:2008/01/11(金) 12:14:20
Environment.GetEnvironmentVariable( "HOMEPATH" );

197:デフォルトの名無しさん
08/01/16 21:27:22
\r\n と \n の差がわからないんだが
どっちも改行するわけだが動違うの?

198:デフォルトの名無しさん
08/01/16 21:31:50
>>197
サイズが違う。

199:デフォルトの名無しさん
08/01/16 21:38:14
おおまかにはOSによって改行コードが違う。
Unix:\n
Windows:\r\n
Mac:\r

ってか基本だと思うけど。

200:デフォルトの名無しさん
08/01/16 21:40:24
>>199
トンクス
Cとかだと\nが改行だから\r\nって何かと思ってたんだが
Windowsなら\r\nでいいってことでつね

201:デフォルトの名無しさん
08/01/16 21:46:35
>>200
Cは、テキストモードだと、\nは\r\nに変換される。(winでは)

202:デフォルトの名無しさん
08/01/16 21:52:10
>>196

ありがとうございました。無事解決です

203:デフォルトの名無しさん
08/01/16 22:09:14
>>200
どうでもいい話ではあるんだが意味的に言うとWinがたぶん正しい
なのでhttpとかも\r\n。この辺はCRとLFを調べてみれ

204:デフォルトの名無しさん
08/01/16 22:28:13
むかしタイプライターというものがあってのう

205:デフォルトの名無しさん
08/01/16 22:57:06
LFだけってのはおかしいと思う。

206:デフォルトの名無しさん
08/01/16 23:00:21
それ言ったらCRだけなのもおかしい

207:デフォルトの名無しさん
08/01/16 23:16:31
CRってキャリッジリターンなのは聞いたことあるけど、LFってなんて言うの?
ラインフィニッシュ?

208:デフォルトの名無しさん
08/01/16 23:20:38
ラインフィード

209:デフォルトの名無しさん
08/01/16 23:21:27
CR=キャリッジリターン=キャリッジ(紙を左右に動かす装置)を初期位置に戻すこと。
LF=ラインフィード=紙送り。

210:デフォルトの名無しさん
08/01/17 00:53:22
C#相談室から誘導されてきました。
たとえば、こういうコードがあったとします。

if (Result == null) {
transaction.Rollback();
MessageBox.Show("エラー0です。");
return false;
}
if ((int)Result == 1) {
transaction.Rollback();
MessageBox.Show("エラー1です。");
return false;
}
if ((int)Result == 2) {
transaction.Rollback();
MessageBox.Show("エラー2です。");
return false;
}
transaction.Commit();
return true;

これをスッキリ表記するのに何かいい手段はないですかねぇ…。
throwで例外起こしてtry~catchってのもスッキリしなくて…

211:デフォルトの名無しさん
08/01/17 01:08:54
C#でLispみたいなカッコイイプログラミングするにはどうすればいいの?

212:デフォルトの名無しさん
08/01/17 01:13:40
F#をダウンロードします

213:デフォルトの名無しさん
08/01/17 01:20:46
そして卵を御飯にかけます

214:デフォルトの名無しさん
08/01/17 01:27:18
>>210
result = (Result == null) ? 0 : (int)Result;

switch(result){
case 0:
case 1:
case 2:
transaction.Rollback();
string temp = "エラー" + result + "です。";
MessageBox.Show(temp);
return false;
break;

default:
transaction.Commit();
return true;
break;
}


215:デフォルトの名無しさん
08/01/17 01:39:34
xmlファイルをphpのsimple xmlみたいに簡単に扱える方法はないのでしょうか?

216:デフォルトの名無しさん
08/01/17 09:07:05
C#のswitchのcaseは絶対に下に降りられないと思ってたが、何も書かなければ並べられるのか。
しかし不必要なbreakを強要されるのが面倒くさいな。
Cの文法に慣れてる人がバグを作らないようにってことなのかな。

217:デフォルトの名無しさん
08/01/17 09:10:59
returnの下のbreakいらんだろ

218:デフォルトの名無しさん
08/01/17 09:22:09
いらん以前に到達できないコードな警告出たりしないかそれ確か

219:デフォルトの名無しさん
08/01/17 13:16:16
構造体のマーシャリングについて質問いいっすか?
自分よく分かってないんですが

typedef struct tagDESKBANDINFO {
 DWORD dwMask;
 POINTL ptMinSize;
 POINTL ptMaxSize;
 POINTL ptIntegral;
 POINTL ptActual;
 WCHAR wszTitle[256];
 DWORD dwModeFlags;
 COLORREF crBkgnd;
} DESKBANDINFO;

の WCHAR wszTitle[256];って
[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Unicode)]
にした上で

[MarshalAs(UnmanagedType.ByValTStr, SizeConst=256)]
string wszTitle;

じゃないんですか?
URLリンク(www.pinvoke.net)
とかだと255になってるんですがどっちが正しいんでしょう?

220:デフォルトの名無しさん
08/01/17 13:16:55
試してみたがbreakいらんな

221:デフォルトの名無しさん
08/01/17 13:20:25
null終端とやらの関係かなとか思ったんですが
URLリンク(msdn2.microsoft.com)(VS.80).aspx
文字列のマーシャリングだと

TCHAR szCSDVersion[ 128 ];

[ MarshalAs( UnmanagedType.ByValTStr, SizeConst=128 )]
String versionString;

になってるしワケワカリマセン

222:デフォルトの名無しさん
08/01/17 13:20:51
>>219
256であってる

223:219
08/01/17 13:25:09
>>222
ありがとうございます。

まじすか。
PInvoke.netのまま使ってると2バイトずつ上にずれてるってことですか?

224:219
08/01/17 13:30:11
ありゃMarshal.SizeOfを見たらどっちも同じ
さらにワケワカメ

アラインとかPackとかのせいですか?
ということは実害なし?

225:デフォルトの名無しさん
08/01/17 18:06:12
GTKについてわからないところがあるのですが、詳しい方いらっしゃいますか?

226:デフォルトの名無しさん
08/01/17 18:08:57
>>225
C#でGTKといったらMono?
Monoスレに行かないといないかもしれない。

227:デフォルトの名無しさん
08/01/17 18:11:31
そうですか…行ってみます。
すみません、ありがとうございました。

228:デフォルトの名無しさん
08/01/18 01:31:53
VC#2008関連の書籍って出ないの?

229:210
08/01/18 02:17:47
>214
ありがとうございます。
これで試してみます。

230:デフォルトの名無しさん
08/01/18 03:32:28
C#でxmlファイルをphpのsimple xmlみたいに簡単に扱える方法はないのでしょうか?

231:デフォルトの名無しさん
08/01/18 03:46:58
visual studio 2005を使ってます。

pictureboxに表示する画像のリソースを指定するときは

this***.Image = Properties.Resources.abc;

のようにしますが(というかVSが勝手にやってくれますが)
これを文字列型の変数を使ってやることはできないでしょうか?

string TMP;
TMP = "abc";
として5行目と同じように指定したいのです。

232:デフォルトの名無しさん
08/01/18 06:06:54
リフレクション使えばできると思うが、やるほどの価値はないと思う。

233:デフォルトの名無しさん
08/01/18 07:02:54
ResourceManager.GetObject使えばできるけど厳密な型指定できないよ

234:デフォルトの名無しさん
08/01/18 07:27:36
何をしたいのかを書けば、もっといい解決法があるかもよ

235:デフォルトの名無しさん
08/01/18 09:13:14
>>232
>>234
リソース名が連続した英数字なので、for文で数十の文字列の配列を作ったんですが、それをリソース名の指定に使う方法が分からなくて・・・
手動でやるよりはるかに効率的だと思うので、できればさわりだけでも簡単に教えてもらえればと

>>233
では、結局出来ないということになるんでしょうか・・・?

236:デフォルトの名無しさん
08/01/18 09:21:16
Properties.Resources.abc;の実装がどうなってるかみなよ。

237:デフォルトの名無しさん
08/01/18 10:18:33
>>230
XLinqでも使ってみれば

238:188
08/01/18 11:19:39
遅くなりましたが無事解決しました!
ありがとうございました。

239:デフォルトの名無しさん
08/01/18 15:01:23
byte[] b1 = new byte[] {1,2,3,4};
byte[] b2 = new byte[] {1,2,3,4};

があったとして、2つの配列の内容が全て等しいか簡単に調べる方法ってないですか?

b1 == b2;

b1.Equals(b2);
もfalseになります(´・ω・)

やっぱいちいちforeachで回さないとダメですか?

240:デフォルトの名無しさん
08/01/18 15:04:53
うむ
Array.Equals は object.Equals と変わらんからな

241:デフォルトの名無しさん
08/01/18 15:06:27
ぶ、C# 配列 比較 で検索したらすぐ見つかりました。
出来ないみたいですねorz

お騒がせしました。

242:デフォルトの名無しさん
08/01/18 15:09:45
継承クラスで共通のメソッド実行時
親クラスで共通の処理をさせたいのですがどうすればいいでしょうか
うまく説明できないんですがポリモーフィズム的なメソッドの共通処理を
継承クラスでは意識せずに親で処理させたいのですが・・・

243:デフォルトの名無しさん
08/01/18 15:24:50
//親
virtual void Hoge()
{
 ...
}

//子
override void Hoge()
{
 ...
 base.Hoge();
}
じゃあかんのん?

244:デフォルトの名無しさん
08/01/18 15:27:51
>>243
やっぱりそうなりますかね
base.Hoge()の処理は必ずして欲しいのに
base.Hoge();を付け忘れちゃったりするものですから

245:デフォルトの名無しさん
08/01/18 16:21:12
Hoge は virtual じゃなくして、HogeOverridable を virtual にして
Hoge のなかで HogeOverridable を呼ぶ
ただし派生クラスで基底クラスの処理の呼び出す位置を変更できないデメリットもある

246:231
08/01/18 19:49:57
>>231ですが
URLリンク(www.atmarkit.co.jp)
を参考に

Assembly thisExe = Assembly.GetExecutingAssembly();

ResourceManager TMPres = new ResourceManager(
"***.Properties.Resources", thisExe);
xxx = (Image)TMPres.GetObject("abc");

とやったらできました。

247:デフォルトの名無しさん
08/01/18 20:10:42
Image img = (Image)Properties.Resources.ResourceManager.GetObject( "hoge" );

248:デフォルトの名無しさん
08/01/18 23:19:52
VS2008を使っていますが、
FormのFormClosingイベントを捕らえて
フォームを閉じることを中止するにはどうすればいいのでしょうか?

以下のように書いてもだめでした。
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
  DialogResult result = MessageBox.Show("変更を保存しますか?", "確認",
  MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
 if (result == DialogResult.Yes)
 {
  this.menuSaveProject_Click(sender, e);
 }
 else if (result == DialogResult.Cancel)
 {
  return; // ←これ
 }
}
よろしくお願いいたします。

249:デフォルトの名無しさん
08/01/18 23:26:03
引数調べれ

250:デフォルトの名無しさん
08/01/18 23:28:22
e.Cansel = true;
とやればいいようですね(´・ω・`)

今までeなんて無視してました
ありがとうございました

251:デフォルトの名無しさん
08/01/18 23:29:03
ていうかイベントの解説に書いてるよな

252:デフォルトの名無しさん
08/01/19 00:16:31
IPAddress[] addrs;
があったとして、
この中から特定のIPの項目だけ削除ってどうすればいいんでしょうか。

InteliSenseで見てると
addrs.Except();
とかそれっぽいのはあるんですが、いまいち使い方がわかりません・・・

253:デフォルトの名無しさん
08/01/19 00:22:22
配列は要素の削除とかできないので作り直し
Array.FindAll でもいける

254:252
08/01/19 01:08:38
>>253
ありがとうございます。やっぱり作り直ししかないんですね(´・ω・)

でもFindAllのおかげでさっくりいきました。
ありがとうございました。

255:デフォルトの名無しさん
08/01/19 01:23:46
List<IPAddress>でいけー

256:デフォルトの名無しさん
08/01/19 01:24:22
>>254
List<>つかおうぜ

257:デフォルトの名無しさん
08/01/19 01:32:56
Listって要素の削除は向いてないんじゃない?

258:デフォルトの名無しさん
08/01/19 01:43:53
ほえ?

259:デフォルトの名無しさん
08/01/19 01:45:39
>>257

260:デフォルトの名無しさん
08/01/19 01:47:58
>>257
( ^ω^)・・・

261:デフォルトの名無しさん
08/01/19 02:05:44

  (^ω^;)⊃ アウアウ!!
 ⊂ミ⊃ )
  /   ヽ

262:デフォルトの名無しさん
08/01/19 02:47:03
またRemoveAll()の流れなのか・・・

263:デフォルトの名無しさん
08/01/19 05:04:38
末尾以外の削除は遅いと思うんだけど、大丈夫なわけ?

264:デフォルトの名無しさん
08/01/19 05:08:48
>>263
実装に因る

てか少なくとも配列を使うのよりは高性能に作られているとうれしい(ビクンビクン

265:デフォルトの名無しさん
08/01/19 05:10:29
>>264
実装見ろよ

266:デフォルトの名無しさん
08/01/19 05:55:24
要素の削除と挿入をやるならLinkedListでしょ?
ランダムアクセスできないけど。

267:デフォルトの名無しさん
08/01/19 06:37:57
>>266
> ランダムアクセスできないけど。

それが答えだ。

268:デフォルトの名無しさん
08/01/19 09:28:45
それは削除にむいてないんじゃなくて、
ランダムアクセスにむいてないだけ。

269:デフォルトの名無しさん
08/01/19 09:57:04
ある時点のList<T>の内容を配列か何かに保存しておき、その内容に戻すということをしたいのですが、
インスタンスを変えたくない場合は、Clearして一つずつAddし直すしかないのでしょうか?

270:デフォルトの名無しさん
08/01/19 09:58:58
要するに、コストの問題だ。

データを参照するより削除と挿入の方が多いならLinkedList だろうし、
頭からforeachしたりインデクスでアクセスする必要があるならList。

目的に応じて使い分ければ済むという当たり前のことだろ。

271:269
08/01/19 10:02:53
>>269
AddRangeってのが目に入っていませんでした。
ClearしてAddRangeが正解でしょうか。

272:デフォルトの名無しさん
08/01/19 10:14:14
>>268
ahosugi

273:252
08/01/19 10:40:42
これは・・・荒らしちゃったかも(・ω・`)
なんかごめんなさいです。
配列っていろいろ考えとかないといけないんですね。要素もすくないし、参照より削除や挿入が多いと思うんで、LinkList使ってみようかなと思います。ググってみます。ありがとうございました。

274:252
08/01/19 10:43:27
LinkedListですね、すいません(汗

275:デフォルトの名無しさん
08/01/19 14:51:22
>>270
そこでB*木とかRB木とかですよ

276:デフォルトの名無しさん
08/01/19 14:56:47
HashSetが合いそうだよなあと確かに話を聞いていて思ったが
要素数少なそうとも思ったのでむしろListでいい気もしたので
言わなかった

277:デフォルトの名無しさん
08/01/19 15:14:25
>>245
すみませんあれからいろいろやってみたのですが
class kitei
{
public void Hoge()
{
基底の処理;
派生Hoge呼び出し;
}
}

class hasei : kitei {
public virtual void Hoge()
{
派生の処理;
}
}
ということ感じになるのでしょうか
基底からの派生hogeのやり方がわからず詰まってしまいました


278:デフォルトの名無しさん
08/01/19 15:18:07
基底にvirtualなメソッドを一つ増やせ

279:デフォルトの名無しさん
08/01/19 15:29:27
>>278
共通でない処理を切り分けてvirtualメソッドを作って
基底で
public void Hoge()
{
基底の処理;
HogeSub();
}
public virtual void HogeSub()
{
}
という風にせよということでしょうか。
メソッド一つで自動的に裏で共通処理できたらいいなーと思ったんですが
使用者が何をするのか明示的に指示するのが正解か

280:デフォルトの名無しさん
08/01/19 15:37:21
>>279
>メソッド一つで自動的に裏で共通処理できたらいいなー
良くないだろ怖いよそんなのw

っていうか、チミは普通に継承の意味が分かってないだけとちゃうんかと

281:デフォルトの名無しさん
08/01/19 15:44:55
>>280
確かにそのとおりなんですよね…
派生を多人数が使うときにちゃんと規定どおりに使ってくれない場合があるもんで
もう強制自動処理にならんかなーと思った次第です…

282:デフォルトの名無しさん
08/01/19 15:57:57
>>281
テンプレートメソッド的な工夫ではダメなの?
つまりテンプレートメソッドから呼び出されるメソッドの方をabstractなりvirtualに
すればよくない?

283:デフォルトの名無しさん
08/01/19 16:02:35
>>282
具体的に言うとちょっと極端な例ですが
データ入力して保存するという共通処理で


public void ClickSaveButton() {
 入力チェック()
 データ保存()
 ログ出力() 
}
abstract void 入力チェック()
abstract void データ保存()
abstract void ログ出力()

とやるとabstractなんでそれぞれの実装は一応してくれんるんだが
セーブボタンを押したときClickSaveButtonを呼び出して欲しいのに
データ保存()だけ入れるやつとかいるんですよ

284:283
08/01/19 16:12:27
最初の話とずれてますね…


public void ClickSaveButton() {
 入力チェック()
 データ保存()
 ログ出力() 
}
abstract void 入力チェック()
abstract void データ保存()
private void ログ出力() //共通処理

いい子
セーブボタン_Click {
 ClickSaveButton()
}

だめな子

セーブボタン_Click {
 データ保存()
}

セーブボタン_Click {
 入力チェック()
 データ保存()
}

285:デフォルトの名無しさん
08/01/19 16:15:48
もはや最初と別の話になってるような気がするんですが。。

286:デフォルトの名無しさん
08/01/19 16:20:51
>>284
まあどうしてもということなら、その例ならSaveButtonClickedイベントを持つ
インターフェイスをコンストラクタに取るようにする、みたいな姑息な
対策はできるんじゃない?


287:デフォルトの名無しさん
08/01/19 16:28:03
>>285
自分でもよんでもよくわからない例でした・・・
つまり共通処理とabstractな派生の処理を組み合わせたテンプレートメソッドを
作ったんだがテンプレートメソッドを使わないで処理するやつがいるのです。

だからabstractなメソッド一つで共通も派生処理も出来たらなーと思ったのです

て、あーもうだめです日本語でおkです…

288:デフォルトの名無しさん
08/01/19 17:19:10
セーブボタン_Click が ClickSaveButton() を呼び出すと決まっているなら
基底クラスでそう定義しておけばいいんじゃないのか?

289:283
08/01/19 17:25:35
>>286
なるほどイベントを使うというのもいいですね
>>288
派生では実装無しですか、それだとすっきりですね
この方式が一番スマートな気がします

290:デフォルトの名無しさん
08/01/19 18:48:35
派生クラスでオーバーライドさせるためのメソッドはprotectedにしとくもんだよ

291:デフォルトの名無しさん
08/01/19 18:54:35
284のセーブボタン_Clickは、みんな親クラスのメソッドなのでは?

292:デフォルトの名無しさん
08/01/19 19:02:51
class Base{
 void method(){・・・}
 ・・・
}
class Derived : Base{
 void method(){・・・}
 void method2(){・・・}
 ・・・
}

で、
Base obj = new Derived();
obj.method();
とできるのはなぜ?
これじゃobj.method2()とできないから
Derived obj = new Base();
obj.method();
と書くべきじゃないですか?

293:デフォルトの名無しさん
08/01/19 19:06:35
おまえは何を言ってるんだ

294:デフォルトの名無しさん
08/01/19 19:06:56
>>290
そうでしたか…勉強になります
>>291
そうななってしまいますね…そしてそれだも問題なしとなる…
ボタンクリック以外にも場合によってセーブ処理を走らせる必要がある場合の対応と読み替えてください…

295:デフォルトの名無しさん
08/01/19 19:09:27
>>293
DerivedよりBaseの方が持ってる情報が少ないのに
型になるのはおかしいということです
Base obj = new Derived();
と書いたら、Derivedのメンバでアクセスできないものがでてきてしまいませんか?

296:デフォルトの名無しさん
08/01/19 19:12:12
>>292
多態化から勉強し直せ。
Derivedじゃない他のBaseから派生したクラスを同じ流れで取り扱えるようにだよ。
ちなみにvirtualとoverrideしないと、前者のobj.method();が呼ばれるのはBaseのほうだぞ。

297:デフォルトの名無しさん
08/01/19 19:15:31
>>296
なるほど多胎っすか
だったらDerived obj = new Derived();
obj.method();
でいいんじゃないですか?
わざわざBaseを絡ませなくても・・・

298:デフォルトの名無しさん
08/01/19 19:17:14
>>297
2行目読めよ

299:デフォルトの名無しさん
08/01/19 19:21:16
>>298
Base obj1 = new Derived1();
Base obj2 = new Derived2();
Derived1.method();
Derived2.method();
とできるってことですか?

Derived1 obj1 = new Derived1();
Derived2 obj2 = new Derived2();
と同じ挙動だと思うんですが、意味あるんですか?
アクセスできるメンバが減ってるだけだと思うのですが・・・

300:デフォルトの名無しさん
08/01/19 19:27:24
本当に読んだか?

class Hoge : Base{
 override void method(){・・・}
 ・・・
}
というクラスを後から追加しても
Base obj = new Hoge();
obj.method();
でHogeクラスのmethodを呼べるだろ

というかその辺の入門書にもかいてあるだろ・・・

301:デフォルトの名無しさん
08/01/19 19:30:32
型っていうのは、最低限それらのメンバが使えることを保証するもの

302:デフォルトの名無しさん
08/01/19 19:49:25
呼び出す側をベタに書くから分かりづらい
public void Write(Stream stream) {
    stream.Write(this.data, 0, this.data.Length);
}
ほらstreamはFileStreamでもMemoryStreamでもGZipStreamでもなんでも持ってこい

303:デフォルトの名無しさん
08/01/19 19:53:59
例えば
public void show(object o) {
MessageBox.Show(o.ToString());
}
というメソッドを
show(5);
でも
show(DateTime.Now);
でも呼べるでしょ。そういうこと。

304:デフォルトの名無しさん
08/01/19 20:09:15
>>302
そういう間違いそうなのはふらっとに書くなよ

305:デフォルトの名無しさん
08/01/19 20:15:53
問題点を指摘してあげればプラスになるぜ

306:デフォルトの名無しさん
08/01/19 20:33:25
>>300-303
ああなるほど
Streamの例は分かりやすいですね
Streamを継承したクラスの分だけ全部オーバーロードしなくても
勝手にどれでも動くようにできるということですか・・・
ライブラリを使うときは便利そうですけど
自分で設計するのは難しそうですね

307:デフォルトの名無しさん
08/01/19 20:34:53
こういうこともできるんですか?
Base[] array = new array[3];
array[0] = new Base();
array[1] = new Derived1();
array[2] = new Derived2();
foreach(Base t in array){
 t.method();
}

308:デフォルトの名無しさん
08/01/19 20:37:35
言語の習得にはトライ&エラーも大事だぜ
試せることは試す

309:デフォルトの名無しさん
08/01/19 21:05:25
>>308
まったくそのとおり
書いてどうしても通し方がわからなければ聞くのがいいね

310:デフォルトの名無しさん
08/01/19 21:07:13
で、>>307に答えられる人いないの?


311:デフォルトの名無しさん
08/01/19 21:08:38
答えられる人がいないとでも思ってるのか?
安い挑発する前に手を動かせよ

312:デフォルトの名無しさん
08/01/19 21:09:50
>>311
死ね

313:デフォルトの名無しさん
08/01/19 21:11:20
はい

314:デフォルトの名無しさん
08/01/19 21:12:56
>>311
答えろ、糞

315:デフォルトの名無しさん
08/01/19 21:13:55
馬鹿にはできないんじゃね?

316:デフォルトの名無しさん
08/01/19 21:19:46
>>310は偽物です

>>308
一通り疑問に思ったことはやってみました
Base obj = new Derived();
(obj as Derived).method2();
みたいなことをすればDerivedが持つメソッドも呼び出せるんですね
(なんか危なそうですが)
この場合、objが本当にDerivedのインスタンスじゃないと
実行時エラーになりますね

317:デフォルトの名無しさん
08/01/19 21:38:11
基本クラスは派生クラスの実装を知らないから
派生クラスのメソッドは呼び出せないようになっている

318:デフォルトの名無しさん
08/01/19 21:39:21
イテレータ・・・と言いたいところだけど
C#のイテレータって違うんだよな

319:デフォルトの名無しさん
08/01/19 21:47:29
(obj as Derived).method2();
こういうのはダウンキャストという

320:デフォルトの名無しさん
08/01/19 21:58:10
objがDerived型だという確信があるんだったらasじゃなくてキャストしたほうがいい
asは確信がない時に使うもの

321:デフォルトの名無しさん
08/01/19 22:51:29
この変の話は実例みて解説してるの読んで勉強してから出直せ
確か@ITに猪俣の書いた記事であったから

322:デフォルトの名無しさん
08/01/19 23:56:54
派生のメソッド呼んでほしいような場合にオーバーライドを使う。
それが多態ということ。
呼ぶ側のコードでは実際の型を知らなくても、
オブジェクト自身が必要な動作をしてくれる。
だからストリームの実体がなんだろうが
使う側のコードは変わらない。


323:デフォルトの名無しさん
08/01/20 05:21:37
.netで勉強しようとしてるのですが、expressで致命的に不満が残る欠陥って何かありますか?
当方、VisualStudioを本格的に触るのはVB6.0以来です。
URLリンク(www.microsoft.com)
↑ ここの性能比較を見たのですが良くわかりません。
特に、プロフェッショナルと比べて大きな違いがあれば教えていただけないでしょうか。

モバイルやofficeプログラミングはいらないのですが、
「クラス デザイナ / オブジェクト テスト ベンチ」、その他が無くて困ることってありますか?
フォームの編集はできるんですよね?

よろしくお願いします。


324:デフォルトの名無しさん
08/01/20 05:28:12
>>323
スキル次第。
つーかVSスレで聞け

325:デフォルトの名無しさん
08/01/20 07:10:03
>>323
Expressだと全角英数は使えないよ

326:デフォルトの名無しさん
08/01/20 09:27:38
いきなり欠陥とか何言ってるんだこいつは。

327:デフォルトの名無しさん
08/01/20 09:29:41
323がVS2008Expressを使いこなし限界にぶち当たるはるか以前にVS2010が出てしまうことを予言しておこう

328:デフォルトの名無しさん
08/01/20 09:30:23
スタンダードからはデフォで使えるコントロールが増えているとか

気になったのはそれぐらいかな

329:デフォルトの名無しさん
08/01/20 11:53:12
>>7に関し
MSは複雑になり過ぎたWinAPIから.netのクラスに
移行するということを.netが出てきた当時聞いたこと
があります。

しかし、現状を見てみると、オーバーヘッドで起動は
遅いし、肝心のところはAPIがないと作成できない、
XPではフレームワークをインストールしないと
ダメだとか、良いところがないような気がします。


C#を含め.net環境は今後どうなるのでしょうか。
今、C#を使ってますが他の開発環境に移行した方が
良いのかなと悩んでいます。

あ、一番聞きたいことはWinAPIがなくなるかどうか
ということでした。


330:デフォルトの名無しさん
08/01/20 11:57:12
釣りなので放置してよし

331:デフォルトの名無しさん
08/01/20 12:30:21
>MSは複雑になり過ぎたWinAPIから.netのクラスに 
>移行するということを.netが出てきた当時聞いたこと 
>があります。 
これに関してはWin32APIではなく、
COMで拡張していた各種サービスへのAPIを.NETベースにしようということだった。
これがWin32のAPIと誤解され一人歩きしてた。
そして、おそらくJavaへの牽制のため、MSもエバンジェリストといわれる輩もわざと
誤解が一人歩きするのを放置してた。


332:デフォルトの名無しさん
08/01/20 12:36:11
>>331
回答ありがとうございます。
C#スレでこんなことを言うのも何ですが
今更ですが、C#のアドバンテージはどういった
点になりますでしょうか。

そういえば、ソフトウェア誌上でもC#の記事は
少なくなって来たような気がしますし。

333:デフォルトの名無しさん
08/01/20 12:42:44
ジェネリッククラスのstaticフィールドって便利だな
型チェックが減らせる

334:デフォルトの名無しさん
08/01/20 13:23:17
>>332
俺流のアホ回答
ソフト開発の面でいうと、

c++よりjavaのほうがアドバンテージがあった、
javaよりc#のほうがアドバンテージがあった。

335:デフォルトの名無しさん
08/01/20 14:48:49
>>332
おまえさんみたいなのにアドバンテージはない

フレームワーク(ランタイムみたいなもん)インストールさせるのが面倒
API叩かないとできないorめんどくさい処理があること

これだけで嫌がる奴なら選択の余地はない。やめとけ。

だいたい、仕事とかで「しかたなく」使ってみたけど
結構いいところがあるのに気づいて個人でも使ってるってやつか
近頃プログラムはじめてたまたま最初にC#を選んだやつだけだろ
あどばんてーじ があるのは

おとなしくC++でWin32APIにしとき

336:デフォルトの名無しさん
08/01/20 15:24:16
C++だとGUI周りが面倒くさいんだよなぁ。
MFCは設計が古いし、ATL/WTLは素のAPIよりマシだが面倒くさいのは変わらんし。

337:デフォルトの名無しさん
08/01/20 15:24:52
GUI作成はC#のほうが圧倒的にやりやすいし、標準ライブラリもC++よりはるかに充実している。
悪い点は >>329 の通りだが、それ以外はいいこと尽くしだろ。
Vistaが普及して.NET標準装備になってさえくれれば、C#は選択肢としてかなり良くなる気がする。
まあ、Vistaが普及するかが問題なのだが。


338:デフォルトの名無しさん
08/01/20 16:25:16
WinFXは何処に行ったんだか・・・

339:デフォルトの名無しさん
08/01/20 16:41:07
WinFXは.NET3.0のことだが?
WinFSのことなら確かにどこかに逝ってしまった。

340:デフォルトの名無しさん
08/01/20 16:47:42
>>339
その前の話なんだけど?

341:デフォルトの名無しさん
08/01/20 16:55:26
来週発売のDVDのリスト誰か貼ってくれ

342:デフォルトの名無しさん
08/01/20 17:17:01
VisualStudioでフォームがあるDLLを作って、それをC#コンソールアプリから呼び出して表示する場合
#DLL側
DLLのソリューションにWindows フォームを追加
参照設定にSystem.Windows.Formsを追加
[フォーム名].cs[デザイナ]に表示されるフォームウインドウダブルクリックで[フォーム名].cs作成→ビルド
#コンソールアプリ側
ビルドしたDLLとSystem.Windows.Formsを参照設定から追加、usingにDLLのnamespace追加
コードの中に↓二行を書き加える
[フォームのクラス名] form = new [フォームのクラス名]();
form.ShowDialog();

こんな感じであってますか?

343:デフォルトの名無しさん
08/01/20 17:18:27
フォームの継承がうまくいかない

URLリンク(www.atmarkit.co.jp)
↑みたいな問題って皆さん起きてないの?

344:デフォルトの名無しさん
08/01/20 17:38:08
バージョン情報の取得方法で質問があります。

・ Assembly.GetExecutingAssembly().GetName().Version.ToString();
こちらで取ってくると、 1.1.0.0 1.1.0.0

・ Application.ProductVersion;
こちらで取ってくると、 1.1 1.1

どちらも『アセンブリバージョン』と『ファイルバージョン』がくっついて並んでしまいます・・・
片方だけ取得する方法はありませんか?

@ITには片方コメントアウトするといいと書いてありましたが、
[assembly: AssemblyVersion("1.1")]
//[assembly: AssemblyFileVersion("1.1")]
出力では 1.1.0.0 1.1.0.0と出てきてしまいます。


345:デフォルトの名無しさん
08/01/20 17:48:47
>>343
それVS2005でも起きてる?
2002/2003の頃はいろいろあったけど。

346:デフォルトの名無しさん
08/01/20 17:52:33
まずなにしたらいいですか

347:デフォルトの名無しさん
08/01/20 18:03:19
>>344
AssemblyVersionしか出ないはずだけど。
.NETのバージョンは?

348:344
08/01/20 18:45:58
>>345
>>347
開発環境はVS2008 EE(.NET3.5)です。

ためしにVS2005で試してみたところ、
前者・後者の呼び出し方法共にアセンブリバージョンのみ出てきました。

.NET3.5で呼び出し内容が変わったみたいですね・・・。


349:デフォルトの名無しさん
08/01/20 19:07:25
>>348
.NET 3.5のみ問題なんならソースよんでみたら?

350:デフォルトの名無しさん
08/01/20 19:07:30
>>348
そこは2.0のまんまで変更はない。

351:デフォルトの名無しさん
08/01/20 19:08:41
すまん。Express Editionはソース読めんのだっけか。

352:344
08/01/20 19:11:33
試しにVS2008 EE(.NET3.5)ではなく、
VS2008 EE(.NET2.0)で試したところ。
変化がありませんでした。

つまりVisualStudio2008側が問題なのでしょうかね。
いい対策案が思いつきません。


353:デフォルトの名無しさん
08/01/20 19:44:20
単純なプログラムミスとかないか?
Console.WriteLine("{0} {0}", Application.ProductVersion); とかやってたりして。

AssemblyFileVersionは 1.0.0.0 の形式になってなくてもエラーにはならない。
[assembly: AssemblyFileVersion("ほげら")] もOK
[assembly: AssemblyFileVersion("1.1  1,1")] とうぜんこれもいける。


354:デフォルトの名無しさん
08/01/20 19:52:50
>>337
ありがとうございます。
VistaはPCの買い替えに比例して徐々に普及して
行くことは間違いないので、もうしばらくC#で
行こうかなと思います。

で、APIは無くなると信じていたので、APIをわざと
避けて来たことから、改めて勉強しようかなと
思い始めました。


355:デフォルトの名無しさん
08/01/20 20:15:02
駄目な奴は何をやっても駄目

356:344
08/01/20 20:16:57
>>353
解決しました。
353氏がおっしゃるとおり、{0}{0}が原因でしたw

お騒がせしてすいませんでした。


357:デフォルトの名無しさん
08/01/20 20:24:59
すみません。
関数とクラスの違いがよくわかりません。

わかりやすい解説ページがあれば教えてください。
お願いします。

358:デフォルトの名無しさん
08/01/20 20:29:56
ピンポイントでそんなアホな疑問に答えてくれるところはなさそう
まじめに初めから勉強してください

359:342
08/01/20 20:34:19
間違ってますか…?

360:デフォルトの名無しさん
08/01/20 20:51:03
動かしてみたらわかるだろ。

361:デフォルトの名無しさん
08/01/20 20:52:26
>>357
クラスは振る舞いの定義。生成を必要とする。
継承可能。コンストラクタで初期化。
中に関数や変数が含まれる。変数はget set
でアクセス。

362:デフォルトの名無しさん
08/01/20 20:55:03
最近C言語から移ってきたんだけど
メンバ変数って要はグローバル変数みたいなもんかな?

363:デフォルトの名無しさん
08/01/20 20:56:50
いいえ違います。

364:デフォルトの名無しさん
08/01/20 20:57:08
>>362
グローバルスコープというよりはファイルスコープ

365:デフォルトの名無しさん
08/01/20 20:57:23
>>357
まず古典的なcの構造体を理解する。
構造体の意義がわかればクラスの意義や意味はすぐわかると思う。(たぶん)
こういうこというとムキになって反対する人間がいるけど、
やっぱりクラスは構造体の拡張として理解するのが一番理解しやすいと思う。

>>361
そんな抽象的な説明でこういう質問する人間にわかるわけないだろw


366:デフォルトの名無しさん
08/01/20 21:00:29
>>364
なるほど
なんかどの関数からもアクセスできたら
Cのグローバル変数みたいに管理しにくくなったりしないのかな?

367:342
08/01/20 21:02:01
>>360
表示できることはできたのですが、試行錯誤でたどり着いたので正攻法かどうか自信がないんです

368:デフォルトの名無しさん
08/01/20 21:06:28
>>366
なんか根本からスタイルが違うな。
クラスとして実現したい機能があって
そのためにフィールドやメソッドがある感じ。
クラスは静的な関数の寄せ集めではない

369:デフォルトの名無しさん
08/01/20 21:06:34
>>366
だからグローバルちゃうよ、って364はいってるんだと思いますが。。
ひょっとして(案外よくいるんだが)Cとかのファイルスコープの概念を知らないの?

370:デフォルトの名無しさん
08/01/20 21:09:20
メンバ変数にもアクセス修飾子とかあるから一概には言えないんじゃない。

371:デフォルトの名無しさん
08/01/20 21:18:41
>>366
メンバ変数のスコープは各オブジェクト内で完結
ただしstaticなメンバの場合はどこからでもアクセスできる

372:デフォルトの名無しさん
08/01/20 21:22:57
うん?

373:デフォルトの名無しさん
08/01/20 21:28:30
>>368-371
クラス=ファイル
メンバ=staticグローバル変数
みたいなもんなのかな?

>>369
知ってますよ
でも、案外ファイルの中でも色んな関数から参照されてると
訳分かんなくなりませんか?

374:デフォルトの名無しさん
08/01/20 21:28:49
オブジェクト指向の基本は自分で身につけないと
こんなとこでのやりとりでは理解できるはずがない。

375:デフォルトの名無しさん
08/01/20 21:29:54
あとよくわかんないのはメンバ関数って
インスタンスの分だけ関数が複製されるんですか?
その意味がよくわかんなくて

376:デフォルトの名無しさん
08/01/20 21:30:08
>>373
>クラス=ファイル
>メンバ=staticグローバル変数
>みたいなもんなのかな?

悪いけど全然違う
だから真面目に基本から勉強しろと。
C++も使ったことないの?

377:デフォルトの名無しさん
08/01/20 21:56:18
>>375
されない

378:デフォルトの名無しさん
08/01/20 21:56:26
オブジェクト指向について解説してるウェブページでも適当に探して読んでみるべき。

379:デフォルトの名無しさん
08/01/21 00:10:53
>>375
staticをつけないとインスタンスごとに複製される


380:デフォルトの名無しさん
08/01/21 00:36:05
嘘を教えるな

381:デフォルトの名無しさん
08/01/21 01:23:20
ワロタ

382:デフォルトの名無しさん
08/01/21 08:57:03
LinkLabelについて質問です。
配列でLinkLabelを可変で作成しているのですが、クリックしたときの処理で不明な点があります。
linklabel[i]で複数作成して、クリック時のイベントは一括で一つで処理したいのですが、押されたlinklabal対応させる方法がわかりません。
x = 選択したlinklabelのテキスト みたいな感じにしたいのですが、よい方法はないでしょうか?
buttonだとselectとか使うみたいなんですがlinklabelの場合がわかりませんでした。
あらかじめlinklabel1みたいに作っている方法なら載っているサイトが見つかったのですがこの方法のやつが見つかりません。

383:デフォルトの名無しさん
08/01/21 09:13:50
sender

384:デフォルトの名無しさん
08/01/21 09:23:53
>>382
デザイナで一個置いてイベント設定してdesigner.cs見てみるといいんじゃないか?

385:382
08/01/21 10:37:11
>>383-384さんありがとうございました
x = ((System.Windows.Forms.LinkLabel) sender).Text;としたところ上手くいきました

参考サイト
URLリンク(dobon.net)

386:デフォルトの名無しさん
08/01/21 13:47:00
NotifyIcon.Textにセットするために、文字列が64文字を超える場合は64文字までに切りたいのですが
string.Remove(64)
string.Substring(0,64)
のどちらも64文字未満だと例外が起きるようです。
いちいち文字数のチェックをしないでも、一発で切ってくれるメソッドはないのでしょうか?

387:デフォルトの名無しさん
08/01/21 13:53:06
「いちいち文字数のチェックをしないでも、一発で切ってくれるメソッド」
が存在したとしても、それは内部で長さをチェックしている。

ゆえに自分で作ればよい

388:386
08/01/21 14:02:26
>>387
ということはやっぱりないんですね。
例外が起きると言うことは内部でもチェックしているはずなので
二重チェックになるのが嫌だっただけです。
拡張メソッドを作ることにしました。ありがとうございました。

389:デフォルトの名無しさん
08/01/21 14:07:55
そんなことに拡張メソッド使うな

390:デフォルトの名無しさん
08/01/21 18:26:42
Language Integrated Queryを「統合言語クエリ」と訳すのって変じゃね?
「言語統合クエリ」ならわかるけど

391:デフォルトの名無しさん
08/01/21 18:33:02
LINQってリンキューって読んでるけどあってる?

392:デフォルトの名無しさん
08/01/21 18:34:32
オレはリンク

393:デフォルトの名無しさん
08/01/21 18:46:31
try中に意図的にcatchに移動してほしくて
無理やり0除算発生するようにしてるんだが
もっとスマートな方法はないですか?

394:デフォルトの名無しさん
08/01/21 18:47:40
それ最悪の書き方

395:デフォルトの名無しさん
08/01/21 18:47:56
何か throw しろ。

396:デフォルトの名無しさん
08/01/21 18:49:46
if (flag) throw new GotoCatchException<int>();
else throw new GotoCatchException<String>();

397:デフォルトの名無しさん
08/01/21 18:52:22
そもそも意図的にcatchに移したい処理なんて
設計に問題があるだろ

398:デフォルトの名無しさん
08/01/21 19:02:25
たぶん発想が逆立ちしてるんだろうね。
本来例外処理の外に置くべき処理をcatchの中に書いちゃってる、
なんてオチだと推測する。

399:デフォルトの名無しさん
08/01/21 20:55:41
変数が使われてなかったりするとエラー一覧ウィンドウで「警告」で表示されますが
「メッセージ」も文法的な間違いを発見すると表示されるのですか?

400:デフォルトの名無しさん
08/01/21 21:13:57
メッセージって""内のメッセージか?
警告と並列で括弧でくくってある意味がわからん

401:デフォルトの名無しさん
08/01/21 21:53:03
エラー一覧のウインドウに並んでる
[エラー] [警告] [メッセージ]
のことだろう。
俺もまだ見たことないな。

402:デフォルトの名無しさん
08/01/21 22:52:07
例外の使い方だけど

try
処理1
処理2
catch(ex1)
エラー1
catch(ex2)
エラー2
catch()
想定外エラー

で処理1と2は戻り値無しでNG時にex1とex2をthrowする
って使い方は邪道?
例外は関数エラーに使うべきじゃなかたりする?

403:デフォルトの名無しさん
08/01/21 22:57:22
そうやって使わないで何に使う

404:デフォルトの名無しさん
08/01/21 22:58:44
むしろそれ以外の使い方があったら教えてほしい。

405:デフォルトの名無しさん
08/01/21 23:22:08
それ以外の使い方したら読みにくいだけだろw

406:デフォルトの名無しさん
08/01/21 23:30:16
想定外の例外を握りつぶすのがいいかどうかは賛否の分かれるところじゃなかろうか

407:デフォルトの名無しさん
08/01/22 02:27:48
C#ってスクリプト言語くらい気楽に使えるようにならないの。
いちいちコンパイルとかウザいし。

408:デフォルトの名無しさん
08/01/22 02:35:52
>>397
そうでもないキガす。
とりあえず例外処理に関してテスト条件なんて作らずに
投げたらどうなるんだか見てみたいなんて話はあるかも
しれない。 これはテストをはしょるズボラな俺だけか。

409:デフォルトの名無しさん
08/01/22 06:50:59
JavaScript書き出された文字列を取得
する方法はありませんか。

ブラウザコンポーネントで例えば
document.write("abc")と書かれていれば
このabcを取得したいとのですが。

410:デフォルトの名無しさん
08/01/22 08:47:29
>>400,401
[エラー] [警告] [メッセージ]の[メッセージ]の項目です。
ASPでweb.config内でカスタムセクションを追加した時に、
「属性○○のスキーマ情報が見つかりませんでした」と[メッセージ]でエラー一覧に表示されました。
でも問題なく動作してるのでそのまま続けてみます。
ありがとうございました。

411:デフォルトの名無しさん
08/01/22 08:48:26
>>409
document.body.innerText
つーかおもっくそスレ違い

412:デフォルトの名無しさん
08/01/22 09:52:11
>>407
ソースコードから実行てのはふつーにできるから調べてみれば?
使い物になるかは別だが。


413:デフォルトの名無しさん
08/01/22 18:24:43
CSVの質問です。

//string FileName = "二バイト文字テスト";
Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(str.ToString() + ".csv"));

上記のようにファイル名が2バイトになっても正常に「開く」「ダウンロード」「キャンセル」
のダイアログが出るようにしています。

ダウンロードした場合は日本語が含まれたファイル名でダウンロードできます。
「開く」をクリックした場合、エンコードされたファイル名で開こうとしてしまいます。

解決方法はありますか?
よろしくお願いします。

414:デフォルトの名無しさん
08/01/22 18:26:53
あげてしまった・・・

補足で、開くを選択した場合エラーになります
エンコードされたファイル名を開こうとするためです。

415:デフォルトの名無しさん
08/01/22 20:04:33
誰かが作ったクラスライブラリを利用する時は、exeと一緒にそのdllも付けなきゃならないの?
C/C++のスタティックリンクライブラリみたいにexeファイルに組み込むことできないのかな?

416:デフォルトの名無しさん
08/01/22 20:06:44
ilmerge

署名されてたら無理だけど

417:デフォルトの名無しさん
08/01/22 20:43:44
>>416
thx

418:デフォルトの名無しさん
08/01/22 22:48:44
文字列を表示するときに文字の間隔を標準
(Graphics.DrawString で表示されるときの文字間隔)
より1ドットずつ狭めて表示したいと思います。

思いついたのは ExtTextOut を使用する方法ですが、
それ以外の方法(できれば p/invoke を使わなくていいような)
があったら教えてください。


419:デフォルトの名無しさん
08/01/22 22:55:21
Frameworkで定義されているコンストラクタを持たないクラスを使用したい場合、
どのようにすれば使えるのでしょうか?

仮に、public sealed class ModelBoneというコンストラクタが無くプロパティのみを持つ
クラスのインスタンスをローカルで一時使用したいとします。

ModelBone bone = new ModelBone(); としても
'Microsoft.Xna.Framework.Graphics.ModelBone' のコンストラクタが定義されていません'
のエラーが表示されてインスタンスを作成できません。


420:デフォルトの名無しさん
08/01/22 22:57:21
無理
他にインスタンスを取得する方法が用意されてるはずだからそれに従う

421:420
08/01/22 23:02:25
ちょっと見てみたけど、ModelBoneに関してはContentManager.Loadで
モデルと一緒に読み込むしかないんじゃないかな

422:デフォルトの名無しさん
08/01/22 23:03:23
>>418
一文字ずつMeasureCharacterRangesで測ってRectangleF作って
DrawStringすりゃいいんじゃね


423:デフォルトの名無しさん
08/01/22 23:22:23
>407
Windows PowerShell使えよ。

424:419
08/01/23 00:37:32
>>420
やはりインスタンスは作成できないのですか・・・。
このクラスが持つプロパティを自前クラスの関数の引数で使用したくなり、
Frameworkのクラスからインスタンスを作成できない場合
全く同じプロパティとコンストラクタを持つクラスを改めて
定義しなければならないからどうしたものかと悩んでいました。

とりあえず出来ないことが分ったので、他の方法を検討してみます。
ありがとうございました。

425:デフォルトの名無しさん
08/01/23 01:15:38
>>423
ぜんぜん手軽じゃないじゃん。

426:デフォルトの名無しさん
08/01/23 06:25:57
>>420
拡張メソッド使っても無理?

427:デフォルトの名無しさん
08/01/23 07:40:21
そもそも、勝手にインスタンスを作られると不都合だから、わざわざコンストラクタを定義してないわけだ。

428:デフォルトの名無しさん
08/01/23 09:20:32
>>426
拡張メソッドにどんな幻想を持ってるんだ

429:デフォルトの名無しさん
08/01/23 10:19:50
>>428
なんでもできるはず


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch