5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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

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


2 :デフォルトの名無しさん:2006/10/30(月) 16:32:40
前スレ
ふらっとC♯, C#(初心者用) Part9
http://pc8.2ch.net/test/read.cgi/tech/1157855247/

関連スレ
C♯, C#相談室 Part34
http://pc8.2ch.net/test/read.cgi/tech/1157549657/

3 :デフォルトの名無しさん:2006/10/30(月) 16:33:12
Visual C# Express Edition (無料)ダウンロード
http://www.microsoft.com/japan/msdn/vstudio/express/vcsharp/

.NET Framework SDK (2.0)
http://msdn2.microsoft.com/ja-jp/library/ms310244.aspx

MSDN Visual C# Express Edition フォーラム
http://forums.microsoft.com/msdn-ja/ShowForum.aspx?ForumID=187&SiteID=7
Visual Studio ユーザーグループ
http://vsug.jp/

@IT Insider.NET
http://www.atmarkit.co.jp/fdotnet/index.html
Insider.NET 会議室 ディレクトリ
http://www.atmarkit.co.jp/fdotnet/index/bbs/index.html

宇宙仮面の C# プログラミング / C# Programming
http://ukamen.hp.infoseek.co.jp/
WisdomSoft C#入門
http://wisdom.sakura.ne.jp/programming/cs/index.html
WisdomSoft Microsoft .NET入門
http://black.sakura.ne.jp/~third/system/msnet/msnet.html
どっとねっとふぁん
http://dotnetfan.org/
緑のバイク 初めてのC# 〜 覚え書き 〜
http://homepage3.nifty.com/midori_no_bike/CS/
どぼん!の .NET Tips
http://dobon.net/vb/dotnet/
.NET のつぼ
http://park16.wakwak.com/~mimi/dotnet/top.html

4 :デフォルトの名無しさん:2006/10/30(月) 16:33:50
Borland C#Builder2006
http://www.borland.com/jp/products/csharpbuilder/index.html

Turbo C#
http://www.turboexplorer.com/csharp

.NET Framework 1.1 製品ドキュメント
http://www.microsoft.com/japan/msdn/library/ja/netstart/html/sdkstart.asp

5 :デフォルトの名無しさん:2006/10/30(月) 16:44:51
>>1


6 :デフォルトの名無しさん:2006/10/30(月) 22:04:00
>>1
おつ
で、早速質問なんですけど、
ループ文の中で変数を宣言するとループするたびに変数を宣言することになりますが、
これってC#的にはアリなんでしょうか?
それともあまりよろしくないのでしょうか?


7 :デフォルトの名無しさん:2006/10/30(月) 22:05:17
>>6
プログラミング的に無し

8 :デフォルトの名無しさん:2006/10/30(月) 22:17:36
別にいいんじゃないの
それぐらい最適化してくれるだろ

9 :デフォルトの名無しさん:2006/10/30(月) 22:29:50
その変数が必要なスコープで宣言

10 :デフォルトの名無しさん:2006/10/30(月) 22:30:35
むしろ外で宣言するほうが問題があるっつーの

11 :デフォルトの名無しさん:2006/10/30(月) 22:43:40
VC#2005のWebBrowserについて質問なのですが
IEのようにマウスのXButton1・XButton2を戻る・進むに対応させる方法ってないですか?
public webBrowser()
{
this.webBrowser1.Document.Click += new HtmlElementEventHandler(Document_Click);
}

private void Document_Click(object sender, HtmlElementEventArgs e)
{
if (e.MouseButtonsPressed == MouseButtons.XButton1)
webBrowser1.GoForward();
else if (e.MouseButtonsPressed == MouseButtons.XButton2)
webBrowser1.GoBack();
}
このようにしてみたのですが、どうもうまくいきません。
中ボタンで試すとうまくいくのですが、第4・5ボタンだと無反応になります。
他にもControl.MouseButtonsで試してみたのですが同じ状況です。
何か方法あれば教えてください。



12 :デフォルトの名無しさん:2006/10/30(月) 22:48:47
>>11
http://homepage1.nifty.com/yasunari/VB/VB2005/WebBrowserMouseDownEvent.htm

13 :デフォルトの名無しさん:2006/10/30(月) 23:10:28
FormStartPosition.CenterParent って ShowDialog(IWin32Window) だと
意図どおりに中央に表示されるんだけど
Show(IWin32Window) では中央に表示されない
モーダレスで中央に表示させるには自分でコード書かないといけないの?

14 :11:2006/10/31(火) 00:06:57
>>12
リンク先のコードをC#で書き直したところうまくいきました。
VBは全くわからないのでちょっと怪しいコードになってるかもしれませんが
様子を見ながら必要があれば修正していきます。
ありがとうございました。


15 :デフォルトの名無しさん:2006/10/31(火) 05:47:07
>>13
そのようです。
http://dobon.net/vb/dotnet/form/startposition.html

16 :デフォルトの名無しさん:2006/10/31(火) 08:01:30
C#ではエントリポイントはMain一つということですが、
DLL関数のようにいくつも作ることは、DLLプロジェクトにしても無理ですか?


17 :デフォルトの名無しさん:2006/10/31(火) 08:10:26
意味が分からんが、一つのアセンブリに Main メソッドを複数定義する事はできる。
その際は /main かプロジェクトのプロパティでエントリポイントを指定する。

18 :デフォルトの名無しさん:2006/10/31(火) 08:16:13
ありがとうございます。
機能別に実行ファイルを分けると、そのたびにアプリケーションの初期化をするのは負担がかかると思い、
dllの一部の機能をコマンドラインから呼べるようなものにすればスムーズかなと。
スクリプトから繰り返し呼び続けるのが目的なので。


19 :デフォルトの名無しさん:2006/10/31(火) 08:21:21
コマンドライン引数使えばいいだけじゃ・・・

20 :デフォルトの名無しさん:2006/10/31(火) 11:19:42
Main(string[] args){switch(args[0]){...

21 :デフォルトの名無しさん:2006/10/31(火) 12:02:49
それ引数無しで起動したら例外起きるぞ

22 :デフォルトの名無しさん:2006/10/31(火) 13:12:00
mainにする必要がない。
で終わり?

23 :デフォルトの名無しさん:2006/10/31(火) 20:17:01
ドロー系ソフトのようなレイヤーの概念は無いのでしょうか?

質問1:
事前チェックに以下を行ったところ期待と異なる動作をしました。
フォームを白色でBackColorを指定し、
その上にパネルを置きパネルを透明色で矩形塗りをしたところ、
矩形部分が完全に透けてデスクトップが見えてしまいます。
パネル下のフォームの白が見えると思ったのですが違ってました。
これは、仕様なんでしょうか?それとも自分の作ったソフトのバグ???

質問2:
やりたかったのは、ドロー系ソフトのようにグリッドを下のレイヤーにおいて、
上の別レイヤでワーク作業を行っても、グリッドの書き換えを行わなくても
済むようにしたかったのです。グリッドは書き換えるしか無いのでしょうか?

24 :デフォルトの名無しさん:2006/10/31(火) 20:23:30
Graphicsオブジェクトを使って自分でバリバリ描画するのが普通
もちろんグリッドは消えるたびに書き直す

25 :デフォルトの名無しさん:2006/10/31(火) 20:33:36
今度、c#を勉強する事になったのですが、
おすすめの入門書ってありますか?

ASP.NETと.NET FRAMEWORKも一緒に勉強すると良いと言われたのですが、
プログラミングに触れるのは初めてなんで、先に文法を抑えたいです。
テンプレにも解説サイトがいくつかありますが、
本から入ったほうが分かりやすいですかね?


26 :23:2006/10/31(火) 20:37:31
>>24
Thx.

動作見てると、それしかなさそうだね。
後は、下絵のコピーを別に取っておいて、
コピーしなおすかぐらいかな。

27 :デフォルトの名無しさん:2006/10/31(火) 20:42:11
Imageにグリッドや表示したいものをあらかじめ描いとけば
再描画時にはそれをそっくりそのままDrawImageするだけ

28 :デフォルトの名無しさん:2006/10/31(火) 21:06:55
Visual C#でOLEオートメーションサーバーを作る方法はありますでしょうか。
WSHからCreateObjectで呼びたいのです。

29 :23:2006/10/31(火) 21:13:13
>>27
Thx.
レスポンスチェックが必要そうだけど、一般には手軽で速そうだね。


>>25
連載  C#入門 (同内容の書籍有り)
http://www.atmarkit.co.jp/fdotnet/csharp_abc/index/index.html
その他ADOとASP
http://www.atmarkit.co.jp/fdotnet/basics/adonet_index/
http://www.atmarkit.co.jp/fdotnet/aspnet/index/index.html

ASPの書籍なら、↓かな。おれは2巻だけしか読んでないけど、
非常にわかりやすかった。
業務なら、2巻以降全部よんでもいいんじゃないかと。
.NETエンタープライズWebアプリケーション開発技術大全
http://www.amazon.co.jp/NET0a80f30bf0fc0d70e90a40baWeb0a20d70ea0b10fc0b70e70f3%C2%958bv7ab80%C2%8853Y27Q68008Vol-2009ASP-NETWfay0e-e8/dp/4891004282/sr=1-4/qid=1162296249/ref=sr_1_4/250-0519789-6848202?ie=UTF8&s=books

フォームプログラミングなら、↓かな。(2.0未対応)
C#によるプログラミングWindows 上下
http://www.amazon.co.jp/C-06b08808b0d70ed0b00e90df0f30b0Windows-N0a-Charles-Petzold/dp/4891002921/sr=1-2/qid=1162296357/ref=sr_1_2/250-0519789-6848202?ie=UTF8&s=books

書籍は一般的にお勧めできるタイプ。
ただ、文法書をのぞけばプログラミング初心者にはどれも荷がおもいかも。

30 :デフォルトの名無しさん:2006/10/31(火) 22:09:00
>29
ありがとうございます
連載  C#入門 (同内容の書籍有り)
http://www.atmarkit.co.jp/fdotnet/csharp_abc/index/index.html
は自分も読んでました。

文法書は↓の購入を考えてます。
http://www.amazon.co.jp/067Ycb08108b0d70ed0b00e90df0f30b0-0eQ65-e8-%E3%82%AF%E3%83%A9%E3%82%A6%E3%82%B9-%E3%83%9F%E3%83%81%E3%82%A7%E3%83%AB%E3%82%BB%E3%83%B3/dp/4756141781/ref=pd_bxgy_b_text_b/503-5661729-4527923
4年前の本ですが、最近の本と比べると内容的に遅れますかね??

31 :デフォルトの名無しさん:2006/10/31(火) 22:15:20
>>28
それで何をしたいのかにもよるが、
取りあえず MSDN/ヘルプで COM との相互運用だかそんな感じの記事を嫁。

32 :デフォルトの名無しさん:2006/10/31(火) 22:34:33
>>30
>文法書は↓の購入を考えてます。
んー、読んだことが無いので正確にはなんとも言えないけど。
連載  C#入門 (同内容の書籍有り)をきちんと理解しているのなら、
次に進んだ方がいいと思うけど(Windowsプログラミングとか)。
読まなければいけない本はいくらでもあると思うので、文法にしがみついるのも
なんだと思うけど。
有る程度、文法が判ったなら、別の分野に進んで、どうしても判らなかったら、
またそれに適した本を探した方がいいとおもう(オブジェクト指向とかは文法書では判らないし)。

2.0の拡張部分は↓らしいので、記事から実践ってのも有りだと思うけど。
大きな変更はジェネリックぐらい?
http://www.atmarkit.co.jp/fdotnet/special/cs20review01/cs20review01_01.html
http://www.atmarkit.co.jp/fdotnet/special/cs20review02/cs20review02_01.html
http://www.atmarkit.co.jp/fdotnet/special/vs2005_02/vs2005_02_01.html

33 :デフォルトの名無しさん:2006/10/31(火) 22:40:18
オブジェクト指向はJavaの入門書の方がいいかも

34 :25:2006/10/31(火) 23:38:27
>32
いえ、文法に関してもまだ始めたばかりなんです。

microsoft visual studio.net 2003はインスコしてありますが、
アプリ開発なんてできるわけもなく宝の持ち腐れ状態です。

とにかく文法の基礎というか基本を学びたいんですが、
連載  C#入門
http://www.atmarkit.co.jp/fdotnet/csharp_abc/index/index.html
等のサイトを徹底すれば、基本的な文法書と同じような知識は習得できますか?
なんとなく書籍の方が、細かな説明が書いてありそうで内容のクオリティが高いって先入観があるんですけど。

35 :デフォルトの名無しさん:2006/10/31(火) 23:45:41
ExpressEditonなんていいものがない時代、
コマンドラインでコンパイルして遊んでたけど、
そのくらい好きでやってるうちに文法なんて習得できないか?


36 :デフォルトの名無しさん:2006/11/01(水) 00:00:28
非同期通信の練習がてら、チャットアプリケーションのようなものを作ろうと思い、
Form1とは別に、別の外部クラスを作って、その中に通信やらバックエンドの処理をメソッド化して、GUIからそいつらを呼んで動かそうと思うんですが、
その場合、通信結果の取得等は外部クラス側が行ない、そこから直接Form1のrichTextBox等のプロパティを書き加えるようなコードになってしまうので、
部品化という意味では不自然なのではないかと…。

で、delegateやeventあたりがキーワードになってくるような気がしてるものの、
この場合、独自のeventを作って使うのかdelegateを使うのかで迷ってます。

37 :デフォルトの名無しさん:2006/11/01(水) 00:15:43
>独自のeventを作って使うのかdelegateを使うのかで

どっちもやることは変わらないような。。。
イベントつくっちゃってeventargでデータわたしたら?

38 :デフォルトの名無しさん:2006/11/01(水) 00:49:00
>>34
文法書にとらわれると、先に進めないよ。
あの内容は、上級者に取っては物足りないかもしれないが、
初心者なら十分すぎる内容というか、通常の業務なら問題ないレベル。
あの内容で物足りなく感じるのは、有る程度コーディングになれたあとじゃなかな?
まずは、あれをマスターして(実際に動かしみる)、次に行くことを勧める。
多分、他の文法書に戻ることは無いと思う。

プログラミングは、本では学べないので、実際に動かすことが大事。
だから、文法書ではなくて色々サンプルを動かすとか、
自分でコーディングするのが一番(そういう意味ではスポーツと似てるかも)。
とにかくさわってなれるのがまずは大事。

有る程度、コーディング出来るようになったら、Windowsプログラミングに移る。
色々どんなことが出来るか知るために、Tips集で動かしてみるのもいいと思うよ。
多分、↓は買って損はしない。

Visual C#.NET逆引き大全 500の極意
http://www.amazon.co.jp/gp/product/4798008133

そこで、疑問点が出たら、下を読み返す(あるいは並行して読む)。多分これが近道。

C#によるプログラミングWindows 上下

ASPはその後かな。

39 :デフォルトの名無しさん:2006/11/01(水) 01:03:06
確かに、イベントとデリゲートの使い分けって
いまいちはっきりしないなぁ。

他の人はどのようなときには、イベントを使って、
どのような時にはデリゲートを使ってるの?

40 :デフォルトの名無しさん:2006/11/01(水) 01:49:36
通知する時はイベント、処理を委譲する場合はデリゲート
デリゲートメンバを公開する事は普通無いな

41 :デフォルトの名無しさん:2006/11/01(水) 02:45:20
>>37,40
なるほどです。では、今回はとりあえずeventを使ってやってみる事にします。
有り難う御座いました。

42 :デフォルトの名無しさん:2006/11/01(水) 08:07:55
この流れなら言える!
.NETを使ったちょっと大きめなWinアプリの設計について最近疑問が生じてまして、
小さいプログラムなら、コントロール貼り付けてちょこちょこっと書いておkですよね。
そういうプログラム多いと思います。
でももう少し複雑化してくると、コントロールごとに同じような処理が分散して見にくいコードになるんじゃないかなーと。
MFCのころのドキュメント・ビューみたいな大きな括りの設計思想って.NETには無いんですかね?
それともこれからはコントロールごとに括るのがヨイ?

43 :デフォルトの名無しさん:2006/11/01(水) 10:29:08
>MFCのころのドキュメント・ビューみたいな
>大きな括りの設計思想って.NETには無いんですかね


MFCはゴミですが、なにか?

44 :デフォルトの名無しさん:2006/11/01(水) 16:45:21
そうだね。で?

45 :デフォルトの名無しさん:2006/11/01(水) 19:50:32
>>42
イベントハンドラに直接本質的な処理を書かなければいいだけ

46 :デフォルトの名無しさん:2006/11/01(水) 21:06:20
monoってどうなの?

47 :どん:2006/11/01(水) 21:10:11
質問です。

IEが立ち上がっているとしてその(現在)アクティブなIE上の
データを全てコピー(Ctrl + A)しテキストファイルに出力するという
アプリを考えています。

ここでどうしても分からない点がありまして、それはその現在アクティブな
IE上に対してキーボードから(Ctrl + A)を押下したのと同等の
処理を行い、メモリ内に全てコピーする方法です。
(テキストファイルに出力する部分は分かります。)

ご存知の方がいらっしゃいましたらお教え願います。


48 :デフォルトの名無しさん:2006/11/01(水) 21:54:41
一番簡単なのは SendKeys だな。

49 :デフォルトの名無しさん:2006/11/01(水) 23:31:40
>>49
書かれている事以外に何をするのかによるけど、
それだけならUWSCとかのマクロで十分な気もする。

50 :どん:2006/11/01(水) 23:39:33
>>48
SendKeysですか。確認してみます。


>>49
極力マクロは使わずにC#で実装したいと考えています。

とりあえず、SendKeysを使用してみたいと思います。

51 :デフォルトの名無しさん:2006/11/01(水) 23:43:58
>>42
俺もそう思う。
ポトペタ環境って初心者がとっつきやすいだけ。


52 :デフォルトの名無しさん:2006/11/01(水) 23:46:50
>>51
本当にC#使ってるのかと疑問に思う内容だぞ?>>42
>>45が正しい

53 :デフォルトの名無しさん:2006/11/02(木) 00:08:40
Dataadapterでデータテーブルを更新するプログラムを作成しています。

1件データをとってきて、画面で加工し(この時点でrowstateがmoifyになる)
それをdataadapterのupdateメソッドで更新しています。排他処理は楽観的ロックです。

この方法でUPDATEすると、データ取得時の状態とDBの状態がかわると
エラーがおきてしまいます。

adapterのsqlコマンドにはその時点のデータを再度取得するように
取得時と同じsqlを設定しているのですが
いわゆる後勝処理にできません。

A端末で データをリード
B端末で データをリード
B端末で データを更新
A端末で データを更新   ←ここでエラーがおこる

これを、最終的にはAの更新結果がDBに反映されるようにしたいのですが、
dataadapterを使ってこのようなことはできますか?

54 :444:2006/11/02(木) 00:19:01


>>53
ザコみたいな質問するな。



55 :デフォルトの名無しさん:2006/11/02(木) 00:58:40
System.Threading.Timer を使う
Windows アプリケーションを作っているんですが、
どうやら、競合によると思われるバグに悩まされています。

とりあえず、原因追及のため、Timer 側のスレッドが動いている
間、Windows アプリケーション側のスレッドを止めたいんですが、
そんなことは可能でしょうか?

もともと、マルチスレッドにする必要はなく、単に1/60秒ごとに
処理をしたくてタイマーを使ってるだけなので、マルチスレッドに
ならないタイマーがあればそれに替える方法でもいいんですが。
よろしくお願いします。




56 :デフォルトの名無しさん:2006/11/02(木) 01:00:10
>>55
まずはエラー内容を書いてみよう

57 :デフォルトの名無しさん:2006/11/02(木) 01:01:25
timerスレッドでメインのコントロールとか弄ってんでないの?

58 :デフォルトの名無しさん:2006/11/02(木) 02:10:17
>>57
中途半端な知識振りかざしてんなよ

59 :デフォルトの名無しさん:2006/11/02(木) 08:53:56
>>54
・・・。ここは初心者用だからいいかなと思ったのですが。


60 :デフォルトの名無しさん:2006/11/02(木) 09:31:09
>54
大丈夫、ここは初心者スレだよ

61 :デフォルトの名無しさん:2006/11/02(木) 13:05:55
>>53
updateコマンドを見直してみたら?
ちゃんとwhere条件はPrimaryKeyだけで更新してる?

62 :デフォルトの名無しさん:2006/11/02(木) 13:45:33
>>52
でもそういう危険があるっしょ。
そうならないためのオブジェクト指向なんだが、VSの作り方だとコントロール構成がそのまま
クラス構成になるようなパターンが多そうだ。w

63 :デフォルトの名無しさん:2006/11/02(木) 16:41:12
つうか何で後書き優先にしたいのに
排他制御有効にしてんのよ?

64 :デフォルトの名無しさん:2006/11/02(木) 17:39:31
XNA Game Studio Express (Beta 2) 配布開始
http://game10.2ch.net/test/read.cgi/gameama/1162148782/

65 :デフォルトの名無しさん:2006/11/02(木) 17:44:28
誰か C♯, C#相談室 Part35 を立てて下さい。
ホスト規制で立てられません・・・

66 :デフォルトの名無しさん:2006/11/02(木) 18:03:55
>>55
System.Windows.Forms.Timerの方を使えば、良いのでは?


67 :デフォルトの名無しさん:2006/11/02(木) 18:45:26
mac os x でC#を開発&実行したいのですがそれは可能でしょうか?

68 :デフォルトの名無しさん:2006/11/02(木) 18:51:18
>>65
同じく規制で立てられんかった

69 :デフォルトの名無しさん:2006/11/02(木) 18:52:18
>>67
つmono

70 :デフォルトの名無しさん:2006/11/02(木) 20:49:36
>>65
C♯, C#相談室 Part34
http://pc8.2ch.net/test/read.cgi/tech/1162467959/

すまんスレタイ間違った

71 :65:2006/11/02(木) 21:11:20
>>70
ありがとうございます。
スレタイは見なかったことにします。

72 :54:2006/11/02(木) 23:22:28
>>61
where句はプライマリーキーだけで更新しています。

>つうか何で後書き優先にしたいのに
排他制御有効にしてんのよ?

とは!?
データ取得時の状態と、DBが変わっていた場合
dataadapterのUpdateコマンドではエラーがおきるのではないですか?
一応、取得時のデータとDBのデータの状態が変わっていた場合は
再度取得しなおしてデータをセットしなおして、更新

以外の方法がみあたりません。
排他制御有効にしないプロパティみたいなものをdataadapterはもっているのでしょうか?

すいません、初心者な質問で・・・。
とても困っているので親切な方、教えていただけたらと思います。

dataadapterのUpdateメソッドを発行すると自動的に楽観的ロックである、と
ヘルプで読んだのですが、気のせいでしょうか。


73 :デフォルトの名無しさん:2006/11/02(木) 23:30:03
>>72
ttp://uchukamen.com/Programming3/Conflict/index.htm

74 :54:2006/11/02(木) 23:39:23
>>73
ありがとうございます。

あー、やっぱり基本的に
>一応、取得時のデータとDBのデータの状態が変わっていた場合は
>再度取得しなおしてデータをセットしなおして、更新

てことやんなきゃ駄目なんですよね。

一応悲観的ロックは考慮に入れていません。

スマートに後勝処理をするにはどうしたらいいのかなっ、とか思ったのですが
結局単純にupdate文をexecuteするか、再度取得しなおしてデータをセットしなおして、更新しなくちゃいけないのか
どっちかなんですよね?
後者の場合はそれなりの作りこみが発生しますよね。

了解です。
ありがとうございました。
そのほか良い方法がありましたら教えてください。
賞もないしつもんですが、よろしくおねがいします。


75 :デフォルトの名無しさん:2006/11/03(金) 00:32:26
エディタのカレット描画するのに、
Graphics.MeasureString メソッド を用いようとしたんですけど、

ストリング全体の長さ(たぶん、DrawStringの長さ?)と、
一文字一文字の長さの和が異なって正確な位置を求められません。

なにか解決方法を知らないでしょうか。

76 :75:2006/11/03(金) 01:14:32
自己解決?
ぐぐってみたら、こんなんあった。

// grfx.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
StringFormat strformat = StringFormat.GenericTypographic;
strformat.FormatFlags |= StringFormatFlags.MeasureTrailingSpaces;

コメントアウトは必要と書いてあるところもあったけど、消しても同様の結果を
得たので消した。

他の方法を知ってたら教えてください。

77 :デフォルトの名無しさん:2006/11/03(金) 01:50:18
>>54
>排他処理は楽観的ロックです。
これは、自分で設定してるわけじゃないんだな。

もしかしてCommandBuilderでUpdateCommand作ってる?
なら、自動生成やめて、自前でUpdateCommand作らないとだめ。


78 :54:2006/11/03(金) 02:35:02
>>77
>もしかしてCommandBuilderでUpdateCommand作ってる?
はい。そうです。

>自前でUpdateCommand作らないとだめ
自前で作るっていうのは・・・
データ更新時にDBからデータを再取得し、
結局データテーブル内のRowをなめて
rowstateを見ながらinsert、update、deleteを
そのデータテーブルにかけて、
そいつをUpdateメソッドでdb更新へいく、というやり方でしょうか?

それとももっと簡単に自前でUpdateCommand作れるものなんでしょうか。
しつこく聞いてしまってすいません。

79 :デフォルトの名無しさん:2006/11/03(金) 10:45:29
型付データセットの利点ってなんでしょうか?

80 :デフォルトの名無しさん:2006/11/03(金) 10:48:59
片がついてること。

81 :デフォルトの名無しさん:2006/11/03(金) 11:18:57
自分的にいいところって
rows[0]["列名"]
じゃなくて
rows[0].列名

みたいにフィールドとして使えることや、null判定をしてくれること、、なんだけど、
物理テーブルが変更されたら型付データセットも変更して、なおかつソースも全部変更しなくちゃいけないっていうのが
なんだかとても面倒な気がするんだけれど・・・・
しかもどこにおこうか迷ってしまう。
ほかに型付使う絶大な理由ってあるんでしょうか?


82 :デフォルトの名無しさん:2006/11/03(金) 23:42:08
DataSetやDataTableは一見楽そうなんだけど、作り込んでいくとだんだん使いにくくなっていって
結局は、DataReaderで呼び出して画面表示→Insertやupdateで1行ずつ更新という流れに・・・。

DataTableはワークテーブルみたいな使い方では便利だと思うんだけどね。

83 :デフォルトの名無しさん:2006/11/04(土) 00:40:19
VS2005から型付データセットが大幅に使いやすくなった、みたいなこと聞いたのですが本当かな

84 :デフォルトの名無しさん:2006/11/04(土) 02:18:32
Cookieを送るにはどうすればよいのでしょうか?
request.Cookie = "**=**";
でやってみたのですが、できませんでした。
よろしくお願いします

85 :デフォルトの名無しさん:2006/11/04(土) 02:38:52
SendCookie

86 :84:2006/11/04(土) 14:10:46
>>85
無事できました!ありがとうございました

87 :デフォルトの名無しさん:2006/11/04(土) 21:09:16
>>81
ソース変えたくなかったら、DataAdapterのTableMappingとColumnMappingを
書き換えるとかすると書き換える場所が減る。
そしてDBとコードで列名が食い違ってこんがらがる。
あれ?型付きを支持するつもりが・・・

あとは文字列アクセスだと打ち間違えに気づかないとか、遅いとか
(かなりの回数繰り返さないと気になる差にならないけど)
グリッドにデザイン時にバインドできないとか、あとなんだろう。


88 :デフォルトの名無しさん:2006/11/04(土) 22:02:31

型付DataSetの使い方が詳しく載っているサイトを
ご存知の方いたら教えて下さい。

89 :デフォルトの名無しさん:2006/11/04(土) 22:08:43
>>88
XML書いて
XSD.EXE使ってXSDに変換して
XSD調整して
XSD.EXE使ってDataSetに変換ってだけじゃないの?

90 :デフォルトの名無しさん:2006/11/05(日) 04:32:03
コンボボックスのリストを別のコンボボックスにコピーするにはどうしたらいいのでしょうか?
配列に格納してそれをaddrangeで入れればいいと思うのですが、
ソースがsqlCommandでひっぱってきたデータなので、件数がわからず配列が
作れなくて困ってます。
素直に2つのコンボボックス両方に1件ずつaddしていったほうが早いのでしょうか


91 :デフォルトの名無しさん:2006/11/05(日) 04:53:20
>>90
comboBox2.Items.AddRange(new ArrayList(comboBox1.Items).ToArray());
で出来る事は出来ないか?
いいかどうかは別にして・・・

92 :90:2006/11/05(日) 05:27:31
>>91
ToArrayというメソッドを見落としていました。これがあればListに格納して
それを直接いれてやれますね。
ありがとうございました。

93 :デフォルトの名無しさん:2006/11/05(日) 20:48:11
作動中のプログラムをタスクマネージャーなどで強制終了された場合でも、
一定の終了処理を施したいのですが、どのようにすれば出来ますか?
ウイルスみたいに強制終了しても何度も復活するのがあるから、それと
同じようにして終了処理が出来ないかなと思ったんですが…

94 :デフォルトの名無しさん:2006/11/05(日) 20:56:55
「何度でも蘇るさ!」

95 :デフォルトの名無しさん:2006/11/05(日) 21:06:06
>>93
プロセスごと刈り取られたら終了処理を行う余裕はないよ。
ウイルスみたいに別のプロセスを走らせて監視するしかない。

96 :デフォルトの名無しさん:2006/11/05(日) 21:16:01
>>95
さらにそのプロセスを監視するプロセスを走らせて(ry

97 :93:2006/11/05(日) 21:28:24
>>95
マジすか…orz
GetProcessesByName重いからあんまり連続して呼び出したくないんだよなぁ
これ以外にメインプログラムの生存を確認する方法無いですかね?

98 :デフォルトの名無しさん:2006/11/05(日) 21:37:47
>>97
毎回探さなくても、HasExitedをみてればいいんじゃなかろうか。

99 :93:2006/11/05(日) 21:41:00
>>98
おお、そんなのがあるのか
thx

100 :デフォルトの名無しさん:2006/11/05(日) 22:20:13
>>87
>グリッドにデザイン時にバインドできないとか
うそ。
普通のdatasetでもkeyかdatafieldに列名書き込めばバインドできるよ。

101 :デフォルトの名無しさん:2006/11/05(日) 22:22:30
>>90
コンボボックスのリストを別コンボにコピー?
Arraylistなんてことしなくても
DataSourceにぶち込んだデータがたとえばDataTableなら

DataTable dt =(DataTable)cmb1.DataSource;

cmb2.DataSource =dt;

でいけるんじゃないの?
キャスト内容は何をDataSourceにブチこんだかによるけどね。


102 :デフォルトの名無しさん:2006/11/06(月) 00:49:08
ファイルをとあるHPから同時にダウンロード(マルチスレッド)したいんだけど、C#で作成可能ですか?

103 :デフォルトの名無しさん:2006/11/06(月) 00:57:01
>>102
System.Net名前空間にいろいろあるからヘルプ眺めれ。

104 :デフォルトの名無しさん:2006/11/06(月) 00:57:36
Win32ネイティブではiniファイル、
Javaではpropertiesファイルを使って、
情報を設定していましたが、
C#だとXMLを使うのが一般的なのでしょうか。

単にテキストで設定値を定義したいだけなのに、
些か大仰な気がします。
もちろんテキストファイルを読み込むようにも出来るのは分かりますが、
それが一般的でないのならあまりやりたくないところです。

105 :デフォルトの名無しさん:2006/11/06(月) 01:35:37
>>104
C#という時点で十分大げさだと思うが、いまさらその程度ケチってどうする?


106 :デフォルトの名無しさん:2006/11/06(月) 02:02:30
でも実際XmlSerializerはかなり重いよ。
自分は仕方ないのでテキストファイルを読み書きするクラスを自前で定義している。


107 :デフォルトの名無しさん:2006/11/06(月) 02:45:58
参考までに。
XmlSerializer が“重い”原因の一つは、
実行時に csc を呼び出してアセンブリをコンパイルするプロセスが走る事にあると思う。
.NET 2.0 には sgen というツールがあって、
シリアライズ処理を行うアセンブリ(.dll)をプリコンパイルできるようになっている。
これでいくらかパフォーマンスを改善できるらしい。

108 :90:2006/11/06(月) 13:38:13
>>101
DataTableは考えませんでしたが、DataTableに格納するのに時間がかかってしまいますね。
もちろん、そこまで大量のデータをコンボボックスにつっこんでどうするんだという
問題もあるかもしれませんがw

テストしてみたところ、DataTableにFillするのとsqlCommandとDataReaderで読み込んだ物を
ループで1件ずつList<string>に突っ込むのでは、Listを使った物の方が速いみたいです。

とりあえず今回はToArrayでやってみようと思います。



109 :デフォルトの名無しさん:2006/11/06(月) 15:57:48
ngen に比べて sgen はお手軽に使えていいんだけど
パフォーマンスがあがったという実感は感じない

110 :104:2006/11/06(月) 22:05:59
テキストファイルを使ってる人もいるのですね。
まあ、それでいこうかなあ・・・。
シーケンシャルに読み込むだけだから、遅いと噂のXMLを使う必要性もあまりないし・・・。

111 :デフォルトの名無しさん:2006/11/06(月) 22:17:50
XmlSerializerだと、XMLの文法解析も要らないし。
直接、構造体をファイルに吐き出し、読み込みをやってくれるから。
便利だとは思うんだけどね。
実際、大量のXMLファイルを扱うアプリを書いた時は。
その処理にかかる時間の多くが、ファイルのオープン、クローズ処理であって。
XMLのパース処理なんて大したことなかった。

112 :デフォルトの名無しさん:2006/11/06(月) 23:19:06
>>108
どうでもいいけど、昨今のPCじゃそんな程度で早い遅いなんてわからんよ
可読性の良いほうを選ぶがよろし。

普通にDataReaderで読み込んだDatasetなりDatatableを
コンボボックスのDataSourceにつっこんで
ViewカラムとDataカラム設定するほうがソースも見やすいし(3行)
可読性もいい。

いまさらArrayListでぐるぐるなんて、ちょっとおかしくね?

113 :デフォルトの名無しさん:2006/11/07(火) 02:06:34
構成ファイル使うだろ普通。
あるいはセッティング使うだろ。
なんでわざわざ独自方式に走る。


114 :デフォルトの名無しさん:2006/11/07(火) 02:55:21
おれはクラスをBinaryFormatterでシリアライズ派

115 :デフォルトの名無しさん:2006/11/07(火) 08:46:38
>>107
実行時にcscは働かないはずだが

116 :デフォルトの名無しさん:2006/11/07(火) 08:49:31
>>115
動いてますが

117 :90:2006/11/07(火) 09:01:11
>>112
遅いっていってもあくまでも数字で比較したときの話で
実用上は差はないようなのであなたのおっしゃるとおりです。
次回からはそっちを使ってみます。

118 :デフォルトの名無しさん:2006/11/07(火) 10:28:23
>>100
しまったあぁ
Console.Write("Σ or2=====●");


119 :デフォルトの名無しさん:2006/11/07(火) 11:30:11
例えば画像ファイルなどのバイナリフォーマットを、
BinaryFormatterだとか使って読み書きって出来る?
どっちかというと、クラス主体のシリアライズ用で、任意のフォーマットを
読んだりするのには使えないのかなと思うんだが。

120 :デフォルトの名無しさん:2006/11/07(火) 11:56:47
>>119
そのバイナリフォーマットをサポートするクラスがISerializableを実装して
いればいいだけでは?

121 :デフォルトの名無しさん:2006/11/07(火) 12:23:20
StructLayout、FieldOffsetとかの属性は見てくれないよね?
どちらにしてもエンディアン変換は自前でやるしかなさそうだが。

122 :デフォルトの名無しさん:2006/11/07(火) 21:33:24
そんなのにシリアライズ使ってどうすんの。


123 :デフォルトの名無しさん:2006/11/07(火) 21:58:21
別に"シリアライズ"である必要はないんだが。
構造体を用意さえすれば、別に自前で読み書き処理を用意しなくても済む仕組みがあるのであれば、
それを使いたいってだけなんだけどね。

124 :デフォルトの名無しさん:2006/11/07(火) 23:48:50
.NETのTIPS的なものに別スレッドからコントロールをさわっちゃいけないってあります。
例えば
別スレッドからtextBox1.Text = ""hoge;
なんてNG

コントロール.Invoke(デリゲード)
とする場合
別スレッドで実行されているメソッドがFormのメンバだとすると
Invoke(デリゲード)か
textBox1.Invoke(デリゲード)か
どちらが正しいのでしょうか?

どちらでも良さげなんてですが・・・

125 :デフォルトの名無しさん:2006/11/07(火) 23:51:58
どっちでもいいよ。
Invoke するコントロールが属するスレッド、が問題だから。

126 :デフォルトの名無しさん:2006/11/08(水) 00:41:43
Invoke( ...

this.Invoke( ...
の略だからね

127 :デフォルトの名無しさん:2006/11/08(水) 03:20:21
>>116
じゃあMSILってなんだ?

128 :デフォルトの名無しさん:2006/11/08(水) 03:45:01
>>127
XmlSerializer はシリアライズを行うアセンブリを動的に生成してる。

Reflector で XmlSerializer.XmlSerializer(Type, String) あたりから辿ってごらん。

129 :デフォルトの名無しさん:2006/11/08(水) 16:16:30
127がLCGを使って実装してくれるそうだ

130 :デフォルトの名無しさん:2006/11/08(水) 20:03:58
質問です。
ControlのTagプロパティの型はobjectなのに、デザイナ上ではstringのようにふるまう。
DataGridView.DataSourceでも然りです。
このように本来は違う型なのに、デザイナ上では限定的に型を指定できるようにするには
どうすれば良いのでしょうか?


131 :デフォルトの名無しさん:2006/11/08(水) 21:01:15
ヒント:
[SRCategory("CatData"), Localizable(false), Bindable(true), DefaultValue((string) null), TypeConverter(typeof(StringConverter)), SRDescription("ControlTagDescr")]
[SRDescription("DataGridViewDataSourceDescr"), RefreshProperties(RefreshProperties.Repaint), SRCategory("CatData"), DefaultValue((string) null), AttributeProvider(typeof(IListSource))]

132 :デフォルトの名無しさん:2006/11/08(水) 23:31:31
TreeView でディレクトリのツリー構造を表現している。
FileSystemWatcher にドライブのルートを登録、配下の全サブディレクトリを監視対象にする。
この状態で Renamed のイベントハンドラ内で TreeView のノード名を変更すると
InvalidOperationException が発生。「有効ではないスレッド間の操作」だと言われる。
どうしたら解決できるか教えてほしい。
これだけで原因が特定できるとは思えないが、何を書いたら手がかりになるかわからない。
開発環境は VC# 2005 Express + Windows XP。

133 :デフォルトの名無しさん:2006/11/08(水) 23:33:06
>>131 丁寧にありがとうございます。

取りあえず、SR何々無しで目標は達成できましたが、
そもそもSRCategory ,SRDescription というのは何処のアセンブリにあるのでしょうか?
度々申し訳ないです。

134 :デフォルトの名無しさん:2006/11/08(水) 23:34:32
SynchronizingObject は設定してるかい?
// コンポーネントをデザイナにD&Dなら自動設定のはずだけど

135 :デフォルトの名無しさん:2006/11/08(水) 23:57:09
>>133
System.Windows.Formsのinternal classだから外からは使えないよ。

136 :デフォルトの名無しさん:2006/11/09(木) 00:15:00
EnterpriseLibraryかよ

137 :デフォルトの名無しさん:2006/11/09(木) 14:02:35
>>132
Renamedイベントハンドラ内から、TreeViewのノード名を変える時に、
その処理をDelegateに包んで、TreeViewのインスタンスでInvoke()。


138 :デフォルトの名無しさん:2006/11/10(金) 09:49:20
>>128
そのせいでこうなるの?
http://support.microsoft.com/kb/899153


139 :デフォルトの名無しさん:2006/11/10(金) 14:50:33
C#には多倍長整数型変数ってないんですか?

140 :デフォルトの名無しさん:2006/11/10(金) 15:04:58
J#にはあるよ

141 :139:2006/11/10(金) 15:51:42
>>140
ということは、J#のライブラリを参照に加えれば使えるんですか?

142 :デフォルトの名無しさん:2006/11/10(金) 16:16:51
うい

143 :139:2006/11/10(金) 18:30:15
>>142
これでショボい自作クラスを作らずに済みそうです。
ありがとうございました。

144 :132:2006/11/10(金) 21:05:39
>>134が自分へのレスだと気づかなかった……すまん。
これで解決できた。回答どうもありがとう。
FileSystemWatcherについて調べていたとき@ITでも見ていたのにすっかり忘れていたよ。

>>137も丁寧なレスをありがとう。こちらも動きを確かめてみる。

145 :デフォルトの名無しさん:2006/11/10(金) 23:13:05
>>144
@ITってこれだよね

ttp://www.atmarkit.co.jp/fdotnet/dotnettips/287winfilewatch/winfilewatch.html

146 :デフォルトの名無しさん:2006/11/11(土) 05:23:41
質問です。
ある座標から、有る座標まで絵が勝手に動く関数って有りますでしょうか?
例えば
有るフォームの(0,0)座標から、(100,100)座標まで勝手に絵が動いて欲しいんですけれども・・・

147 :デフォルトの名無しさん:2006/11/11(土) 07:19:55
>>146
TimerとPictureBox組み合わせて作れば。

148 :デフォルトの名無しさん:2006/11/11(土) 12:22:19
>>145
まさしく。
よくお世話になってる。

149 :デフォルトの名無しさん:2006/11/11(土) 13:29:52
C♯, C#相談室 Part35
http://pc8.2ch.net/test/read.cgi/tech/1162490865/
↑で回答してくれずからかわれただけなので優しい皆さん、教えてください。

で、質問の内容は

フォームのキーダウンイベント発生しないけどなんでー

private void Form1_KeyDown( object sender, KeyEventArgs e )
{
switch ( e.KeyCode ) {
case Keys.Left:
rects[0].X -= 25;
rects[1].X -= 25;
rects[2].X -= 25;
rects[3].X -= 25;
break;

case Keys.Right:
rects[0].X += 25;
rects[1].X += 25;
rects[2].X += 25;
rects[3].X += 25;
break;
}
}
}

すいっちのとこにブレーク張ってるのにキーボードのキー入力しても
イベントハンドラにdで来ないお
これだから馬具だらけのC#はきらいだ!!!

150 :149の続き:2006/11/11(土) 13:31:23
213 名前:デフォルトの名無しさん[sage] 投稿日:2006/11/11(土) 12:12:25
コントロールの方に飛んでるだけだろ

215 名前:デフォルトの名無しさん[sage] 投稿日:2006/11/11(土) 12:27:49
>>213
違いますよ^^;
ちゃんとフォームにフォーカス当ててる

217 名前:デフォルトの名無しさん[sage] 投稿日:2006/11/11(土) 12:53:12
>>216
Form.KeyPreview

218 名前:デフォルトの名無しさん[sage] 投稿日:2006/11/11(土) 12:59:18
そんなスレッドはないようですが・・・
できればurlをお願いいたします(ぺこりー

220 名前:デフォルトの名無しさん[sage] 投稿日:2006/11/11(土) 13:16:08
>>219
どーも。
ボタンを押したときのイベントで>>217
 Form.KeyPreview = true;
というのを追加したけどコンパイルエラーになる。
変数はForm1という名前だから
 Form1.KeyPreview = true;
とやっても怒られる。
 this.KeyPreview = true;
でコンパイルが通った!
でもやっぱりだめなんだな、これが。
やっぱり>>211のイベントにdで来ないお
試しにみんなもやってみてくれ、
もしバグだったら誰か舞糞に連絡ヨロ

151 :デフォルトの名無しさん:2006/11/11(土) 13:31:56
以上です、だれかよろしくお願いします。

152 :デフォルトの名無しさん:2006/11/11(土) 13:33:30
エスパーすると、イベント設定してないだろ?
いきなりバグとか言うやつは頭沸いてる

153 :デフォルトの名無しさん:2006/11/11(土) 13:33:40
while(true){
Console.Write("BABEL ");
}

154 :デフォルトの名無しさん:2006/11/11(土) 13:45:20
>>152
2行目の失礼な言い方は許すが
イベント競っていって何ですか?
もしかしてイベントデザイナでフォームを選択して
Form1のイベント一覧のとこにある「KeyDown」というとこを
ダブルクリックしてコードとして勝手に生成された雛形
private void Form1_KeyDown( object sender, KeyEventArgs e )
{
}
の中に>>149の処理を書いたのだが
それ以外にイベント設定というものが必要なのですか?


155 :デフォルトの名無しさん:2006/11/11(土) 13:49:58
ネタだろ。


156 :デフォルトの名無しさん:2006/11/11(土) 13:50:53
KeyPreviewをイベントハンドラ内で設定したのであろう。


157 :デフォルトの名無しさん:2006/11/11(土) 13:51:16
>>154
http://www.linux.or.jp/beginners/question.html

158 :デフォルトの名無しさん:2006/11/11(土) 13:52:21
これだけ失礼な物の言い方していて、しかも向こうのスレで答えまで教わっているのに
こっちのスレに来てまだ繰り返すのか。
Form.KeyPreview
を検索してみたのか?
馬鹿じゃないのか。

159 :デフォルトの名無しさん:2006/11/11(土) 13:53:05
>>156
イベントハンドラというかbutton1_Click()イベントでこの中の
最後の行で設定してる
そうしないとボタン押したときにボタンにフォーカス奪われちゃうべ?

160 :デフォルトの名無しさん:2006/11/11(土) 13:54:08
もういいからしねよ
Form.KeyPreviewのせつめいよめよあほ。


161 :デフォルトの名無しさん:2006/11/11(土) 13:54:47
ちなみにこんな感じ
private void btnStart_Click( object sender, EventArgs e )
{
///途中省略
timer.Enabled = true;
timer.Start();
this.KeyPreview = true;
}


162 :デフォルトの名無しさん:2006/11/11(土) 13:57:57
なんでデザイナで設定しないわけ?
プロパティの性質から言って初期化時に設定しないとだめな気がする。
まあClickしてなくて設定されてないのかも試練が。
ていうかあほだろ。
なんでClickイベントで設定なんだよ。
意味分かってねーのかよ。
分かってねーならヘルプ嫁よ。
ヘルプ読んでこうしたならもうやめとけ

163 :デフォルトの名無しさん:2006/11/11(土) 13:58:45
>>161
それだとそのボタンを押すまではKeyPreviewが有効にならないから
ほかのコントロールにフォーカスがある時にKeyPressにイベントがこないのは自然。
ていうかKeyPreviewの(ry

164 :デフォルトの名無しさん:2006/11/11(土) 14:02:26
なるほどプロパティで設定できたのか、
でやってみたんだがやっぱだめだったよ
>>161からKeyPreviewはずしてもだめだ
ものは試しだ、みんなも試してみてくれ

165 :デフォルトの名無しさん:2006/11/11(土) 14:03:31
>>163
いや、それには意味があるんだよ
ボタンを押したときに制御したいからさ
それくらい読み取ってくれ頼む

166 :デフォルトの名無しさん:2006/11/11(土) 14:07:27
一回押したら永久にフォームでイーが拾えるようになるがそうしたいのか?
最初に押すまではキーを拾わないようにしたいのか?うんうん
もうさ、コード全部書いちまえよ。
どっか間違ってるからさ、
だれも見ないと思うけどね。

ああ、あとさ、あほだってことはばればれだから、
考えてる振りしなくてもいいんだよ。


167 :デフォルトの名無しさん:2006/11/11(土) 14:08:52
private void button1_Click( object sender, EventArgs e )
{
 this.KeyPreview = !this.KeyPreview;
}

private void Form1_KeyDown( object sender, KeyEventArgs e )
{
 if( e.KeyCode == Keys.A )
  System.Media.SystemSounds.Asterisk.Play();
}

これだけで、ボタンでトグルできたぞ。
環境がおかしいか、頭がおかしいかのどちらかだろう。


168 :デフォルトの名無しさん:2006/11/11(土) 14:09:40
頭にきまっ…シー


169 :デフォルトの名無しさん:2006/11/11(土) 14:13:52
>>167
オマイのやさしさに感動
だが理解できないだろうから豚に真珠だな

170 :デフォルトの名無しさん:2006/11/11(土) 14:15:34
>>167
実験してくれてありがとう(´;ω;`)
すごいヒントになったよ!

で、解決しました(だが動作が意味不明のままだけど)。

1.駄目なケース

timer.Enabled = true;
timer.Start();
this.KeyPreview = true;

2.OKのケース

this.KeyPreview = true;
timer.Enabled = true;
timer.Start();


タイマーイベントを有効に(スタート?)するまえに
KeyPreviewをもってこないとだめぽらしい。
C#って不思議だ
ここで質問して良かった、>>167サンクス!

171 :デフォルトの名無しさん:2006/11/11(土) 14:21:32
すまん、間違えた。
1.のケースも2.のケースもOKだった。。。

なんかね、Keys.LeftとKeys.Rightはキー入力イベントとして
拾って紅っぽい、おいらのPCじゃ。
スペースキー押したらイベントハンドラに飛んできたよ。。。。。。。。。orz
お騒がせしました。マンスー、マンスーです。。。

172 :デフォルトの名無しさん:2006/11/11(土) 14:24:06
言い直し。。

>なんかね、Keys.LeftとKeys.Rightはキー入力イベントとして

ではなくおいらのパソコンのカーソルキーを押してもイベントとして

カーソルキー自体は特に問題なく動くんだけどね、、、
もしかしてのーとPCと一体のキーボードだからキーコードが
一般的なキーコードと違うのかな、
まあこれはここで質問することじゃないからいいや、

本当に本当にお騒がせしました

173 :デフォルトの名無しさん:2006/11/11(土) 14:33:41
だからまにゅあるよんでね
キーボード入力のしくみてところがいいよ
ProcessDialogKey とかね
みんなこたえおしえてくれてるんだから
ひとのせいにしたらだめなんだよ


174 :デフォルトの名無しさん:2006/11/11(土) 14:36:25
頭のバグをささと直せ。

175 :デフォルトの名無しさん:2006/11/11(土) 14:58:00
俺様プログラマー増えてきたのかな?
何事も上達するには謙虚さが大切だよ!

>Form.KeyPreview = true;
>Form1.KeyPreview = true;

これがダメな理由分からないと、今後何やっても上手くいかない。
がんばってね。

176 :デフォルトの名無しさん:2006/11/11(土) 15:06:15
上はクラスだから当然駄目だよな。

177 :デフォルトの名無しさん:2006/11/11(土) 15:07:57
下もクラスですが

178 :デフォルトの名無しさん:2006/11/11(土) 15:08:47
工エエェェ(´д`)ェェエエ工

179 :デフォルトの名無しさん:2006/11/11(土) 15:09:03
つーかあの馬鹿はコテにしてくれればNGにするんだけどな。
元のスレで毒づいてるんじゃねーよ。

180 :デフォルトの名無しさん:2006/11/11(土) 15:10:26
そうです。上も下もクラスです。
何事も勉強が大切ですよ。

181 :デフォルトの名無しさん:2006/11/11(土) 19:53:00
>>180
Form1 Form1 = new Form1();
Form1.KeyPreview = true;
とか言ってみたり。

182 :デフォルトの名無しさん:2006/11/11(土) 19:58:35
その発想はなかったわ。

183 :デフォルトの名無しさん:2006/11/11(土) 23:20:44
System.Media.SoundPlayer sp = new System.Media.SoundPlayer(Properties.Resources.a);

でWaveを鳴らしていますが、たまに雑音が入ります。
対処法を教えてください

184 :デフォルトの名無しさん:2006/11/11(土) 23:32:09
で、そのノイズがどこで混入してるかは調べてないわけ?

185 :デフォルトの名無しさん:2006/11/11(土) 23:32:33
>>183
ハードの問題じゃないの?
内容詳しく。

186 :デフォルトの名無しさん:2006/11/11(土) 23:50:26
C#を使って、趣味でWindows(GUI)アプリケーションを作成する場合、
設計はどのように行えば良いのでしょうか。
画面をデザインしてイベント毎の処理を書いていくわけですが、
思うがままにやればスパゲッティになるのは目に見えてます。

やはり、クラス図、シーケンス図、アクティビティ図などを書いていくべきなのでしょうか?
UML以外のお奨めなどはあるでしょうか?

187 :デフォルトの名無しさん:2006/11/11(土) 23:55:12
一番大事なのは最後まで完成させる気力を持ち続けること。

UMLなんて必要ない。こだわってたらやる気なくすことになると思う。

自分に都合のいい図を描け。

188 :デフォルトの名無しさん:2006/11/11(土) 23:57:45
こんな音です。毎回発生するわけではありません。
http://fluid.run.buttobi.net/cgi-bin/src/ns0545.wav

音を鳴らす部分だけを持ってきて新規アプリケーションで実験しても
発生しませんでした。なぜだろう…


189 :デフォルトの名無しさん:2006/11/11(土) 23:59:51
精神的ブラクラ注意

190 :デフォルトの名無しさん:2006/11/12(日) 00:03:04
>>186
チームで開発するならともかく、一人で作るなら何とでもなるでしょ。
脳内であれば超3次元な図を書くことだって出来るんだし。

まあ、ヒントとすればイベントハンドラの中には3行以上書かないことかな。

191 :デフォルトの名無しさん:2006/11/12(日) 00:05:04
>>188
どこらへんが雑音なのかわからんかった

192 :デフォルトの名無しさん:2006/11/12(日) 00:17:39
どのような状況でとか詳しく書かないと分からんよ。
過負荷になってるとか、エスパーじゃないからわからないよ。

まあ多分書いても分からんけど。


193 :デフォルトの名無しさん:2006/11/12(日) 00:27:22
ファイル名指定してコンストラクタ呼んでるのか?
どんなきっかけでどのように再生させてるのか?
ループさせてるのか?
同時に別の音再生させてないか?



詳しい状況はいくらでも書けるだろ?
出し惜しみするなよ。


194 :デフォルトの名無しさん:2006/11/12(日) 00:29:22
煽りはスルーします

195 :デフォルトの名無しさん:2006/11/12(日) 00:29:30
ネットワーク上のストリーム再生してるかもな。

196 :デフォルトの名無しさん:2006/11/12(日) 00:32:09
お前ら、ネタなんだからスルーしろ。

197 :186:2006/11/12(日) 00:45:03
>>187,190
なるほど、UMLにこだわる必要はないんですね。
イベントハンドラを簡潔にするということは、
処理は別のクラスに外だしするなど、
工夫が必要になるんですね。
色々試してみます。ありがとうございました。

198 :デフォルトの名無しさん:2006/11/12(日) 01:59:50
>>193
出し惜しみ はするつもりありませんが、どのように書いたら良いのか分からなくて・・・

再生の状況は、たとえば[ボタンを押したら再生する]で、
リソースに格納したファイルからの再生です。ループはしません。

同時に別の音再生させているかもしれません。(下記ソース、再生前に一応Stopをつけているのですが)

具体的なソースは
System.Media.SoundPlayer sp = new System.Media.SoundPlayer(HimatubusiG.Properties.Resources.se01);

private void WAVEsaisei(string FILENAME)
{
sp.Stop();
if (FILENAME == "se01") sp.Stream = HimatubusiG.Properties.Resources.wav1;
if (FILENAME == "se02") sp.Stream = HimatubusiG.Properties.Resources.wav2;
if (FILENAME == "se03") sp.Stream = HimatubusiG.Properties.Resources.wav3;
if (FILENAME == "se04") sp.Stream = HimatubusiG.Properties.Resources.wav4;
if (FILENAME == "se05") sp.Stream = HimatubusiG.Properties.Resources.wav5;
sp.Play();
}
でして、いくかのファイルを使い分けています。

WAVEFILE("se01"); で、再生です。

199 :デフォルトの名無しさん:2006/11/12(日) 02:07:25
失礼、
再生は
WAVEsaisei("se01");
です。


200 :HitumabusiG:2006/11/12(日) 08:32:21
200

201 :149:2006/11/12(日) 09:42:26
きみたち必死になってForm.KeyPreviewという回答をくれたけど
実は違うみたいれつよ(藁
後学のためにきみたちのもおいらが調べた結果をまとめたので教えてあげよう

「Windowsアプリケーションで方向キーなどの特殊キーを処理するには?」 by 149

1.Buttonコントロールで方向キーが処理できない理由
 Buttonコントロールでの方向キーの入力が、通常のKeyDownなどのキー・イベントで処理できないということは、
「方向キーが通常の入力キー(以降、普通入力キー)とは異なる」ことを意味する。Buttonコントロールの方向キーは
「プリプロセス(=前処理)を必要とする特殊な入力キー」(以降、特殊入力キー)である。

 これは、すでにプリプロセスで何らかの処理を実行済みなので、さらにその後でキー処理を行う必要がないからだ。
例えば、Buttonコントロールで[↓]キーを押すと、Windowsアプリケーションはプリプロセス工程で自動的にフォーカス移動の
処理を実行する。よって、その後でKeyDownイベントを処理する必要はなくなる。

 しかし、実際のアプリケーションでは、そのような通常のアプリケーション動作をカスタマイズしたい場合がある。例えば、
通常のアプリケーション動作では[↓]キーでフォーカス移動すると、そのフォーカス移動先がGroupBoxコントロールなどにより
設定されたグループ内でループするようになっているが、それをカスタマイズして、グループを越えてフォーカス移動するように
したい場合などが挙げられる。

  a) プリプロセス工程における処理をカスタマイズする
  b) 特殊入力キーを普通入力キーに変更する

ここではa)について解説する。

2.プリプロセス工程における処理をカスタマイズする
 プリプロセスをカスタマイズするには、フォームのProcessDialogKeyメソッドをオーバーライドして、そのメソッド内でキー処理を
行えばよい。もちろんフォームではなく、コントロールのProcessDialogKeyメソッドをオーバーライドしても同様の結果が得られる。
 次のコードは、実際に、フォームのProcessDialogKeyメソッドをオーバーライドした例である。この例では、方向キーでグループを
越えたフォーカス移動を行うように、処理をカスタマイズしている。

続く

202 :149:2006/11/12(日) 09:43:31
protected override bool ProcessDialogKey(Keys keyData)
{
switch (keyData)
{
case Keys.Down:
case Keys.Right:
this.SelectNextControl(
this.ActiveControl, true, true, true, true);
break;
case Keys.Up:
case Keys.Left:
this.SelectNextControl(
this.ActiveControl, false, true, true, true);
break;
default:
return base.ProcessDialogKey(keyData);
break;
}
return true;
}

ProcessDialogKeyメソッドをオーバーライドしたサンプル・プログラム(C#)

 なお、ProcessDialogKeyメソッドはコントロール→フォームの順で呼ばれる。ProcessDialogKeyメソッドでは、
独自にキーを処理した場合には、それを示すために戻り値でTrueを返すようにする。

 また、コントロールのProcessDialogKeyメソッドは、コントロールのPreProcessMessageメソッドから暗黙的に
呼び出される。そのため、プリプロセス工程の最初のメソッドであるコントロールのPreProcessMessageメソッドを
オーバーライドしても、同様にプリプロセス工程でのキー処理をカスタマイズできる。しかし、コントロールの
ProcessDialogKeyメソッドやPreProcessMessageメソッドをオーバーライドする方法を採用する場合、当然、
コントロールの継承が必要になる。

203 :149:2006/11/12(日) 09:44:43
いかにもC#のことなら何でも知ってる見たいなツラして回答者ぶるなら
少しは勉強しろよな(禿藁

204 :デフォルトの名無しさん:2006/11/12(日) 10:25:43
>>173
>だからまにゅあるよんでね
>キーボード入力のしくみてところがいいよ
>ProcessDialogKey とかね
>みんなこたえおしえてくれてるんだから
>ひとのせいにしたらだめなんだよ

方向キーという情報がはじめて出た直後には教えている
よかったね。

205 :デフォルトの名無しさん:2006/11/12(日) 10:36:56
方向キーのイベントを採ろうとしてるのは>>149で既出だぞ

206 :デフォルトの名無しさん:2006/11/12(日) 12:12:42
>>190
>イベントハンドラの中には3行以上書かないこと
イベントハンドラ内では、3行を超えるコードは全部メソッドにして呼び出すべき、ということ?

207 :デフォルトの名無しさん:2006/11/12(日) 12:16:07
>>206
GUIとその他の処理を分けろ、ということじゃなかろうか。

フォームのprivateメソッドにしちゃったら同じだけどな。

208 :デフォルトの名無しさん:2006/11/12(日) 13:59:29
行数なんてなんの意味も無い
1行にいくらでも書けるけど・・・



209 :デフォルトの名無しさん:2006/11/12(日) 14:03:47
わかったからもう改行するなよ。

210 :デフォルトの名無しさん:2006/11/12(日) 15:16:05
マルチみたいな女の子を作りたいなあ

211 :デフォルトの名無しさん:2006/11/12(日) 15:36:05
>>207
まあ、privateになってるだけでもだいぶマシだけどな・・・
どっからどういう仕様で呼び出されてるのかわからんメソッド・メンバ変数山盛りだと本当に泣きたくなる。

212 :デフォルトの名無しさん:2006/11/12(日) 16:34:23
エラー19'hogehoge.Index' は参照マーシャル クラスなので、
'hogehoge.Index' を ref または out として渡すことはできません。

コンパイルエラーでこういうのが出てしまいます。
元のコードは、こんな感じです。


class hogebase
{
public int Index = 0
}

class hogeInherit : hogebase
{
private void Close()
{
base.Index = 100;
}
}

void main()
{
hogebase hb = new HogeInherit();
Console.WriteLine("{0}\n", hogeInherit.Index.ToString());
}

213 :デフォルトの名無しさん:2006/11/12(日) 16:36:58
変数名は hb だろ

214 :デフォルトの名無しさん:2006/11/12(日) 16:37:46
>>213
すんません。そうですね。

void main()
{
hogebase hb = new HogeInherit();
Console.WriteLine("{0}\n", hb.Index.ToString());
}

の間違いです。


215 :デフォルトの名無しさん:2006/11/12(日) 16:42:26
コードを簡略化するのは大事だけどさ、そのためにエラーの原因まで削っちゃ駄目だろ。
main メソッドが大文字から始まらないのは目をつぶるとしても、
それだけじゃコンパイルエラーにならないよ。
ついでにエラーコードは正しく。CS0197 だろ。

でまあ原因はヘルプに書いてある。そう言うもんだと諦めろ。

216 :デフォルトの名無しさん:2006/11/12(日) 17:16:45
釣りってレベルじゃねーぞ!
店員何とかしろよおい!

217 :デフォルトの名無しさん:2006/11/12(日) 17:17:30
らっしゃい! 何にしましょう

218 :デフォルトの名無しさん:2006/11/12(日) 17:20:14
         ____
       /      \
      /  ─    ─\    らっしゃい! 何にしましょう
    /    (●)  (●) \
    |       (__人__)    | ________
     \      ` ⌒´   ,/ .| |          |
    ノ           \ | |          |
  /´                 | |          |
 |    l                | |          |
 ヽ    -一ー_~、⌒)^),-、   | |_________|
  ヽ ____,ノγ⌒ヽ)ニニ- ̄   | |  |       ____

         ____
       /      \
      / ─    ─ \  これ程つまらない合いの手は
    /   (●)  (●)  \  久々だお
    |      (__人__)     | ________
     \     ` ⌒´    ,/ .| |          |
    ノ           \ | |          |
  /´                 | |          |
 |    l                | |          |
 ヽ    -一ー_~、⌒)^),-、   | |_________|
  ヽ ____,ノγ⌒ヽ)ニニ- ̄   | |  |       ____

219 :デフォルトの名無しさん:2006/11/12(日) 17:35:54
RegexOptions.Compiledを指定したときと指定しなかったときのベンチマーク結果ってある?

220 :デフォルトの名無しさん:2006/11/12(日) 17:38:13
検索対象と検索する正規表現文字列によって千差万別。
ベンチマークに意味はないと思うよ。

221 :デフォルトの名無しさん:2006/11/12(日) 23:45:49
>>219
メモリリークするから true にするのはヤメレ

222 :デフォルトの名無しさん:2006/11/12(日) 23:47:59
いまどきのパソコンは無駄に多くの物理メモリ積んでるからメモリリークしても
なんの問題も無い

223 :デフォルトの名無しさん:2006/11/13(月) 22:20:14
すみません、質問させてください。
今、テキストファイルから一行一行読み込んで
データグリッドに一行一行、表示させるプログラムを書いているのですが
処理していくうちにどんどん遅くなり、
3日間で1200行がやっとです。
一行読み込み→データベース更新→一行表示 の手順でやってます。
一気に表示させたほうが速いかもしれませんが、ユーザに
今やってる処理を知らせるために、一行一行表示したいのですが
とても遅くてメモリの処理が問題だと思うのですが、、、
C#初心者でよくわかりません。ちなみにunsafe とかは使ってません。
よろしくお願いしますm(__)m

224 :デフォルトの名無しさん:2006/11/13(月) 22:23:43
>>223
VirtualModeは使ってる?直接突っ込むと死ねるよ。

225 :デフォルトの名無しさん:2006/11/14(火) 01:02:55
C#2.0のDataGridViewの非バインド形式を使えば、データセット不要だし
速度も遅くならないんだけどな。

226 :デフォルトの名無しさん:2006/11/14(火) 03:48:46
>>224 >>225
VirtualModeとか、DataGridView とかあるんですね。
ショックなことに使ってるのは1.1なので、使えないみたいですorz
でもレスありがとうございました。

227 :デフォルトの名無しさん:2006/11/14(火) 11:14:37
Visual C# 2005 ExpressEdtionを使用しています。

GetAppDirはどのUsingディレクティブに属してるかを調べる方法を教えて下さい。

228 :デフォルトの名無しさん:2006/11/14(火) 11:28:14
>>227
GetAppDirって何?
名前からするとメソッドっぽいが.NET Frameworkにはそんなのないぞ。

229 :デフォルトの名無しさん:2006/11/14(火) 14:06:06
using System.Windows.Forms;
string path = Application.StartupPath;

or

using System.IO;
using System.Reflection;
string path = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);

230 :227:2006/11/14(火) 14:44:26
すいません、メソッドでした。勘違いで御免なさい

231 :デフォルトの名無しさん:2006/11/15(水) 02:18:33
C#でP2Pソフトって作れるの?

232 :デフォルトの名無しさん:2006/11/15(水) 02:27:56
お前には無理だろうけど

233 :デフォルトの名無しさん:2006/11/15(水) 03:11:47
C#1.1のDataGridとSQLをやろうとしたけど、VS2005にしてしまったので
SQL Express 2005を入れてDataGridViewをする事にした。

234 :デフォルトの名無しさん:2006/11/15(水) 08:45:29
とあるIRCクライアントのマクロ機能でDLLが叩けるみたいなので、小物を書いてみたいんですけども、
CやCppの実行ファイル上(アンマネージドコード)から、C#で作ったマネージドDLLは叩けるのでしょうか?

235 :デフォルトの名無しさん:2006/11/15(水) 09:08:04
tlbexp

236 :デフォルトの名無しさん:2006/11/15(水) 09:32:58
>>235
うおおお。激しくありがとうです。

237 :デフォルトの名無しさん:2006/11/15(水) 20:06:05
ネットワークプログラミングで参考になる書籍とかないですか?

238 :デフォルトの名無しさん:2006/11/15(水) 20:59:30
つMSDN

239 :デフォルトの名無しさん:2006/11/15(水) 21:42:28
すいません、ユーザコントロール内のkeydownイベントをとりたいのですが
発生しません。
はりつけた側のフォームから何かしてあげないと
イベントは発生しないのでしょうか

240 :デフォルトの名無しさん:2006/11/15(水) 22:12:58
UserControl はキー入力を受け取らない。フォーカスも持たない。
その内部のコントロールのイベントを公開する事はあるだろうけど。

241 :デフォルトの名無しさん:2006/11/15(水) 22:45:02
>>240
(゚д゚)ハァ?

242 :デフォルトの名無しさん:2006/11/15(水) 23:30:50
>>240
え、そうなんですか?


243 :デフォルトの名無しさん:2006/11/15(水) 23:36:29
トンデモ基地外がいると聞いてすっ飛んで来ました。

244 :デフォルトの名無しさん:2006/11/15(水) 23:45:53
>>239
〜イベントがおきません……とかいう質問の場合、

 ・質問者が本当にタコでイベントコードを書いてない場合
 ・ちょっと前のKeyPreviewのような場合
 ・キーフォーカスがほかにある等の技術的問題の場合

などいろいろあって面倒だからコードあげないと答えが帰って来ないよ

245 :デフォルトの名無しさん:2006/11/16(木) 00:29:22
>>244
 ・質問者が本当にタコでイベントコードを書いてない場合
それはないです
 ・ちょっと前のKeyPreviewのような場合
ちがう気がします。
 ・キーフォーカスがほかにある等の技術的問題の場合
キーフォーカス!でもユーザコントロール内のコントロールにカーソルがある時に
ユーザコントロールのイベントをとりたいのですが



246 :デフォルトの名無しさん:2006/11/16(木) 00:56:15
>>245
ユーザーコントロール内のコントロールのKeyDownイベントハンドラでOnKeyDownは呼んでるの?

247 :デフォルトの名無しさん:2006/11/16(木) 10:35:41
C#で数値計算したいんだけど、
ブリーのライブラリってないでしょうか?


248 :デフォルトの名無しさん:2006/11/16(木) 12:03:38
鰤ー?

まあ、C# でかかれたものはなかなかないけど、
C とかのライブラリ拾ってきて、C++/CLR でラッパー買いて、
C# から利用とかできる。

249 :デフォルトの名無しさん:2006/11/16(木) 14:43:00
>>248
ありがとうございます
(素で打ち間違えてるwハズカシー)

C++でDLLつくってC#から関数を呼び出すことはできました
でも、引数の渡し方とかよくわかんない
噂に聞くマーシャルとかいうやつを使うんでしょうか?
ぐぐりまくってみます
では


250 :デフォルトの名無しさん:2006/11/16(木) 16:44:43
247です
C++/CLIってC#でつかってる変数、(List<>とか)引数でわたせるんですね
んで、C++/CLIであっち側の変数(double x[]とか)に変換してやれば
マーシャル(?)いらないんですね
これでなんとかできそうです
ありがとうございました


251 :デフォルトの名無しさん:2006/11/16(木) 22:14:46
>>246
onLeyDownよんでいません・・・
特別に何かしないと駄目なのでしょうか?

252 :デフォルトの名無しさん:2006/11/16(木) 22:45:44
>>250みたいな質問をする奴が書いたソフトウェアを使いたいひとっているのかな?



253 :デフォルトの名無しさん:2006/11/16(木) 23:15:45
>>251
中のコントロールにフォーカスがあるとユーザーコントロールのKeyDownイベントは自動では起きないから
コントロールのKeyDownイベントハンドラでthis.OnKeyDownを呼ばないと駄目

254 :デフォルトの名無しさん:2006/11/16(木) 23:19:38
>>252みたいな、250を質問と早とちりしてしまう奴が書いたソフトウェアを使いたいひとっているのかな?


255 :デフォルトの名無しさん:2006/11/16(木) 23:21:53
でもブリーはオモロイw
ありがたく使わせてもらう

256 :デフォルトの名無しさん:2006/11/17(金) 00:22:44
>>254
意味不明

257 :デフォルトの名無しさん:2006/11/17(金) 00:50:25
Queue をマルチスレッドで使用する場合に、 Framework 1.1 の頃だと、
private Queue q = new Queue();
private Queue synQ = Queue.Synchronized(q);
という方法で使用するというのが作法(?)だったと思います。

Framework 2.0 になって、ジェネリックが追加されたため、 Queue を
private Queue<string> q = new Queue<string>();
として使用しています。マルチスレッドでこの変数にアクセスするとき、
以前と同じように行おうと思ったのですが、
System.Collections.Generic.Queue
には Synchronized メソッドがありませんでした。以前と同じように行
うことはできないのでしょうか? lock を使用する方法しかないのかな
?と考えています。

こんな感じでしょうか?
lock (((System.Collections.ICollection)q).SyncRoot)
{
q.Enqueue("aiueo");

string s = q.Dequeue;
}
ちなみに
private Queue<string> synQ =
(Queue<string>)Queue.Synchronized((Queue)q);
はコンパイルエラーとなりました。
エラー 1 型 'System.Collections.Generic.Queue<string>' を型 'System.Collections.Queue' に変換できません。
エラー 2 型 'System.Collections.Queue' を型 'System.Collections.Generic.Queue<string>' に変換できません。
このジェネリックをマルチスレッドで扱うための手段をご存知の方いら
っしゃいましたらご教授願えませんでしょうか?よろしくお願いいたし
ます。

258 :デフォルトの名無しさん:2006/11/17(金) 01:20:19
>>257
ちゃんと自分で lock しろってことかね。

259 :デフォルトの名無しさん:2006/11/17(金) 07:32:04
>>257
QueueとQueue<t>は無関係だからキャストするのはさすがに無理。
自分でlockするしかないけど、数が多くて面倒なら、
Queue.SynchronizedQueueに相当するラッパクラスを書けばいい。

260 :デフォルトの名無しさん:2006/11/17(金) 13:33:56
C#の入門者用の演習問題がいっぱいあるサイト教えてください

261 :デフォルトの名無しさん:2006/11/17(金) 14:51:49
お聞きしたいんですが、
SystemInformation.MouseHoverTime
の値どうなってます?

10になってるんですが、みんなこうなんでしょうか。
速すぎて困ってるんですが

262 :デフォルトの名無しさん:2006/11/17(金) 16:24:15
>>257
これで十分

lock (q) {
 q.Enqueue("hoge");
}



263 :261:2006/11/17(金) 23:09:34
とりあえずtweakUIでなおしたけど、
SystemInformation.MouseHoverTime のデフォルト値っていくつなんだよぅ

264 :デフォルトの名無しさん:2006/11/17(金) 23:23:22
うちは400

265 :デフォルトの名無しさん:2006/11/17(金) 23:25:34
マウスドライバ依存のような気がするけど。

266 :デフォルトの名無しさん:2006/11/18(土) 00:59:09
namespace hoge
{
class foo{}
class bar{}
class foobar{}
}

上記のように名前空間hogeには3つのクラスfoo,bar,foobarがある場合
すべて1ファイルに書くのが普通?
それとも1ファイルに1クラスとして書くのが普通?


267 :デフォルトの名無しさん:2006/11/18(土) 01:01:26
好きにすればええ
名前空間程度ならアセンブリを超える事も良くある話

EventArgs 派生クラスとか列挙体寄せ集めとかは一つに纏める事が多いな

268 :デフォルトの名無しさん:2006/11/18(土) 01:06:47
好きにできるから聞いてるんでけど?
1ファイルに1クラスなんて決まってたら質問するわけ無いでしょ?

269 :デフォルトの名無しさん:2006/11/18(土) 01:23:35
クラスの、意味とか、関係性に、よるだろ、ハゲ。


270 :デフォルトの名無しさん:2006/11/18(土) 01:31:29
>>268
好きに出来るってことは、好きに出来るってことでは?
それらがどういうクラスで、それらがどういう関係で、今後どういう運用をしていくかとか
おまえがどういう設計をするかによって変わってくるってことだ。おまえにしか分からんことだよ。

271 :デフォルトの名無しさん:2006/11/18(土) 01:35:41
自由度も使う人間次第か・・・

272 :デフォルトの名無しさん:2006/11/18(土) 03:24:07
C#でテキストエディタを作るのは無謀ですかね?

273 :デフォルトの名無しさん:2006/11/18(土) 03:30:38
C#だからというより
テキストエディタを作るという事自体が
相当なもんですよ

274 :デフォルトの名無しさん:2006/11/18(土) 08:43:35
テキストボックス貼り付けるだけならどれでも一緒な気が。


275 :デフォルトの名無しさん:2006/11/18(土) 09:00:09
せめて RichTextBox にしとけ。

276 :デフォルトの名無しさん:2006/11/18(土) 11:04:51
まあ勉強にはなるだろ

フリーでも市販でも腐るほどでてるので
それらに無い機能が欲しいのか
マクロやPlug inで対応できないほどの機能で

277 :デフォルトの名無しさん:2006/11/18(土) 11:37:28
APIとunsafe使いまくらないと実用に耐えない気がする
だったらC++で(ry

278 :デフォルトの名無しさん:2006/11/18(土) 13:18:16
そもそも選択した場所しか色がつけられない時点でダメダメじゃん

279 :デフォルトの名無しさん:2006/11/18(土) 13:45:34
>>272
今やってる。

思ったよりレスポンスはいい。
行数もたいしたこと無い(テキストボックス代替部に限った話しでは、
Undoと細々したこと未対応で1300行程度。最終的にも2000行はいかないと思われ)。

一つレスポンスで注意したほうがいいのが、Font.Heightの取得は
結構レスポンスに響くので、ループ中なら別の変数に代入したほうがいい。

後は、フォント(とMeasureString)はよく勉強しとかないとはまるよ。

他に、SVG対応とMathMLの機能限定対応もやってるけど、C#ってよくできてることを実感してる。

280 :デフォルトの名無しさん:2006/11/18(土) 16:30:39
バーカ

281 :デフォルトの名無しさん:2006/11/18(土) 17:37:05
テキストエディタが簡単にできると思ってる奴のほうが
おかしいと思うが…


282 :デフォルトの名無しさん:2006/11/18(土) 18:08:55
昔 viクローンのエルビスか何かのソースを見たことがあるが、
全部見るのは辛いな。
emacsはもっとすごかったが、今考えるとオブジェクト指向だと、
もう少し楽になるんじゃないかな。

283 :デフォルトの名無しさん:2006/11/18(土) 18:14:17
emacsはelispインタープリタ。
コアな部分以外はけっこうelispで書かれていたりする。

284 :デフォルトの名無しさん:2006/11/18(土) 18:35:17
現在、超メジャー所のテキストエディタと勝負するならC++MFC/ATLの選択肢しかないだろう
.NETではおそらく勝負にならん。


285 :デフォルトの名無しさん:2006/11/18(土) 18:38:02
javaだけど、eclipseのソースも見られるはず。

286 :デフォルトの名無しさん:2006/11/18(土) 18:41:34
それでも WPF なら、WPF ならなんとかしてくれる……!

とも思えんよなぁ

287 :デフォルトの名無しさん:2006/11/18(土) 18:41:34
>>284
確かに!
正規表現のMatchの遅さも定評だしたなw
自前でC++で実装したほうが早かったのはマジびびった
さすがにBoostには勝てなかったが・・・

288 :デフォルトの名無しさん:2006/11/18(土) 18:47:16
Eclipseは放置?

289 :デフォルトの名無しさん:2006/11/18(土) 19:11:14
そいえば前になんとかっていう.NETなターミナルエミュレータを試した事あるけど、
色々高機能で良さげなんだけど、中でエディタ使ってコードとか書き始めたら
反応がタイプに全然ついて来なかったから泣く泣く捨てた。


290 :デフォルトの名無しさん:2006/11/18(土) 19:17:42
エディタ作るなら
C++MFC/ATL  > JAVA > .net
でおk?

291 :デフォルトの名無しさん:2006/11/18(土) 19:41:18
Javaとか.NETとか、メモリ食いまくり、起動遅すぎでダメダメ

292 :デフォルトの名無しさん:2006/11/18(土) 19:41:23
初心者ですが質問させていただきます。

pictureBoxにDrawLine関数で描画をさせてpictureBoxから
はみ出した部分をスクロールバーで表示できるようにしたのですが、
バーをスクロールさせると隠れている部分の画像が消えてしまいます。
どうすれば正常に描画結果を表示させることができるでしょうか?ご教授ください。

293 :デフォルトの名無しさん:2006/11/18(土) 19:54:23
PictureBox の Graphics に直接描くんじゃなくて、
PictureBox の Image に自前で用意した Bitmap を設定してその Bitmap の Graphics に描画するようにすれ。

294 :デフォルトの名無しさん:2006/11/18(土) 20:11:54
>>293
ありがとうございました。
早速参考にさせていただきます。

295 :デフォルトの名無しさん:2006/11/18(土) 23:43:07
.NETで書いたアプリってソースが丸見えなのはどう考える?
DF使ったってやっぱり覗けるし・・・
趣味でプログラム書いてるようなヲタクは答えなくて結構です。

296 :デフォルトの名無しさん:2006/11/18(土) 23:45:20
* 覗かれても問題ないようにしておく。
* .NETは使わない。

297 :デフォルトの名無しさん:2006/11/18(土) 23:45:49
プロジェクトマネージャに聞け。

298 :デフォルトの名無しさん:2006/11/18(土) 23:48:13
趣味でプログラムかいてるようなヲタクだからプロジェクトマネージャーなんていないのだろう

299 :デフォルトの名無しさん:2006/11/18(土) 23:58:03
VS2005自身、.NETで作られているようだけど。
EXE本体はソースが覗けないんだよな。あれはどうやってるんだ?

300 :デフォルトの名無しさん:2006/11/19(日) 00:03:19
VS2005はVC+++MFC6で作られてるよ

301 :デフォルトの名無しさん:2006/11/19(日) 00:04:20
じゃあ、VC+++MFC6は何で作られている?

302 :デフォルトの名無しさん:2006/11/19(日) 00:05:55
ウンコンパイラで作られています。

303 :デフォルトの名無しさん:2006/11/19(日) 00:09:15
ゲイツが機械語を手打ちしてる

304 :デフォルトの名無しさん:2006/11/19(日) 00:11:27
>>300
VC+++MFC6はVC+++MFC6で作られてるよ

305 :デフォルトの名無しさん:2006/11/19(日) 03:15:00
>>295
バイナリに適当に無駄なコードを挿入するソフトを使う


存在するかどうかは知らない

306 :デフォルトの名無しさん:2006/11/19(日) 04:40:41
WindowsアプリケーションをC#で作ろうとしています。
アプリケーション内で使用するさまざまなデータはどこに配置していますか?

Formのメンバとして宣言するのが普通ですか?

307 :デフォルトの名無しさん:2006/11/19(日) 08:00:17
カテゴリ別に分けるべきだな

308 :デフォルトの名無しさん:2006/11/19(日) 09:07:47
具体的は?

309 :デフォルトの名無しさん:2006/11/19(日) 09:32:51
それくらい自分で考えろよ




┐(´ー`)┌

310 :デフォルトの名無しさん:2006/11/19(日) 09:39:18
だね

311 :デフォルトの名無しさん:2006/11/19(日) 09:40:16
>>266 = >>306か?
普通なんてないんだよ。
おまえの設計次第。

312 :デフォルトの名無しさん:2006/11/19(日) 12:08:47
>>306
MVCのMをどこに置くかって話だろ。

俺は、ModelのRootになるクラスを作って、Mainでそのインスタンスを作成し、View (Form)と結合させてる。
Model model = new Model();
MyForm form = new MyForm();
form.Model = model;
Application.Run(form);
みたいな感じ。


313 :デフォルトの名無しさん:2006/11/19(日) 13:16:12
>>306
XML(DOM)が良

データ管理がすごく楽(データのバージョンもあんまり気にしなくていいし)。
オブジェクト指向にも合致した作りが簡単。
やってみる価値大。

314 :デフォルトの名無しさん:2006/11/19(日) 13:26:21
かみ合ってない

315 :デフォルトの名無しさん:2006/11/19(日) 13:37:10
素と見た


316 :デフォルトの名無しさん:2006/11/19(日) 14:33:45
天然?

317 :デフォルトの名無しさん:2006/11/19(日) 15:31:49
>>312
おいおい、そんなんじゃViewがModelのこと知りすぎてなんの意味も無いじゃんw

単なるマスタベ?

318 :デフォルトの名無しさん:2006/11/19(日) 17:48:59
>>317
釣りはやめときましょう。
あまりおもしろくありませんよ。

319 :デフォルトの名無しさん:2006/11/19(日) 17:53:07
>>318
>>317じゃないけど>>312は酷いだろ

320 :デフォルトの名無しさん:2006/11/19(日) 18:14:57
>>304
VC+++MFC6は何で作られてますか?

321 :デフォルトの名無しさん:2006/11/19(日) 18:16:54
そういえば、今のC言語コンパイラってC言語で作られているんだっけ?

322 :デフォルトの名無しさん:2006/11/19(日) 18:19:59
コンパイラは自分をコンパイルできて一人前っていう感じ。

323 :デフォルトの名無しさん:2006/11/19(日) 19:51:45
自分で自分を書けるのか?
でも何もない素の状態なら
ハンドアセンブラで書くしかねえんじゃねえの?

324 :デフォルトの名無しさん:2006/11/19(日) 20:07:52
>>323
ハンドアセンブルで簡単なアセンブラ書いて、
それで BASIC インタプリタ書いて、
それで簡単な言語コンパイラ書いて・・・
って昔はやってた。
今は、優秀な C コンパイラがあるんだからそれで次のコンパイラ書いたり、
YACC とかのコンパイラ作成用ツール(コンパイラコンパイラ)がある。

325 :デフォルトの名無しさん:2006/11/19(日) 20:08:11
C#からC#がコンパイルできるのと同じ理屈

326 :デフォルトの名無しさん:2006/11/19(日) 20:08:19
質問失礼します。
listViewの項目をプログラム側から選択させたいのですが、どうすれば良いのでしょうか?

327 :デフォルトの名無しさん:2006/11/19(日) 20:13:01
>>325
それはちょっと違うんじゃないかと思った。

328 :デフォルトの名無しさん:2006/11/19(日) 20:22:42
>>326
SelectedItems とか SelectedIndices とかあるっしょ

329 :デフォルトの名無しさん:2006/11/19(日) 20:57:23
SelectedIndicesってなんでぃすか?

330 :デフォルトの名無しさん:2006/11/19(日) 20:59:19
>>326
ListViewItem.Selected

331 :デフォルトの名無しさん:2006/11/19(日) 21:08:49
>>329
ListView.SelectedIndicesだろうが。

332 :デフォルトの名無しさん:2006/11/19(日) 21:25:04
Data
Datas
Index
Indexes
だろ
常識だろ。


333 :デフォルトの名無しさん:2006/11/19(日) 21:26:09
ちょ待

334 :デフォルトの名無しさん:2006/11/19(日) 21:27:04
>>332
回ってきたソースにそういう変数名があったら泣けるよな。

335 :デフォルトの名無しさん:2006/11/19(日) 21:28:11
>>332ネタか?

336 :デフォルトの名無しさん:2006/11/19(日) 21:28:57
>>335
dataを持ちだしてるところからネタだと判断できると思う。

337 :デフォルトの名無しさん:2006/11/19(日) 21:29:24
DirectX Media ObjectをC#から触ることはできますか?

338 :デフォルトの名無しさん:2006/11/19(日) 21:29:28
Serch
ってメソッドがあったんだ……。

339 :デフォルトの名無しさん:2006/11/19(日) 21:30:47
>>338
ごめんなさい。
一回スペルミスったまま納品しちゃいました。

340 :デフォルトの名無しさん:2006/11/19(日) 21:50:40
Serch()
Saati()
Kensaku()
検索()

どれがいい?

341 :デフォルトの名無しさん:2006/11/19(日) 22:01:24
.NET でなら一番下。

342 :デフォルトの名無しさん:2006/11/19(日) 22:21:18
多言語への移植が・・・まあ考えないか。省略形は昔のソースだとよくあったな。
つづり間違いと区別付きにくいが。Serchは絶対無いが

343 :デフォルトの名無しさん:2006/11/19(日) 23:16:59
TextBoxとListViewをFormに配置しました。
両方ともDockプロパティをTopに設定したするとListViewの方が上に配置されてしまいます。
TextBoxの方が上に配置されるようにするにはどうすればいいのですか?

344 :デフォルトの名無しさん:2006/11/19(日) 23:25:11
>>343
ListViewを切り取って貼り付け

345 :デフォルトの名無しさん:2006/11/19(日) 23:29:13
>>343
ZOrder変更

346 :デフォルトの名無しさん:2006/11/19(日) 23:30:28
だれでも命名には苦労するね。

「もう一度、UNIXを作り直すとしたら?」

デニス・リッチー曰く
「creat()にeをつけます」


347 :デフォルトの名無しさん:2006/11/19(日) 23:38:54
UNIXなんて30年前だからすごいのであって
あんなcharベースのOSなんて今なら誰だって書ける

linxなんてその典型



348 :デフォルトの名無しさん:2006/11/19(日) 23:41:28
プログラマの作ってみたいもの

自作OS
自作コンパイラ
自作言語

349 :デフォルトの名無しさん:2006/11/19(日) 23:42:14
>>347
何が言いたいのかよくわからんなあ。

現代の技術では容易く作れるってことが、もともとの発明の価値を下げるわけでもないし。

350 :326:2006/11/19(日) 23:46:36
>>330
ありがとうございました。
お陰さまで解決しました。

351 :デフォルトの名無しさん:2006/11/19(日) 23:47:51
Plan9でも使っててください…

352 :デフォルトの名無しさん:2006/11/19(日) 23:57:49
>>323
大体は最初は古いバージョンで新しいバージョンのソースをコンパイルする。
そして今度はコンパイルで出来たものでまた新しいバージョンのソースをコンパイルする。


pascalは昔自分で自分のコンパイラ生成が出来なかったためCより劣っているとされた。
後に仕様を追加してコンパイルできるようになった。

353 :デフォルトの名無しさん:2006/11/20(月) 00:04:53
wikipediaの
『本物のプログラマーはパスカルを使わない』

で本物のプログラマは…との賜ってる人は
今で言うとC++MFC/ATLじゃないと…といってる人だな。

354 :デフォルトの名無しさん:2006/11/20(月) 02:48:18
>>352
gccのビルドはまさにそんな手順だよね。

355 :323:2006/11/20(月) 12:17:03
>>324
YACCをググってみたけど良くわからんですねorz
高級言語ばっかり使ってるから……
C#+.NETなんて超高級だよなあ

>>352
それはわかるんですけど、その最初のバージョンはどうやって
つくるのかがイメージ出来ないんです

例えば今全く新しいCPU向けに gccを移植したいとすると
x86用のgccから新CPU用のgcc(バイナリ)が
つくれるってことですか
アセンブラでシコシコ書かなくても?

c#とは関係ない話題ですが……

356 :デフォルトの名無しさん:2006/11/20(月) 12:35:59
>>355
yaccは文法定義から構文解析するCの関数を吐くツールだよ。
新しいCPUでは最初にgccのコード生成部分だけ置き換えてクロスコンパイラを作るんだよ。
コンパイラは必ずしもターゲット上で動かす必要はないだろ。

357 :323:2006/11/20(月) 14:27:17
>>356
なるほど ! 
ようやくイメージがつかめました

358 :デフォルトの名無しさん:2006/11/21(火) 00:11:33
GZipStreamを使ってファイルを圧縮してみましたが
すべてのファイルが容量が増えていますがなぜどしょうか。

359 :デフォルトの名無しさん:2006/11/21(火) 00:43:08
何を圧縮したの?

GZipStreamはじめて使ってみたけど、圧縮率悪いね。
中身のファイル名に変な拡張子つくし

360 :デフォルトの名無しさん:2006/11/21(火) 01:00:56
1KBのテキストファイルや600KB位のDLLや10MBほどのWAVファイルとかです。
コードがおかしいのかと思ってMSDNのサンプルコードそのまま使っても
2/3くらい元のファイルより容量が増えてます。なんでだろ・・

361 :デフォルトの名無しさん:2006/11/21(火) 01:58:38
どうやら単純に圧縮率が低いだけみたい。
冗長なファイル("a" x 16400000)を圧縮したら158275バイトになったよ。

362 :デフォルトの名無しさん:2006/11/21(火) 04:44:22
gzipするならtarと組み合わせなきゃ

363 :デフォルトの名無しさん:2006/11/21(火) 10:26:34
ばかはっけん

364 :デフォルトの名無しさん:2006/11/21(火) 19:26:58
昨日からC#始めました。
デフォルトではDebugモードになってるらしいですが
Releaseモードにはどうやって切り替えるんですか?
それらしい設定が見当たらないよー(ノД`)
VC#2005Expressです。

365 :デフォルトの名無しさん:2006/11/21(火) 19:44:01
あちこちいじってみなよ

366 :デフォルトの名無しさん:2006/11/21(火) 19:52:21
>>364
標準ツールバーのソリューション構成ボックス

367 :デフォルトの名無しさん:2006/11/21(火) 20:41:33
Expressは普通にビルドするとリリース、デバッガ起動時はデバッグでビルドされる。

368 :デフォルトの名無しさん:2006/11/21(火) 21:19:20

      ,一-、
     / ̄ l |   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    ■■-っ < んなーこたーない
    ´∀`/    \__________
   __/|Y/\
 Ё|__ | /  |
     | У  |

369 :デフォルトの名無しさん:2006/11/21(火) 21:41:51
いや、ソリューション構成なんかねえんだよ

370 :デフォルトの名無しさん:2006/11/21(火) 21:48:48
昨日から始めたらまだリリースする必要ねえよ

371 :デフォルトの名無しさん:2006/11/21(火) 21:50:02
>>369
あるよ?


372 :デフォルトの名無しさん:2006/11/21(火) 21:52:25
>>364
プロジェクト→プロパティ→ビルド→出力パス

373 :デフォルトの名無しさん:2006/11/21(火) 21:55:38
ツール>オプション>全ての設定を表示
>プロジェクトおよびソリューション>ビルド構成の詳細を表示

374 :364:2006/11/21(火) 23:47:54
できました。
教えてくれた方ありがとうございます。
因みに>>369は俺じゃないです。

375 :デフォルトの名無しさん:2006/11/22(水) 15:29:02
質問です。
フォーム上の色を取得する関数って有りますでしょうか?
例えば、フォームの右半分が赤色で左半分が青色だったとして、
色を取得して、青色だったら何々、赤色だったら何々と処理を分けたいのですけれども・・・

376 :デフォルトの名無しさん:2006/11/22(水) 15:46:11
その色は誰が塗ってんの?

377 :デフォルトの名無しさん:2006/11/22(水) 16:36:00
>>376
自分です。
例えば、青色の線のところだけ動く亀みたいなプログラムを組む場合、
フォーム上の青色のところだけ取得したいんです。

378 :デフォルトの名無しさん:2006/11/22(水) 16:38:33
画面の色を取得するより
塗った領域を保存しておいた方がいいんじゃね?

379 :デフォルトの名無しさん:2006/11/22(水) 16:46:06
>>377
例えば、亀さんが動くコースをデータとして持っておいて、定期的に:
1、そのデータに従ってコースを描画する。
2、亀さんの現在位置に亀さんを描画
みたいなことをする。

ダブルバッファリングするなり、必要最小限の位置を描きかえるなりしないと
フリッカーが出るよ。

380 :デフォルトの名無しさん:2006/11/22(水) 16:49:20
領域を保存とはどういう意味でしょうか?
塗った領域を保存すると、例えばフォームが黄色で中に青い円が書いてある場合、
青い円の上だけ亀が動くプログラムが作れるのでしょうか?

381 :デフォルトの名無しさん:2006/11/22(水) 16:51:03
>>380
円の座標と半径を覚えておけばいいだけだろうw

382 :デフォルトの名無しさん:2006/11/22(水) 16:51:48
決められたコース上を動かすのが重要なんじゃなくて、画像を認識することが重要なの?

383 :デフォルトの名無しさん:2006/11/22(水) 17:11:35
>>377
それでコースはどこに描いてるんだよ。

384 :デフォルトの名無しさん:2006/11/22(水) 17:14:42
フォームにBitmapを貼り付けると言う条件付きで
そのBitmapの色ならGetPixelで取得可能


385 :デフォルトの名無しさん:2006/11/22(水) 17:35:16
Win32APIならフォームのDCハンドル取ってGetPixelしたもんだが。

Conterol.CreateGraphicsでGraphicsを作って、それをBitmap(Int32, Int32, Graphics)に食わせてGetPixelすりゃいいんじゃなかろうか。

386 :デフォルトの名無しさん:2006/11/22(水) 19:48:36
.NET 2.0 の SerialPort クラスを使って、常に 232C から流れてくるデータを表示するだけの
ソフトを作っています。
Start ボタンを押すと、受信開始、Stop で受信終了という単純なものです。

で、serialPort_DataReceived イベントメソッドを使用して受信は問題なく行えるように
なりましたが、データ受信中 ( 表示中 ) は Stop ボタンを押しても Button_Click
イベントが起動しません。
232C の送信を止めると、データ受信も終わり Stop ボタンも効くようになります。

serialPort_DataReceived イベントが発生し続けるので、Button_Click イベントに
割り込みが行かないようです。
Button_Click を効くようにするには、何かコツがあるのでしょうか?



387 :デフォルトの名無しさん:2006/11/22(水) 19:57:53
SerialPortクラスって使ったことないけど、通信はちゃんと別スレッドでやってんの?

388 :デフォルトの名無しさん:2006/11/22(水) 20:00:08
>>387
すんません。分かりました。テキストボックスをスクロールさせるために、TextChanged イベントメソッドの中で

this.Text.SelectionStart = this.Text.Text.Length;
this.Text.Focus();
this.Text.ScrollToCaret();

としていたため、ボタンにフォーカスが行ってなかったようです。

this.Text.SelectionStart = this.Text.Text.Length;
this.Text.ScrollToCaret();

に変更したら問題がなくなりました。

389 :デフォルトの名無しさん:2006/11/22(水) 20:10:44
すんません、教えて下さい

TEXTBOXとかに入力された数値ってstring型(object)になりますよね。
これをdouble型にキャストするのってどうやるの?

390 :デフォルトの名無しさん:2006/11/22(水) 20:11:53
double.Parse()

391 :デフォルトの名無しさん:2006/11/22(水) 20:14:25
>>390
早いなー!!
ありがとうございました。

もしよかったらもう少しおしえて下さい
string hoge = textbox1.text;

みたいには使えないんですよね?

いや、いいんですよ。罵倒しても

392 :デフォルトの名無しさん:2006/11/22(水) 20:17:23
なんでやってみないの?

393 :デフォルトの名無しさん:2006/11/22(水) 20:17:54
>>389
double.TryParse()

394 :デフォルトの名無しさん:2006/11/22(水) 20:20:07
>>392
ごめんなさい。家のPCではVSが重くてまともに動かないんですよ(言い訳)
>>393
重ね重ね感謝します。
ありがとうございました

395 :394:2006/11/22(水) 20:54:11
private void button1_Click(object sender, EventArgs e)
{
string v = textBox1.Text;
double.TryParse(v);
MessageBox.Show(v);
}

じゃないんですよね。引数の使い方がわかりません。

396 :デフォルトの名無しさん:2006/11/22(水) 20:55:15
>>395
何がしたいんだ?

397 :デフォルトの名無しさん:2006/11/22(水) 20:56:39
>>396
textboxに入力された数値に係数を掛けたいんです・・・・
あと数値かどうかの判定とかも

398 :デフォルトの名無しさん:2006/11/22(水) 20:56:40
>>395
センスなさ杉。

MSDNライブラリを百遍ほど読んで来い。

399 :デフォルトの名無しさん:2006/11/22(水) 20:57:15
こうか?

string v = textBox1.Text;
double d;
if (double.TryParse(v, out d)) {
MessageBox("double にキャストした値は" + d.ToString());
}

400 :デフォルトの名無しさん:2006/11/22(水) 20:57:30
string v = textBox1.Text;
double d;
if(double.TryParse(v, out d)){
MessageBox.Show(d);
}else{
MessageBox.Show("パーズできねえ");
}

401 :デフォルトの名無しさん:2006/11/22(水) 21:03:46
double d = double.Parse(textBox1.Text)


402 :デフォルトの名無しさん:2006/11/22(水) 21:12:13
try{
Double d = Double.Parse(textBox1.Text);
MessageBox.Show(d.ToString());
}
catch{
MessageBox.Show("数値でない");
}

403 :デフォルトの名無しさん:2006/11/22(水) 21:14:57
漏れはエラーには例外使う方がこざっぱりしてて好きだな。
フレームワークも何かつうと例外投げてくるし。

404 :デフォルトの名無しさん:2006/11/22(水) 21:16:24
>>399
>>400
>>401
>>402
ありがとうございましたぁっ!!!!!!!!!

明日会社で早速使わせてもらいます!!

では失礼しました

405 :デフォルトの名無しさん:2006/11/22(水) 21:17:39
>>400
パーズw

406 :デフォルトの名無しさん:2006/11/22(水) 21:19:39
>>405
parseの発音は[-s]でも[-z]でもかまわんよ。

407 :デフォルトの名無しさん:2006/11/22(水) 21:22:55
うむ

408 :デフォルトの名無しさん:2006/11/22(水) 21:23:19
こんなレベルのが会社…!?
一人のニートが今戦慄を憶えた。

409 :デフォルトの名無しさん:2006/11/22(水) 21:25:55
職業プログラマなんて大半がやばい人ばっかだからw

410 :デフォルトの名無しさん:2006/11/22(水) 21:29:17
センスないプログラマは若いうちに辞めて他の仕事探したほうがいいと思う。

411 :デフォルトの名無しさん:2006/11/22(水) 21:48:33
多分、職業プログラマじゃないだろ。
意外とC++使いとかw

412 :デフォルトの名無しさん:2006/11/22(水) 22:26:43
PowerShell

413 :デフォルトの名無しさん:2006/11/22(水) 22:27:14
つかう?↑



414 :デフォルトの名無しさん:2006/11/22(水) 22:38:18
>string v = textBox1.Text;
MFC使いには絶対に思い浮かばない発想。

415 :デフォルトの名無しさん:2006/11/22(水) 23:01:59
>>414
その行だけなら、正常な頭をもつ C# 学習者なら誰が
思いついてもおかしくないような気がしなくもないけど・・・

MFC 使いだった人はC#でも textBox1.GetText(str) とか書くの?
コンパイル通る?

416 :デフォルトの名無しさん:2006/11/22(水) 23:56:52
そんなことしない、メッセージをポストします。

417 :デフォルトの名無しさん:2006/11/23(木) 00:04:12
textBox1.GetText(str)
むう?

418 :デフォルトの名無しさん:2006/11/23(木) 00:13:38
「ポストします」って日本語おかしくね?

419 :デフォルトの名無しさん:2006/11/23(木) 00:14:45
>>418
だってなんちゃってだもん

420 :デフォルトの名無しさん:2006/11/23(木) 00:18:30
(;^3^)

421 :デフォルトの名無しさん:2006/11/23(木) 06:24:25
>>360
GZipStreamとDeflateStreamで圧縮するときはBufferedStreamなどでバッファリングしないと圧縮率が悪いようだ。
StreamWriterはそれ自身がバッファリングしてるからいいがBinaryWriterやらTextWriterを使った場合は必要となる。
サンプルは独自にbyte[]でバッファリングをしているようだ。
ただ既に圧縮済みのデータやランダムなデータはそれでも大きくなってしまう。

422 :デフォルトの名無しさん:2006/11/23(木) 08:59:42
>>384,385
回答大変有難うございます。
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
Bitmap bitmap = null;
bitmap = new Bitmap(@"C:\backcolor.jpg");
pictureBox1.Image = bitmap;
int sizeX = bitmap.Width;
int sizeY = bitmap.Height;
for (int Y = 0; Y < sizeY; Y++)
{
for (int X = 0; X < sizeX; X++)
{
int P = bitmap.GetPixel(X, Y).ToArgb() ;
string s = P.ToString("X");
textBox1.Text += (s);
}
      }
}
見たいな感じで、画像の色が何色か文字列に表示しようとしているのですが、
textBox1 = {Text = ネイティブ フレームが呼び出し履歴の最初にあるため、式を評価できません}
とでて、文字を表示できません。
どなたか、ヒントをいただけないでしょうか?
変数にはs"FF0000FE"string
とうまく代入されているみたいなのですが・・・


423 :デフォルトの名無しさん:2006/11/23(木) 09:52:36

>>386 で書き込みしたものです。
あれから色々と試しているのですが、serialPort_DataReceived で受信をしている途中で
stop を掛ける( serialPort_DataReceived イベントメソッドのアンバインド、シリアル
ポートのクローズ ) をすると、時々とまってしまいます。

例外が出るわけではなく、ブロック ( GUI の表示がとまる ) してしまいます。
問題なく stop がかかり GUI も普通に表示されるときもありますが、時々とまります。

このソフトを動かしているマシンが遅く、他の処理が始まるとこの止まってしまうのが
顕著になります。

serialPort_DataReceived が複数呼ばれ、処理が終わらないうちに stop を掛けると
止まってしまうようです。

どうすれば良いでしょうか。


424 :デフォルトの名無しさん:2006/11/23(木) 10:30:38
>>422
う〜ん。
たぶんだけど、textBox1.Textってstringそのものじゃなく、
プロパティでしょ。だから”+=”がうまくいかないんじゃないの?
一旦ワークのストリング変数で”+=”を行ってからtextBox1.Textに代入
すればうまくいくような気もするが。

あと、sizeX,sizeYがどの程度か判らないけど、レスポンスを気にするのなら、
StringBuilderを使った方がいいカモね。

425 :デフォルトの名無しさん:2006/11/23(木) 11:17:06
>>422
50x50のjpgで試したら、時間はかかったけど問題なく表示されたよ。

426 :デフォルトの名無しさん:2006/11/23(木) 11:50:43
>>423
>>387


427 :デフォルトの名無しさん:2006/11/23(木) 12:12:33
>>425
まあ、TextBoxのTextを内部でどのように保持しているかだけど、
エディタとしての機能を考えると、改行毎のストリング列に変換してるぽいから、
get,setするたびにすごい変換がかかるし、
ストリングそのものが遅いって話しもあるしね。
時間がかかるのは仕方がない。

428 :デフォルトの名無しさん:2006/11/23(木) 12:20:56
せめてループの外で設定しろって・・・

429 :デフォルトの名無しさん:2006/11/23(木) 12:31:07
>>422
もうちょっと詳しく書けよ。
俺も試したけど、どう問題なのか分からんかった。
どっかから例外が飛んでくるのか?

430 :デフォルトの名無しさん:2006/11/23(木) 12:35:58
そりゃループの中で2回もP/Invokeしたら遅くなるのは当然。
しかし、遅くなるだけで完全に動かなくなるわけじゃないだろ。

431 :デフォルトの名無しさん:2006/11/23(木) 12:49:12
GetPixelもGDI+をP/Invokeするからループの外に出すべきだな。
LockBitsで先頭ポインタを取得してMarshal.Copyか。

432 :デフォルトの名無しさん:2006/11/23(木) 13:21:25
自分ならLockBitsしたらそのままポインタたぐって中を覗くけど。

433 :422:2006/11/23(木) 13:39:12
すいません。寝てました。
ウワーン、皆さん本当にやさしいレスありがとうございます。
どんなプログラム書きたいかというと、フォームの色を取得して青色のところだけ
絵が進むみたいなプログラムなんです。
色を取得して、16進数に直してwhile(色=0x青)なら、pictureBoxが動くみたいなのを
想像しています。
で、Cはそこそこ分かるんですが、C#は今回初めて使うんです。
とりあえず、トライアンドエラーで覚えていこうと。
IDEはVisual C# Express EditionでマシンはThink Pad s30です。
で、何がいけなかったかというとマシンが遅すぎなのと、背景が500*500だったので
表示に時間がかかりすぎて自分がコンパイルに失敗したと勘違いしたことです。
50*50ならいけました。
なんとかこれを高速化すること出来ないでしょうか?
かなり正解に近づきつつあるとおもうので。

434 :デフォルトの名無しさん:2006/11/23(木) 13:43:10
>>433
>>432
GetPixel/SetPixel は全体を走査するには重すぎる

435 :デフォルトの名無しさん:2006/11/23(木) 14:43:19
>>433
ほい、直接じゃないが、やりたいことのサンプルになると思うよ(スピードアップ)。
http://www.codeproject.com/cs/media/csharpgraphicfilters11.asp

436 :435:2006/11/23(木) 15:27:59
>>433
ごめん勘違いしてるかな?(高速化)

435の高速化は、画面走査に効くけど、テキストボックスには効かない。
テキストボックスに関してなら、StringBuilderでテキスト操作後
テキストボックスに入れればよい。

それから、レスポンスを測りたかったらStopwatchクラスを使うとよい。
StopwatchもStringBuilderも簡単だからヘルプを見てね。

437 :デフォルトの名無しさん:2006/11/23(木) 16:14:24
>>435
テキストボックスも高速化しなきゃいけないのですか?
Bitmap bitmap = null;
bitmap = new Bitmap(@"C:\hoge.jpg");
pictureBox1.Image = bitmap;
int sizeX = bitmap.Width;
int sizeY = bitmap.Height;
BitmapData bitmapData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height),
ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
int stride = bitmapData.Stride;
System.IntPtr Scan0 = bitmapData.Scan0;
unsafe
{
byte* p = (byte*)(void*)Scan0;
byte green;
byte red;
byte blue;
for (int Y = 0; Y < sizeY; Y++)
{
for (int X = 0; X < sizeX; X++)
{
green = p[0];
blue = p[1];
red = p[2];
p += 3;
string s = green.ToString("X");
textBox1.Text += (s);


438 :デフォルトの名無しさん:2006/11/23(木) 16:15:07
}
}
}
bitmap.UnlockBits(bitmapData);
}
とりあえず、
RGBのGだけ表示させようと思うんですけれど(うまくいけば後で連結させればよいかなと思って)
文法的に大丈夫でしょうか?
参考を例に適当にでっち上げてみたんですけれど・・・
何をどうすればよいのか分け分からなくなってきました・・・


439 :デフォルトの名無しさん:2006/11/23(木) 16:18:46
>>438
>文法的に大丈夫でしょうか?

コンパイラに聞けよボケ

440 :デフォルトの名無しさん:2006/11/23(木) 16:19:01
まあ 5x3 ぐらいの小さな画像で GetPixel と比較しながら試してみると良いさ。

441 :デフォルトの名無しさん:2006/11/23(木) 16:21:43
>int stride = bitmapData.Stride;


442 :デフォルトの名無しさん:2006/11/23(木) 17:09:34
>>437
さしあたって、RGBの順番が違ってそうだね。
と、>>441が指摘してるように、yのループでのオフセットを進めないとね(参考例と違ってる)。

>テキストボックスも高速化しなきゃいけないのですか?
う〜ん、それだと、絶対テキストボックスへのテキストの代入がネックになるから
高速化は期待できない。
テキストボックスに代入して何がしたいのかがわからない。
必要?それともデバッグ用?

デバッグ用と仮定しての話し。
下の文は外すべきでしょ。
string s = green.ToString("X");
textBox1.Text += (s);

そうでなければ、さしあたり、
string s+ = green.ToString("X");
にして、
textBox1.Text = (s);
をループの外に出したら。

出来れば、「string s+ = green.ToString("X");」をStringBuilderにした方がいいと思うけど。

ちなみに、StringBuilderなら、newして、AppendしてToStringすればいいだけなんだけど。
レスポンスは、テキストボックスへのテキストの代入、次にstringへの代入、StringBuilderの
順で速くなるから、これだけのループなら通常StringBuilderを使うと思うけど。
デバッグ用にしても、StringBuilderを使う。

443 :デフォルトの名無しさん:2006/11/23(木) 17:29:47
>>437
もうちょっと、フォローしておくと、
>>422が遅い原因が2つ考えられる。
 ・画面全域をGetPixelするにはつらいこと
 ・テキストボックスへの直接のテキストの代入。

自分のカレント位置が有って、その周囲8ポイント程度を見るのなら、
GetPixcelでOK。画面全域チェックならサンプルの方法を行う必要がある。
(以前自分が、写真の鮮鋭かを行ったときサンプルの手法でレスポンスが、
コンマ数秒程度で出来た。)

テキストボックスは、上にも書いたけど単純なstringの代入と思わない方がよい。
プロパティ(内部で複雑な処理が可能)のため、代入以外処理を行っている可能性大。
このため、非常にレスポンスが遅くなる可能性が有る(これは未チェック)。
ただし、数十万回のループなら、stringへの代入でも遅いはずだから、
スピードアップ用に用意された、StringBuilderを使うべき。


444 :デフォルトの名無しさん:2006/11/23(木) 18:29:11
あたたかいお返事本当に有難うございます。少しだけ進歩しました。
お返事いっぱい頂いたのですが、
文字列を表示するのが本来の目的でなく、背景色が何色か調べるのが目的なので
unsafe
{
int* p = (int*)(void*)Scan0;
int color;
  for (int Y = 0; Y < sizeY; Y++)
{
for (int X = 0; X < sizeX; X++)
{
color = p[0];
string s = color.ToString("x");
int Compare = string.Compare(s, "fe0000fe");
if (Compare == 0)
{
MessageBox.Show("背景は青です");
}
p += 4;
textBox1.Text += (s);
}
これで、等しいが出るようになりました。
あとはifをwhileに変えてtrueの間だけpictureboxを動かせば良さそうです。
ここスレの皆様のご恩はわすれません。
どうもありがとうございました!

445 :デフォルトの名無しさん:2006/11/23(木) 18:33:34
http://www.codeproject.com/cs/miscctrl/alphablendtextbox.asp

ここにあるコントロールのインストール法が分かりません。ツールバーってどこですか?
誰か教えてください。

To use this control from the Visual Studio designer,
simply right click on the tool bar and choose "Add/Remove Items" and then click "
Browse" and browse to the AlphaBlendTextBox.dll file.
After doing this, the AlphaBlendTextBox control should appear in your tool bar (under "My User Controls" if you have VS2003). Now you can drag the control to a form and use it just like the original TextBox control.
The control has a new property named BackAlpha that will allow you to set the control's background alphablend value.
The range is 0 for transparent, 255 for opaque, or in between for translucent.



446 :デフォルトの名無しさん:2006/11/23(木) 18:35:26
>>445
tool boxの間違いじゃね?

447 :デフォルトの名無しさん:2006/11/23(木) 18:49:59
>>446
できました。ありがとうございます。
ツールボックス上でアイテムの選択というのを押したらできました。


448 :デフォルトの名無しさん:2006/11/23(木) 19:05:50
>>444
↓あぶなくないか?
p += 4;

Strideは4バイト境界用のパディングぽいから、送るのは
4未満のどの値が入るか分からないと思うけど。
サンプル通りにつくりたほうがよい。

多分、バグってると思われ。



449 :デフォルトの名無しさん:2006/11/23(木) 19:15:48
第一、intは4オクテットだから深度3なら隣のピクセルの頭まで食ってる。

450 :デフォルトの名無しさん:2006/11/23(木) 19:28:09
>>445
この程度のコントロールなら自前で用意したほうが早い


451 :デフォルトの名無しさん:2006/11/23(木) 20:22:52
>>444
色が等しいかどうかなのになんで文字列同士の比較してんの?
intで比較しろよ

452 :デフォルトの名無しさん:2006/11/23(木) 20:29:28
>>450
んなわけねえだろボケ

453 :デフォルトの名無しさん:2006/11/23(木) 20:33:35
>>452
俺はこんなの簡単に作れるんだぞって言いたいだけだから相手スンナ
どーせリアルでは何も出来ない奴さ

454 :デフォルトの名無しさん:2006/11/23(木) 20:33:52
カワイソウ

455 :デフォルトの名無しさん:2006/11/23(木) 21:52:55
すいません、やはりうまくいきません。
画像を指定座標に表示するためにはどうすればよいのでしょうか?
Bitmap icon = new Bitmap(@"C:\icon.jpg"); 画像の読み込み
unsafe
{
int* p = (int*)(void*)Scan0;
int color;
for (int Y = 0; Y < sizeY; Y++)
{
for (int X = 0; X < sizeX; X++)
{
color = p[0];
string s = color.ToString("x");
int Compare = string.Compare(s, "fe0000fe");
while (Compare == 0)
{
Graphics g = pictureBox2.CreateGraphics();
g.DrawImage(icon, X, Y);
               p += 4;
}
}
}
}
みたいなことは出来ないのでしょうか?
自分のイメージでは画像が走査線のように違う色まで走っていって欲しいのですけど。

456 :デフォルトの名無しさん:2006/11/23(木) 22:06:50
人の話を聞かないのなら来るな

457 :デフォルトの名無しさん:2006/11/23(木) 22:17:28
>>455
もうおなかいっぱい。釣りなら他所でやってくれ。

458 :デフォルトの名無しさん:2006/11/23(木) 22:18:59
答えられないとなると急に叩きですか?w

レベル低っ

459 :デフォルトの名無しさん:2006/11/23(木) 22:21:38
>>444から>>455でぜんぜん進歩してないじゃない
間のレスは無視だろ?信じらんねえ

460 :デフォルトの名無しさん:2006/11/23(木) 23:42:28
>>455
いやさ、そのレベルなら画像処理なんてやめといたほうがいいと思うよ。
もうhello worldからやり直してください。ほんと頼みます。

461 :デフォルトの名無しさん:2006/11/24(金) 00:15:47
>>458
最近、こういうのが流行ってるの?
すぐに答えをもらえないと悪態をつくっていうの。

462 :デフォルトの名無しさん:2006/11/24(金) 00:23:51
ただの煽りだろ

463 :デフォルトの名無しさん:2006/11/24(金) 00:24:10
>>426
結論から先にいいますと解決しました。

serialPort_DataReceived イベント自体がセカンダリスレッドで動作しますので
別スレッドで動作していることになっています。
でこのイベントメソッドの中で受信したデータをフォームに貼り付けていますが
この貼り付けも Delegate を使用し、
this.Invoke(Delegate, receivedData);
としていました。
これを、
this.BeginInvoke(Delegate, receivedData);
とすることで問題を回避できました。

マルチスレッドを扱ったのが初めてでしたので、ちょっとスレッドの勉強になりました。





464 :デフォルトの名無しさん:2006/11/24(金) 00:34:18
もしも EndInvoke を呼んでないとしたらやばいかもよ

465 :444:2006/11/24(金) 00:45:42
すいません、寝てました。
やっぱり自分には出来そうにないのであきらめます。
最後にお返事だけ。
>>448
windowsは色が32ビットで表されると書いてあったので、
p+=4にしました。
>>449
自分では、何をおっしゃっているか理解できません。
ただ、黒0x00000000と赤では上手くいきませんでした。
青0xfe0000feと白0xffffffffの時は規則正しく同じ値の繰り返しだったので、
隣のピクセルは喰っていないと判断しました。
>>451
まず、16進数で判断したかったんです。
で、文字列にしないと自分の力では比較方法が分かりませんでした。
>>458
自分じゃないです。
___________________________________________
もしこれがC#とWindowsじゃなかったら、
パレット設定して直接VRAM0xa0000に書き込むんですが・・・
今回は有難うございました。
自分にはWindowsは難しすぎです。


466 :デフォルトの名無しさん:2006/11/24(金) 00:48:49
昨日から

>int stride = bitmapData.Stride;

つってんだろうがよぼけ!

467 :デフォルトの名無しさん:2006/11/24(金) 00:50:52
PixelFormat.Format24bppRgb とか自分で書いてるし!ムキー!!

468 :デフォルトの名無しさん:2006/11/24(金) 01:04:36
Windows が難しいんじゃなくてプログラミングが難しいんじゃないか おまいさんには
数字と数値の区別も付いてないし

469 :デフォルトの名無しさん:2006/11/24(金) 03:21:12
すいません、
webのItemDataBoundみたいなイベント、windowsフォームにはりつける
datagridコントロールにありませんか?

470 :444:2006/11/24(金) 08:13:53
>>466
これって調べましたけれど何に使うのですか?
BitmapData bitmapData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height),
ImageLockMode.ReadWrite, PixelFormat.Format32bppRgb);
って指定して、
color = p[0];
intで4バイト読みこんで、(RGBと使わないビット)
p += 4;
じゃ駄目なんでしょうか?
>>467
いろに種類があったなんて知らなかったです。
勉強になりました。ここは参考コードのコピペです。
Format32bppRgbが求めているものになるのでこれに直しました。
>>468
そうですね、プログラミング向いてないです。
でも、今までメモリアドレスと数字しか使わないプログラミングしかしてこなかったので。
文字列型とか始めて知りました。
でも、C#2日目ですから、大目に見てください。

471 :デフォルトの名無しさん:2006/11/24(金) 08:52:47
const string[] hoge を初期化したいのですが、どうしたらできるでしょうか。

よければGoogleでVC++を除いてVC#を検索に引っ掛ける方法があれば教えてください

472 :デフォルトの名無しさん:2006/11/24(金) 08:59:14
>>471
static readonly にでもしとけ

Web Search なら main filetype:cs
Code Search なら main lang:C#

473 :デフォルトの名無しさん:2006/11/24(金) 09:01:14
>>472
hoge[0] = "something"; が可能になる罠


474 :デフォルトの名無しさん:2006/11/24(金) 09:47:23
VB6のString$(回数, 文字列)みたいに、charじゃなくてstringを
繰り返すのってどうやればいいでしょうか?VB.NETの互換ライブラリはなしで。
ありがちっぽいんですが探せなくて。いまループで処理してます。


475 :デフォルトの名無しさん:2006/11/24(金) 11:23:34
StringBuilderを使ってループで処理する。

476 :デフォルトの名無しさん:2006/11/24(金) 12:11:20
>>464
御指摘ありがとうございます。

IAsyncResult ar = this.BeginInvoke(Delegate, receivedData);
this.EndInvoke(ar);

という風にしてみました。

477 :デフォルトの名無しさん:2006/11/24(金) 14:37:33
超初心者PGの質問です。
スレ違いならばご指摘ください。

UI層、コントロール層、データアクセス層、エンティティ層の構造です。

そのエンティティ層のクラスの考えなのですが、

1.DBのテーブルに依存するのか
  テーブルと1対1に定義する。

2.データアクセス層のSQL処理に依存するのか
  Select したいテーブル(結合含む)に定義する。
つまり、Select別に同じようなエンティティクラスを定義する

なんだかよくわかりません。
どなたか考え方のご教授願えませんでしょうか・・・orz



478 :デフォルトの名無しさん:2006/11/24(金) 14:53:28
>>470

スキャンライン [ピクセル | ピクセル | ピク・・・・・・・・・・・・・・・・・ | パディング ]
          |--------width×ピクセルのサイズ----------|
          |-----------------------stride----------------------|

別にC#に限った事ではなくて一般的な話。

479 :477:2006/11/24(金) 16:21:06
すいません
意味がよくわからないですね・・・orz

ようは

1.DBのテーブルに依存する。
  テーブルカラムと1対1に定義する。
  Aテーブルのaカラム : A.a
  Bテーブルのbカラム : B.b

2.データアクセス層のSQL処理に依存する。
  Select したいテーブル(結合含む)ごとに定義する。
  つまり、Select別に同じようなエンティティクラスを定義する
  Aテーブルのaカラム : A.a
  Bテーブルのbカラム : B.b
  Cテーブルのa,bカラム : C.a C.b

  a と b は同じ内容です。

テーブルのちがうカラムを
いっぺんでSelect するときは?
どのようにあればってことなんです。

480 :デフォルトの名無しさん:2006/11/24(金) 17:34:59
>>479
どういう答えを欲してるのか分からん。
もしアーキテクチャ理論の話がしたいんならスレ違いじゃないかな。

481 :477:2006/11/24(金) 17:46:51
あぅ・・・
そうですね・・・
すません

エンティティクラスの実装のしかたなんですが

1.テーブル依存なのか
2.処理依存なのか

ってことなんです・・・・

482 :デフォルトの名無しさん:2006/11/24(金) 18:00:09
>>471
String以外の参照型は定数にできない。
配列要素も変更不能にしたければReadOnlyCollectionを使う。

static readonly ReadOnlyCollection<String> strings =
new ReadOnlyCollection<String>(new String[] { "foo", "bar" });

483 :477:2006/11/24(金) 18:26:36
ttp://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpdnaspp/htm/CustEntCls.asp
リレーションシップを管理する

こんな感じなんですかね?

これだと
1.テーブル依存


処理に併せてストアド作成 で?


484 :デフォルトの名無しさん:2006/11/24(金) 20:44:18
>>477
俺のパソでそのURLを表示させると
ASP.NET に熟練する: カス...
とタスクバーに出て笑った。

485 :デフォルトの名無しさん:2006/11/24(金) 22:29:19
>>483
DBに実装を載せるお兄ちゃんなんかキライッ!

486 :デフォルトの名無しさん:2006/11/24(金) 23:48:37
くだすれC#ってないの?

487 :デフォルトの名無しさん:2006/11/24(金) 23:52:20
>>486
>>1

488 :デフォルトの名無しさん:2006/11/25(土) 12:39:36
パネルにテキストボックスとピクチャーボックスを配置して
ピクチャボックスには画像(白を透過)を貼ってあります。

ピクチャーボックスの透過部分がテキストボックスと重なったときに
テキストボックスが見えるようにしたいんですが
パネルの背景色でテキストボックスが隠れてしまいます。
どうすればいいのか教えてください。

489 :デフォルトの名無しさん:2006/11/25(土) 14:25:51
むりぽ

490 :488:2006/11/25(土) 14:51:56
>>489 ありがとうございます
なんとなくそんな感じがしてましたがやっぱり無理ですか。

もう一つ質問させてください
今アイデアプロセッサみたいなのを作ろうとしてるんですが、
丸や四角、文字などはピクチャーボックスに直接書き込むようにしたほうがいいんでしょうか?
それともパネルにコントロールを配置していくようにするべきなんでしょうか?
よく分からないので教えてください。

http://www.forest.impress.co.jp/lib/offc/document/ideaprocsr/image/planningflow_r.html


491 :デフォルトの名無しさん:2006/11/25(土) 15:11:14
>>490
図形にいちいちウィンドウハンドル割り当てるのも馬鹿らしいから、
普通はControlあたりを継承して自作のコントロールを作る。

492 :デフォルトの名無しさん:2006/11/25(土) 15:24:07
>>491
ありがとうございます。
自分で作ったコントロールをフォームなどに配置していくような感じでしょうか?
まだ自分には難しくて無理そうですが自作コントロールを作ってみたいと思います。


493 :デフォルトの名無しさん:2006/11/25(土) 16:49:09
DirectXでゴリゴリ描くとか

494 :デフォルトの名無しさん:2006/11/25(土) 16:52:19
漏れならGDI+でへろへろ描く。
隅っこつまんで引っ張ってとか、触れる辺毎にカーソル変えてとか、
あれこれ細かい操作するなら自前で描画するのが結局いちばん楽だし動きも速い。

495 :デフォルトの名無しさん:2006/11/25(土) 18:59:08
質問させてください

VS2005ExporessでC#を勉強しています。
ディレクトリ単位でzip形式に圧縮するための
方法、サンプルなどありましたらお教えください

496 :デフォルトの名無しさん:2006/11/25(土) 19:12:20
>>495
> VS2005Exporess

エクスポレスでつか。そうでつか。

zip形式に圧縮するのは自前でやるならzipヘッダ吐き出してDeflateStreamを使ってやるんだけど
初心者には大変だろうから、SharpZipLibを使うのがお勧め。

497 :デフォルトの名無しさん:2006/11/25(土) 19:19:31
あれ?
.net2.0からzip用のライブラリ追加になったはずだが???

498 :デフォルトの名無しさん:2006/11/25(土) 19:20:58
ZipInputStreamだろ?

499 :デフォルトの名無しさん:2006/11/25(土) 19:34:35
>>496
ありがとうございます
このご恩は10秒間忘れません

500 :デフォルトの名無しさん:2006/11/25(土) 19:35:45
500

501 :デフォルトの名無しさん:2006/11/25(土) 19:43:46
ごめん。
追加されたのはGZipStreamだった…

502 :デフォルトの名無しさん:2006/11/25(土) 19:45:19
>>497
GZip/Deflate なので複数のファイルを纏めるのは無理
3.0 で追加されたとか何とかどっかで聞いたような気もするが

503 :デフォルトの名無しさん:2006/11/25(土) 20:50:12
>>493>>494

どうもありがとう。参考になります。

504 :デフォルトの名無しさん:2006/11/25(土) 22:56:30
圧縮の形式ってほかにcabとかあるけど、
どうしてマイクロソフトはそれを標準にしないんだろう。
cabってzipより大幅に劣ってる?


505 :デフォルトの名無しさん:2006/11/25(土) 23:13:13
圧縮アルゴリズムにLZX(21)を使えば、圧縮性能はzipやlzhよりは遥かに高いけど、4,5倍の時間がかかる。

cabはアーカイブに署名できたりしてけっこう面白いんだけどね。

506 :デフォルトの名無しさん:2006/11/25(土) 23:33:39
遙かに高いってw
こいしの基準っていったい・・・w

507 :デフォルトの名無しさん:2006/11/25(土) 23:54:27
既存のコントロールの様に、例えばCancelEventを起こすにはどうすればいいのでしょうか?
要は、
CancelEventを持つ、あるUserControlを保持するFormが、
イベントをキャンセルするかまず決め(e.Cancelをtureにするとか)、
その上でUserControlで処理を行いたいのです。

しかしUserControl側から順にイベントを呼び出されてしまい、
どうしようもありません。御教授お願いします。

508 :デフォルトの名無しさん:2006/11/26(日) 00:02:44
>>507
ごめん。何が言いたいのかよく分からない。

509 :507:2006/11/26(日) 01:15:52
ごめんなさい。

UserControl1はCancelEventHandlerを持ち、
メソッド1をCancelイベントに登録した。

Form1はUserControl1を保持している。
そして同じくCancelイベントにメソッド2を登録した。
UserControl1上でCancelイベントが起きた。

-ここから希望-
  Form1が登録したメソッド2が呼び出され、CancelEventArgs.Cancel値をいじる。
  次にUserControl1もメソッド1が呼び出されCancelEventArgs.Cancel値がどうなったか知り、
  それに応じて処理を行う。
-ここまで-

しかしイベント呼び出しは、当然というかUserControl1から行われるため、
Form1側でいじった値をUserControl1が知ることは出来ない。

じゃあどうすれば、UserControl1の方で値がどうなったのか分かるのよといった話で、
どうも文章も本当に下手で申し訳ないです。

510 :デフォルトの名無しさん:2006/11/26(日) 01:24:59
>>509
FormClosing FormClosed みたいにふたつに分けたらどうだろう?
ちなみにイベントに登録されたデリゲートが呼ばれる順序は規定されてないのでどんな仮定もしてはだめ。


511 :デフォルトの名無しさん:2006/11/26(日) 01:30:14
>>509
いや根本的にイベントの使い方を間違ってると思われ。
UserControl1自身はいつイベントが発生するか知ってるんだから、
わざわざイベントハンドラを登録する必要なんてない。

private CancelEventHandler foo;
public event CancelEventHandler Foo { add; remove; }

void OnFoo()
{
CancelEventArgs e = new CancelEventArgs();
foo(this, e);
MessageBox.Show(e.Cancel? "canceled" : "not canceled" );
}

512 :デフォルトの名無しさん:2006/11/26(日) 01:33:20
>>511
OnFoo は protected virtual void OnFoo(HogeEventArgs e) がお約束だぜぇ

513 :デフォルトの名無しさん:2006/11/26(日) 01:35:15
>>512
分かってるが、そうすると例示するコードの段階が増えるじゃんけ。

514 :デフォルトの名無しさん:2006/11/26(日) 01:39:57
素朴な疑問だが
UserControl1.CancelEvent(CancelEventArgs e){
parent.CancelEvent(e);
if (...){}
}
じゃだめなん?

515 :デフォルトの名無しさん:2006/11/26(日) 01:44:12
parentって何だよ。

516 :デフォルトの名無しさん:2006/11/26(日) 01:48:53
>>515
UserControl1の親Form

517 :デフォルトの名無しさん:2006/11/26(日) 01:54:42
普通イベントフィールドはprivateだから特殊な作りをしていなければUserControl1から見えないんじゃなかろうか。

518 :デフォルトの名無しさん:2006/11/26(日) 02:03:41
>>517
そういやそうだった・・・orz

519 :デフォルトの名無しさん:2006/11/26(日) 02:19:35
>>511
そこでfooのnullチェックってしなくても大丈夫だっけ?

520 :507:2006/11/26(日) 02:35:42
>>510-519さん方
どうもありがとうございます!胸のつかえが下りました。
なんというか、イベント呼び出しの順序が決まってない、
というのは正直雷が落ちたような気分です。

521 :デフォルトの名無しさん:2006/11/26(日) 11:16:35
delegateをCombineしないでリストで持っとけばいいんじゃね?

522 :デフォルトの名無しさん:2006/11/26(日) 13:17:43
プロテクトプロパティって、要するに使いたかったら継承して
使えやゴルァって理解で桶?

523 :デフォルトの名無しさん:2006/11/26(日) 13:22:09
>>522
別に継承しなくても使えるでしょ。

524 :デフォルトの名無しさん:2006/11/26(日) 14:57:35
>>231
亀レスだが、不可能ではないと思われ

ただその手のことはJavaのほうが向いていると思う(JXTAという専門API群があるので)

525 :デフォルトの名無しさん:2006/11/26(日) 16:44:15
教えてください
構造体の中に構造体を入れることはできるんでしょうか?

526 :デフォルトの名無しさん:2006/11/26(日) 16:49:07
30秒でできるんだから自分で試してみたらどうでしょうか

527 :デフォルトの名無しさん:2006/11/26(日) 16:49:43
2004年ごろCマガでJXTAを使ったP2Pの連載があったな…

528 :デフォルトの名無しさん:2006/11/26(日) 16:50:41
>>526
多分やったが出来なくて、出来る方法があるのか知りたいのだろう。

529 :デフォルトの名無しさん:2006/11/26(日) 16:53:02
自分自身を含ませることはできん

530 :デフォルトの名無しさん:2006/11/26(日) 17:01:43
>>525
int も 構造体ですよ

531 :デフォルトの名無しさん:2006/11/26(日) 17:07:09
やっぱり出来ないみたいですね。ありがとうございました。

532 :デフォルトの名無しさん:2006/11/26(日) 17:09:04
できるから

533 :デフォルトの名無しさん:2006/11/26(日) 17:20:55
構造体の中に自作の構造体を入れられるかということだろう?

534 :デフォルトの名無しさん:2006/11/26(日) 17:50:42
むしろなんでできないと思ったのか聞きたい。
うまくいかない方法なんてあるの?

535 :デフォルトの名無しさん:2006/11/26(日) 17:51:50
>>534

536 :デフォルトの名無しさん:2006/11/26(日) 17:51:54
マーシャリングがらみと見た

537 :デフォルトの名無しさん:2006/11/26(日) 17:54:25
>>534
循環参照じゃね?

538 :デフォルトの名無しさん:2006/11/26(日) 17:55:05
そうだね。
たぶんねー
apiから受け取る構造体の要素に可変長の構造体があるんだよ。

むりぽ。

539 :デフォルトの名無しさん:2006/11/26(日) 18:18:21
Marshl.Copy上等

540 :デフォルトの名無しさん:2006/11/26(日) 18:28:38
>>533
そういうことです。

541 :デフォルトの名無しさん:2006/11/26(日) 18:40:00
>>540
循環参照になっててコンパイラに怒られてるだけだろ?
無関係な構造体なら入れ子にできる。

542 :デフォルトの名無しさん:2006/11/26(日) 18:42:55
ざっつおーる!

543 :デフォルトの名無しさん:2006/11/26(日) 18:50:46
よく分かりました。
どうもありがとうございました。



544 :デフォルトの名無しさん:2006/11/26(日) 21:59:00
これは循環参照。
struct MyStructA
{
MyStructB B;
}

struct MyStructB
{
MyStructA A;
}

545 :デフォルトの名無しさん:2006/11/26(日) 22:12:17
これも循環参照。
struct MyStructA
{
MyStructA A;
}

546 :デフォルトの名無しさん:2006/11/26(日) 22:13:58
/unsafeで、これはおk。

unsafe struct MyStructA
{
MyStructA * A;
}

547 :デフォルトの名無しさん:2006/11/27(月) 10:43:24
unsafeを使えば出来るんですね。ちょっと難しそうですが・・・
ポインタの勉強もしないとだめですね。
ご丁寧にありがとうございました。

548 :デフォルトの名無しさん:2006/11/27(月) 13:15:44
コネクションを生成したり、DataReaderを返してくれたりするデータベースクラスの抽象クラスを作ろうと思います。
(これを継承してOracleやらPostgreSQLにする)
コネクションを生成するメソッドは抽象クラス側で実装したいのですが、使用するデータベースごとにConnectionオブジェクトの型が違うことで躓いてます。
(IConnectionインターフェイスのようなものがあるかと思っていた。)ジェネリックなどを使えば、型の違いは隠蔽できるのかと思ったのですが、どうにもうまくいきません。
ちなみに↓のようなコードを一般化したいです。何かアドバイスを頂ければと思います。

private NpgsqlConnection con;
void ConnectionOpen(){
  con = new NpgsqlConnection(〜);
  con.open();
}

549 :デフォルトの名無しさん:2006/11/27(月) 13:44:09
あるって、抽象の実装やインターフェイスが。
2.0ならプロバイダファクトリ使いな。


550 :548:2006/11/27(月) 14:23:04
>>549
よくよくSystem.Data名前空間を探してみると「IDbConnection」インターフェイスが見つかりました。
お騒がせしました...。

ちなみにプロバイダファクトリでググると下記の資料がひっかかりました。
なんだかよくわからないけどこちらの方がいいのかな…?

10 行でズバリ !! プロバイダ ファクトリの利用 (C#)
http://www.microsoft.com/japan/msdn/thisweek/300x10/Phase3/fact/cs.aspx


551 :デフォルトの名無しさん:2006/11/27(月) 14:40:56
2枚の画像を使い、ある座標と座標をつなげて
3次元画像を作成したいのですがどうすればいいのでしょうか?
お願いします。

552 :デフォルトの名無しさん:2006/11/27(月) 15:31:19
まず赤と青の眼鏡を用意する

553 :デフォルトの名無しさん:2006/11/27(月) 15:40:01
>>552
で、それが用意できたら?

554 :デフォルトの名無しさん:2006/11/27(月) 16:41:55
みなさんログを取るときってどんな工夫してますか?
自分はコンソールやファイルに直に書き出しているのですが、もっとスマートにできる方法を求めてます。
log4netなどはどうでしょうか?

555 :デフォルトの名無しさん:2006/11/27(月) 16:45:31
赤い絵と青い絵を少しズラして、その眼鏡をかけて見る。
子供の頃、雑誌の付録でなかった?
映画でも有ったはず。

556 :デフォルトの名無しさん:2006/11/27(月) 17:11:00
なんのくふうもしないなら、System.Diagnostics.Trace
EnterpriseLibrary使うなら、これに入っているLoggingの機能
log4netつかっていいならlog4net
みんな気に入らないなら自作


557 :デフォルトの名無しさん:2006/11/27(月) 17:14:19
>>550
多くの場合は、構成ファイルの接続文字列設定からとってくる。
この設定にはプロバイダ名を指定できるようになっているので、
ここからとってきたプロバイダ名からプロバイダファクトリを取得して
各種オブジェクトを作成するようにすればいい。


558 :デフォルトの名無しさん:2006/11/27(月) 18:34:01
>>554
.net標準のもあるが使いにくいらしい。
ttp://densanshokunin.at.webry.info/200609/article_2.html

559 :デフォルトの名無しさん:2006/11/27(月) 18:47:04
>>556
>>558
なるほどなるほど。やっぱり外部ツールを使ったほうがよさそうですね。
log4netを扱った日本語サイトが軒並み更新してなさげだったので、廃れてしまったのかと思ってました。
そういやEnterprise Libraryの利用もあまり聞かないけど自分だけなのかな?

560 :デフォルトの名無しさん:2006/11/27(月) 19:46:45
log4netて.NET2.0に対応してたっけ?

561 :デフォルトの名無しさん:2006/11/27(月) 20:30:17
>>560
Log4net is available for several frameworks. For each supported framework an assembly targeting that framework is built:

Microsoft .NET Framework 1.0 (1.0.3705)
Microsoft .NET Framework 1.1 (1.1.4322)
Microsoft .NET Compact Framework 1.0 (1.0.5000)
Mono 1.0
Microsoft Shared Source CLI 1.0
CLI 1.0 Compatible

http://logging.apache.org/log4net/release/manual/introduction.html

ダメっぽ(;ω;)ヴワッ

562 :デフォルトの名無しさん:2006/11/27(月) 21:31:55
ぶほ


563 :デフォルトの名無しさん:2006/11/27(月) 22:08:01
VC#ExpressでNUnitが使いたいのでいろいろ試行錯誤をしていますが、どうにもなりません。
下のサイトを参考にTestDriven2.0 Personal Editionを入れてみましたが、特にコンテキストメニューが追加される様子もないです。
どなたか試みた方おられませんか?

http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=252692&SiteID=7



564 :デフォルトの名無しさん:2006/11/27(月) 22:57:01
フォントのサイズをピクセルで知りたいんですけど
どうすれば分かりますか?

565 :デフォルトの名無しさん:2006/11/27(月) 23:02:35
文字ごとに違うけどな…

566 :デフォルトの名無しさん:2006/11/27(月) 23:22:45
フォントサイズが13の時に何ピクセルになるか?
みたいな事なんですが
何とか工夫してやってみたいと思います。

567 :デフォルトの名無しさん:2006/11/27(月) 23:25:39
>>564
TextRenderer.MeasureText

568 :デフォルトの名無しさん:2006/11/27(月) 23:26:27
Graphics.MeasureString

569 :デフォルトの名無しさん:2006/11/27(月) 23:29:45
>>567>>568
ありがとうございます。ほんとに助かりました^^


570 :デフォルトの名無しさん:2006/11/27(月) 23:47:51
Scripting.FolderClass等を使ってフォルダのサイズを取得するものを作ったんですが
Sizeプロパティで帰ってきた数値をlong型とか(計算出来る型)に変換したいんだけれど
どうすれば良いですか?

とりあえずできあがったのがこんな感じで、
public static void Main()
{
 string path = @"C:\Program Files";
 Scripting.FileSystemObject foj = new Scripting.FileSystemObject();
 Scripting.FolderClass FSobj;
 FSobj = (Scripting.FolderClass)foj.GetFolder(path);
 Console.WriteLine("{0}byte", FSobj.Size);
}                  ^^^^^^^^^


^^^^^^^^^部分のFSobj.Sizeの戻り値をlong型とかuint型にしたいです・・・。

    

571 :デフォルトの名無しさん:2006/11/27(月) 23:56:44
>>570
public static long GetDirectoryFileSize(string stDirPath) {
return GetDirectoryFileSize(new System.IO.DirectoryInfo(stDirPath));
}
http://jeanne.wankuma.com/tips/directory/totalfilesize.html

572 :デフォルトの名無しさん:2006/11/27(月) 23:58:08
そもそも Size プロパティ自体 int で返ってきてるはずだけど。

573 :デフォルトの名無しさん:2006/11/28(火) 00:09:09
>>571
System.IO使って再帰的になんとかって方法も考えました。でもFSOを使いたいのです。

>>572
まじで?int型の変数に代入できないんだけど?


574 :デフォルトの名無しさん:2006/11/28(火) 00:11:28
Scripting.FileSystemObjectってどこにあるの?
WSHのランタイムライブラリをtlbimp?

575 :デフォルトの名無しさん:2006/11/28(火) 00:14:46
ファイルを開くダイアログでプレビュー機能をつけたくて
とりあえず、OpenFileDialogを継承してみたのですが、プレビューさせるコントロールをはる
ところがわかりません。


576 :デフォルトの名無しさん:2006/11/28(火) 00:17:55
c++スレに帰ったほうがいいよ。

577 :デフォルトの名無しさん:2006/11/28(火) 00:19:14
>>574
Microsoft Scripting Runtimeを参照設定しました。

578 :デフォルトの名無しさん:2006/11/28(火) 00:19:40
C#ではそんなことすらできないんですか?

となると、要望の多い業務アプリにはやはり不向きなんですね

579 :デフォルトの名無しさん:2006/11/28(火) 00:20:34
そうだね

580 :デフォルトの名無しさん:2006/11/28(火) 00:21:22
>>578
いい加減粘着はやめたらどうだ?
初心者用の内容じゃないだろ。

馬鹿の一つ覚え。

581 :デフォルトの名無しさん:2006/11/28(火) 00:24:43
とおり一辺倒のアプリならC#のほうが簡単に作れるけど
ちょっと枠からはみ出したアプリを書こうとするとMFCのほうが簡単だよ

582 :574:2006/11/28(火) 00:25:33
>>570
どうやらマーシャリングの設定がうまくいってないみたいで、
Int32をボックス化したのが返ってきてるけど、そのままunboxしてしまえば元に戻せる。

583 :デフォルトの名無しさん:2006/11/28(火) 00:27:49
何でここはID出ないの?


584 :デフォルトの名無しさん:2006/11/28(火) 00:28:24
でもintだから2G以上取得できないよ?




585 :デフォルトの名無しさん:2006/11/28(火) 00:30:38
>>582
そもそも IFolder::Size は VARIANT なんで object にされるのは必然。

586 :デフォルトの名無しさん:2006/11/28(火) 00:32:31
>>578
誰も出来ないといってませんが???
普通にform作ってダイアログにも出来るし…

587 :デフォルトの名無しさん:2006/11/28(火) 00:33:57
Extend the Common Dialog Boxes Using Windows Forms 1.x
ttp://msdn2.microsoft.com/en-us/library/ms996463.aspx

588 :デフォルトの名無しさん:2006/11/28(火) 00:36:09
MFCより簡単だと思うが???

589 :デフォルトの名無しさん:2006/11/28(火) 00:37:36
>>588
その論争はあまりにも非建設的だから他所でやってくれ。

590 :デフォルトの名無しさん:2006/11/28(火) 00:38:53
次はpdfのプレビューとか言ってくるんじゃないかな?

591 :デフォルトの名無しさん:2006/11/28(火) 01:34:34
usingを定義すれば、クラスやインターフェースの名称がぶつからない限り、
namespaceを省略出来ると思いますが、
ウィザードが生成したWindowsアプリケーションのソースは
private変数定義時に、"System.Windows.Forms"のnamespaceを省略していません。
これは何故なのでしょうか?
また、こうすべきなのでしょうか?

592 :デフォルトの名無しさん:2006/11/28(火) 01:38:42
デザイナで使われるクラス名がよそで定義されてたら困るからな。

593 :デフォルトの名無しさん:2006/11/28(火) 01:53:09
自作コードではランタイムのクラスにまるかぶりのクラス名なんか作らないから、
usingしたほうがいいっしょ。インテリセンスの意味なくなるし。
またかぶるべきでもない


594 :デフォルトの名無しさん:2006/11/28(火) 02:00:49
デザイナは機械的な処理を行うんであって
「わざわざ」省略形にするメリットがない。
デメリットと危険はいっぱいあるが。


595 :591:2006/11/28(火) 02:13:07
>>592-594
なるほど。汎用的なコード生成の為、安全を図ってるわけですね。
確かに自分で作るアプリケーションであれば、
同じ名前のクラスなんて基本的に作らないでしょうから、
usingを記述して、安心してnamespaceを省略しようと思います。

596 :デフォルトの名無しさん:2006/11/28(火) 09:48:57
2.0のドキュメントをdexplore.exe使ってローカルで読みたいんだが、どうすればいいんだ

597 :デフォルトの名無しさん:2006/11/28(火) 11:33:04
PSDKをインストールする
簡易版でいいならVC#Expressで一緒に入る

598 :デフォルトの名無しさん:2006/11/28(火) 16:15:48
業務アプリをゴリゴリと書いてます。
データ表示用のグリッドを持つ類似した画面が10個程度あるのですが、基盤となるデザインを共通化するのにフォームの継承を使うのは拙い考え方でしょうか?

599 :デフォルトの名無しさん:2006/11/28(火) 16:23:03
なんで拙いと思ったのか


600 :デフォルトの名無しさん:2006/11/28(火) 16:35:06
Streamをいくつかつなげる場合の方法なのですが、次のようにまとめて書いていいのか
using (BinaryWriter bw = new BinaryWriter(new BufferedStream(saveFileDialog1.OpenFile(), 1024*16))) {
    bw.Close();
}
それともひとつひとつClose, Disposeしていったほうがいいのか教えてください。
using (Stream fs = saveFileDialog1.OpenFile()) {
    using (BufferedStream bf = new BufferedStream(fs, 1024*16)) {
        using (BinaryWriter bw = new BinaryWriter(bf)) {
            bw.Close();
        }
        bf.Close();
    }
    fs.Close();
}

601 :デフォルトの名無しさん:2006/11/28(火) 16:38:44
StreamWriterやStreamWriterはそれ自体がバッファを持っているらしいので
BufferedStreamを使う必要はないと考えていいのでしょうか?
またBufferedStreamと組み合わせて使ってもいいものなのでしょうか?

602 :デフォルトの名無しさん:2006/11/28(火) 16:44:05
using使っていればわざわざCloseする必要ないよ。
BufferedStreamとBinaryWriterは、もともとのStreamをまき沿いにして閉じるからそっちも考慮不要。

>>601
BinaryWriterはStreamWriterを継承してない。バッファも持ってない。

using (BinaryWriter bw = new BinaryWriter(new BufferedStream(saveFileDialog1.OpenFile(), 1024*16))) {
    //処理
}

603 :デフォルトの名無しさん:2006/11/28(火) 17:19:22
>>599
安直に検索してみると下記のようなページが見つかったので。。
返って面倒になるような典型的な問題があるのかな、と思いました。
http://blogs.wankuma.com/naka/archive/2004/05/30/2941.aspx


604 :デフォルトの名無しさん:2006/11/28(火) 17:29:37
>>603
普通そんな組み方しないだろ。

605 :デフォルトの名無しさん:2006/11/28(火) 17:32:19
>>603
クラス内ではイベントをOn〜で実装しないか?


606 :デフォルトの名無しさん:2006/11/28(火) 18:14:07
>>602
ありがとうございます。連鎖的にClose/Disposeしてくれるわけですね。

601は質問の仕方が悪かったようで、少し訂正します。
普通はこれでいいとして
StramWriter sw = new StreamWriter(saveFileDialog1.OpenFile())
大き目のバッファをとりたい場合に次のような書き方をすると、
StramWriter sw = new StreamWriter(new BufferedStream(saveFileDialog1.OpenFile(), 1024*16))
StramWriterのバッファとBufferedStreamのバッファが2重になって効率が悪いのではないかと思いまして、
StramWriteとBufferedStreamの組み合わせは普通するのかどうか聞きたかったのです。

607 :デフォルトの名無しさん:2006/11/28(火) 18:19:10
>>606
StreamWriterのコンストラクタでバッファサイズ決めるんじゃいかんの?

二重にバッファリングすることでどの程度遅くなるかは分からんけど、無駄でしかないのは確か。

608 : ちょっと:2006/11/28(火) 20:39:49
ご質問があるのですが、例えばYahooメール等にログインをする際には
 ユーザID
 パスワード
を入力しますよね。その入力するのを自動化するソフトを作りたいと考えて
います。どの様にすれば良いでしょうか?

※Web何とかメソッドを使用してWEBページに使われているHTML
スクリプトを解析するという仕方は自力で調べて分ったのですが、ただ、
ターゲットとする特定URLのブラウザの項目にフォーカスを充て入力を行うという
方法が分りません。

誰かご存知の方がいらっしゃいましたらお教え下さい。

609 :デフォルトの名無しさん:2006/11/28(火) 20:50:23
WebBrowser をはっつけてDOM操作するのが簡単かな

610 :デフォルトの名無しさん:2006/11/28(火) 21:30:30
教えてください

listbox等を二つ横に並べて繋げ、その間隔をスライドさせ変化させるのって
できますか?

611 :デフォルトの名無しさん:2006/11/28(火) 21:46:11
SplitContainer

612 :デフォルトの名無しさん:2006/11/28(火) 22:15:56
>>608
漏れは、ログインしてガンスト起動するのを作った。
参考になると思う。
http://www.filebank.co.jp/guest/gtk2k/gunst
pass:gunst
こいつは、APIでマウス操作してボタンをクリックしているが、(ボタンがFlashを使用しているためプログラム上でのクリックができないので)
yahooなどは
ボタン(HTMLButtonElement)やサブミットボタン(HTMLInputButton)を取得し、
Clickメソッドを実行するとそのエレメントのクリック動作をプログラム上で行う。
また、フォームを使用している場合、HTMLFormElementでフォームエレメントを取得し、Submitメソッドを実行すると
フォームのサブミットをプログラム上で行える。
これらを使用してログインできると思われる。

613 :デフォルトの名無しさん:2006/11/28(火) 23:23:53
ご質問があるのですが(笑)

614 :612:2006/11/28(火) 23:29:20
漏れ?

615 :デフォルトの名無しさん:2006/11/29(水) 01:47:31
キャストするときに ()演算子とConvertクラスは何が違うのでしょうか?
あと、皆さんはどちらを使いますか?

616 :デフォルトの名無しさん:2006/11/29(水) 02:08:26
>>609
DOM操作でうすか?ぐぐって試してみます。

>>612
詳しくご説明頂きありがとうございます。試してみます。



617 :デフォルトの名無しさん:2006/11/29(水) 02:18:42
>>615
キャストはC#の機能でConvertクラスは.NETの機能なんじゃね?
漏れはConvertクラスは使ったこと無いかも。

618 :デフォルトの名無しさん:2006/11/29(水) 10:26:38
俺はDBがらみでConvert.ToString(hoge)はよく使う。
hogeのDB項目がNULLの場合、キャストだと例外が発生するが、Convert.ToStringだと
空文字列にしてくれる。みたいな〜。


619 :デフォルトの名無しさん:2006/11/29(水) 10:37:46
えー

620 :デフォルトの名無しさん:2006/11/29(水) 12:26:06
バイナリ吐く時はかならずといっていいほど使っています

621 :デフォルトの名無しさん:2006/11/29(水) 12:33:16
環境::VC#2005 Express

昨日フォームの継承について伺ったものです。
下記のサイトを参考にして、継承されたコントロールを派生フォームよりいじくろうとしました。
ボタンやテキストボックスについては滞りなく編集できたのですが、DataGridViewや、MenuStrip,StatusStrip(そのitemも含む)はデザイナより変更ができないままです。
これはこういうものなのでしょうか?

@IT:.NET TIPS 基本フォームから継承された内容を派生フォームでカスタマイズするには? - C# VB.NET VS.NET Windowsフォーム
http://www.atmarkit.co.jp/fdotnet/dotnettips/325winderivedform/winderivedform.html

622 :デフォルトの名無しさん:2006/11/29(水) 12:52:03
なんか似たような症例をみつけました。...仕様かよorz

[VB2005] DataGridView を貼った Form を継承できない - Insider.NET
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=29407&forum=7&0&ref=rss

フォーム継承で IDE で編集できなくなるコントロールがある - MSDNフォーラム
http://forums.microsoft.com/msdn-ja/ShowPost.aspx?PostID=314700&SiteID=7




623 :615:2006/11/29(水) 23:06:23
>>617,618,620
回答アリガトウございます。Convertの方が便利そうですね。

624 :デフォルトの名無しさん:2006/11/30(木) 00:54:48
Convert.ToInt32(true) → 1
Convert.ToInt32(false)→ 0
が便利。

625 :デフォルトの名無しさん:2006/11/30(木) 00:59:06
>>624
それくらいだったら三項演算子使おうぜ・・・

626 :デフォルトの名無しさん:2006/11/30(木) 01:05:28
6つのラジオボタンがある。
これををクリックすると、このイベントメソッド内で NumericUpDown.Value の値を変更。
( Click イベントか CheckedChanged イベント )

この値変更につれて、NumericUpDown.ValueChanged メソッドである処理が行われる。

というものをやっているのですが、ラジオボタンの 1つめを押すとちゃんと値が変更されますが
他のラジオボタンを押しても NumericUpDown の Value に 0 が入ってしまいます。
どうしてでしょう?



627 :デフォルトの名無しさん:2006/11/30(木) 01:07:16
>>626
お前さんが何か困っているんだということはよく伝わってきたが、それ以外はさっぱりだ。

628 :デフォルトの名無しさん:2006/11/30(木) 01:08:31
>>626
答えはソースコードにあるってばっちゃが言ってた

629 :デフォルトの名無しさん:2006/11/30(木) 01:15:48
ばっちゃはおまえが産まれるまえに死んだはずだが?

630 :デフォルトの名無しさん:2006/11/30(木) 01:36:54
>>626
変だな?俺のところではちゃんと動いたぞ。

631 :デフォルトの名無しさん:2006/11/30(木) 01:37:58
>>630
変かもしれません。こちらは .NET CF なので。

632 :デフォルトの名無しさん:2006/11/30(木) 01:45:51
俺のところも .NET CF だが。ちゃんと動くぞ。

633 :デフォルトの名無しさん:2006/11/30(木) 11:01:22
626 です。解決しました。
NumericUpDown.Value に 32768 以上の値を入れようとしていたのですが、
PPC での NumericUpDown.Value は Int16 までしか受け付けない仕様でした。orz

634 :デフォルトの名無しさん:2006/11/30(木) 11:11:53
実行しているプログラム自身で、どのくらいのメモリを消費しているかって
どうやって分かるのでしょうか?

635 :デフォルトの名無しさん:2006/11/30(木) 13:45:05
>>634
System.Diagnostics.Processクラスを使おう

636 :デフォルトの名無しさん:2006/11/30(木) 14:41:31
ピクチャーボックスのペイントイベントで図形を書いた上に
ボタンのイベントなどでGraphicsオブジェクトを作成し図形を書いたあと
他のプログラムのフォームが重なったりするとグラフィックオブジェクトで描いた図形だけが消えますが
これをコードで行う事は出来ますか?











637 :636:2006/11/30(木) 14:52:06
picturebox1.invalidate()を使わずにしたいです。

638 :デフォルトの名無しさん:2006/11/30(木) 15:21:21
DoubleBuffered = true;
でちらつかなくて便利なのですが; 異様に遅いです。
Vista で Aero 対応のビデオボードになったら早くなるのでしょうか?

C での ダブルバッファより大分遅いです。C で自分でダブルバッファしているのも
Aero で早くなるのかな?

結局 DirectGraphic で書くしかないのかな。。2DのCADなんですけど

639 :デフォルトの名無しさん:2006/11/30(木) 20:04:58
スケールにもよるがCADで描画するなら 
.netを直に使わないほうがいいんじゃない?


640 :638:2006/11/30(木) 21:13:13
>>639

.net は Aero 対応でも遅いのかな。。こっそり DirectGraohis に変わってくれていないんでしょうか?
C で自前で ダブルバッファにしていたのでは Aero も効かないでしょうけど。。

我が家のビデオカードでは Aero が動かないので。。。。

641 :デフォルトの名無しさん:2006/11/30(木) 21:36:09
>>636
ボタンのクリックイベントでプライベートフィールドなBitmapに描画
PaintでそのBitmap描画


642 :デフォルトの名無しさん:2006/11/30(木) 23:05:17
System.Windows.Forms.HtmlDocumentから、mshtml.HTMLDocumentに変換する方法はあるのですが、
その逆、msht(ryからSyst(ryの変換は可能でしょうか?

643 :デフォルトの名無しさん:2006/11/30(木) 23:21:52
>>642
コンストラクタ公開されてないから無理じゃないかな。

どういう必要に迫られてそういう変換が必要になったのか分からないからこれ以上アドバイスできないけど。

644 :デフォルトの名無しさん:2006/11/30(木) 23:23:41
リフレクションを駆使すれば不可能ではないが
ま、普通に IHTMLDocument 使った方がてっとりばやかろ

645 :642:2006/11/30(木) 23:58:07
無理ですか、この為に費やしたのべ一日が…。

>どういう必要に迫られて
WebBrowser.NewWindowイベントでURLを知りたいと思いまして。
で、URLはAxWebBrowser.NewWindow3なら大丈夫なのでラッパクラスを作ろうか、
けどHtmlDocumentの便利さを失うのは嫌だし、自作は無理だろうと。何あのmshtml暗黒世界('A`)
ただ、指針を頂いたのでなんとかなりそうな感じ。IHTMLDocumentで頑張ってみます。

>>643さん、>>644さんありがとうございました。

646 :デフォルトの名無しさん:2006/12/01(金) 00:05:15
その用途なら、WebBrowser の ActiveXInstance を SHDocVw.WebBrowser にキャストできる。

647 :デフォルトの名無しさん:2006/12/01(金) 10:38:11
>>635
ありがとうございます。

648 :デフォルトの名無しさん:2006/12/01(金) 10:40:29
>>641
ありがとうございます。

649 :デフォルトの名無しさん:2006/12/01(金) 20:09:45
今C#を勉強中なのですが、
(高速な)画像描画、キーボード入力など
ゲーム作成に使える情報が載ってるサイトはありますか?
ttp://clks.sakura.ne.jp/csg/index.html
↑は見つかったんですがDirectXを使わずに上記の事をしたいです。

650 :デフォルトの名無しさん:2006/12/01(金) 20:13:10
DirectX使わなきゃ高速な画像描画なんて無理不可能

651 :デフォルトの名無しさん:2006/12/01(金) 20:16:57
DirectX が駄目なら XNA だ!

652 :デフォルトの名無しさん:2006/12/01(金) 20:17:39
そこでOpenGLですよ

653 :デフォルトの名無しさん:2006/12/01(金) 20:32:47
わかったVoodooを用意しよう

654 :649:2006/12/01(金) 20:51:06
無理なんですね。
DirectX無しならBitblt呼び出すのが一番高速ですか?

655 :デフォルトの名無しさん:2006/12/01(金) 22:05:18
ファミコンのエミュレータならつくったで。
LockBitsで、scan0でMarshal.Copyでx2(512x480)までなら60fpsだせるが、
これ以上になると60fpsだせない。

656 :デフォルトの名無しさん:2006/12/02(土) 08:56:38
>>654
win32apiのかな。だったらうん。
ちゃんとダブルバッファリング使いましょうね。

657 :デフォルトの名無しさん:2006/12/02(土) 09:05:12
>>649のサイトの人、人に教えられるような知識はなさそうですね。
こういうインチキサイトは不特定多数の人に悪影響を与えるから
さっさと潰れて欲しい。最初に目についたのはこれ。

型名 ビット数 意味                 値の形式
bool  1 bit   trueもしくは false の値を返す 真偽値型(なんて呼び方するのかな?)

これ以外にもつっこみどころ満載ですね・・・。

658 :デフォルトの名無しさん:2006/12/02(土) 09:34:18
>>657
kwsk

659 :デフォルトの名無しさん:2006/12/02(土) 09:35:36
便乗ですがbitbltの使い方簡単に教えてください

660 :デフォルトの名無しさん:2006/12/02(土) 09:54:34
ttp://www.google.com/search?num=100&hl=ja&q=bitblt+C%23&lr=lang_ja

661 :デフォルトの名無しさん:2006/12/02(土) 10:37:13
>>657
痛いっすね

662 :デフォルトの名無しさん:2006/12/02(土) 10:38:29
>>657
ピープ領域って……

これのことか?
http://images.google.co.jp/images?sourceid=navclient&ie=UTF-8&q=%E3%83%94%E3%83%BC%E3%83%9C%E5%90%9B&oe=UTF-8&sa=N&tab=wi&nojs=1

663 :デフォルトの名無しさん:2006/12/02(土) 10:39:10
まちがえた
http://images.google.co.jp/images?num=20&hl=ja&safe=off&q=%E3%83%94%E3%83%BC%E3%83%9D%E5%90%9B&lr=lang_ja&ie=UTF-8&oe=UTF-8&sa=N&tab=wi&nojs=1

664 :デフォルトの名無しさん:2006/12/02(土) 10:51:48
何のことかと思ったが分かったw
しかしピープ、ピープ連呼してるねw

665 :デフォルトの名無しさん:2006/12/02(土) 12:01:59
質問です
VS2003を使ってますが、フォームのControlBoxをfalseにしたらフォーム全体のサイズが高さのみ若干小さく表示されてしまいます。
調べてみたら「ControlBox=false」「Text=""」の場合にキャプションバーが無くなるらしいので、
サイズ計算時にキャプションバーの部分だけ小さく計算されているように思います。
実際のサイズもデザイナで637、実行時617と、丁度20ピクセル(?)小さくなってます。

これを正常に表示する方法はないでしょうか。

666 :デフォルトの名無しさん:2006/12/02(土) 12:51:55
ControlBox==false && .Text==""のときだけ
キャプションの高さ足せばいいんじゃね?


667 :デフォルトの名無しさん:2006/12/02(土) 13:10:43
あまりにも適当だな

668 :デフォルトの名無しさん:2006/12/02(土) 13:13:34
>>665
何か問題あるの?

669 :665:2006/12/02(土) 13:55:29
すいません。説明が足りてませんでした。

自分が作っているフォームはTextに文字列が入っています。
でもサイズ計算はTextに文字列が入っていないものでされているようなのです。
結果、フォーム内の一番下のコントロールが途切れて表示されます。

>>666
ただしい解決策が見当たらなければ、最悪そうしようと思います。


670 :649:2006/12/02(土) 14:27:32
答えてくれた人、ありがとうございます。
Bitbltでやってみますね。

671 :デフォルトの名無しさん:2006/12/02(土) 14:39:48
>>669
普通子コントロールの配置とか考えるなら ClientSize つかわね?

672 :665:2006/12/02(土) 15:16:42
>>671
コントロールの配置はすべてデザイナ上でやっており、移動やサイズ変更は一切していません

673 :デフォルトの名無しさん:2006/12/02(土) 17:34:27
>>672
なにかが間違ってると思われ

674 :デフォルトの名無しさん:2006/12/02(土) 23:47:14
C#で実用的なテキストエディタを作成することは可能でした。
粘着さん次はどう来る?

675 :デフォルトの名無しさん:2006/12/03(日) 05:53:20
>>674
作ったの?見てみたい。

676 :デフォルトの名無しさん:2006/12/03(日) 07:42:08
ソースファイルはどういう規準でわけるべきでしょうか。
JAVAはパブリッククラス単位なのでわかりやすかったのですが。
あと、名前空間の分け方は、JAVAのパッケージ同様で良いのでしょうか?

677 :デフォルトの名無しさん:2006/12/03(日) 08:25:54
>>676
> ソースファイルはどういう規準でわけるべきでしょうか。
> JAVAはパブリッククラス単位なのでわかりやすかったのですが。
C# でも基本はクラス単位で良いんじゃない?

> あと、名前空間の分け方は、JAVAのパッケージ同様で良いのでしょうか?
パッケージと名前空間は別物だからな。パッケージにはアセンブリの方が近い。
ガイドラインによるとテクノロジ単位で分けるそうだが。
まあ .NET Framework の各名前空間見渡してみればある程度理解できる。

678 :676:2006/12/03(日) 14:18:25
>>677
なるほど。名前空間はパッケージとは別物なんですね。
テクノロジーですか。趣味の開発だと、フレームワークなんか特にないですから
プロジェクト名かソリューション名にすればいいのかな。
ちょっと勉強してみます。ありがとうございました。

679 :デフォルトの名無しさん:2006/12/03(日) 14:24:44
すいません、参照渡しの理解がイマイチなので質問させてください。
ttp://www.melma.com/backnumber_120830_237606/

static void Main(){
int[] nums = new int[] {1, 2, 3, 4, 5};
IncAll(nums);
foreach (int x in nums)
Console.Write("{0} ", x);
}
static void IncAll(int[] nums){
for ( int i = 0; i < nums.Length; i++ )
nums[i] += 1;
}
結果は、2 3 4 5 6

配列は参照型?(参照渡し?)ということで何となく理解ができましたが、
string型も参照型?って聞いたので
配列の部分を string s = "12345";
IncAllメソッドで s = "abcde";
にしても変化がありませんでした。(ref を付けるとうまくいきましたが)

string型は参照型じゃないってこと???

680 :デフォルトの名無しさん:2006/12/03(日) 14:36:45
>>679
参照型・値型と参照渡し・値渡しは別物。
参照渡しには ref または out キーワードを使う。

参照型:呼び出し先でメンバを変更したら呼び出し元でも変更される(参照しているのは同じインスタンス)
値型 :呼び出し先でメンバを変更しても呼び出し元では変更されない(呼び出し時にコピーが作られるので別インスタンス)
参照渡し:呼び出し元で new したら呼び出し元でもインスタンスが変わっている(参照しているのは同じ変数)
値渡し :呼び出し元で new しても呼び出し元でもインスタンスは変わらない(呼び出し時に変数のコピーが作られる)

で、String 型にはメンバを変更するメソッド・プロパティがない。

681 :679:2006/12/03(日) 15:40:03
>>680
サンクス

>参照型・値型と参照渡し・値渡しは別物。
おお、ごっちゃになってました。

>参照型:呼び出し先でメンバを変更したら
>値型 :呼び出し先でメンバを変更しても

これは「値を直か、参照するか」ってことでなんとなくわかりました。

>参照渡し:呼び出し元で new したら呼び出し元でも
>値渡し :呼び出し元で new しても呼び出し元でも

「呼び出し元で new しても」ってこれ、呼び出し「元」であってる?

イマイチ参照渡しと値渡しが理解できていない。

値渡しはコピーして渡すから呼び出し元は無関係って言うのがわかる

ttp://ufcpp.net/study/csharp/sp_ref.html#byref
参照渡しで呼び出し先で new したら何で元が変わらないんだ?

682 :679:2006/12/03(日) 15:41:30
static void Main(string[] args)
{
int[] ar = new int[] { 0, 1, 2, 3 };
Henkan(ar);
foreach (int i in ar){System.Console.WriteLine(i);}
}

static void Henkan(int[] ar)
{ar = new int[] { 5, 4, 3, 2 };}

結果 0123
これだと元が変わらないのに
static void Henkan(int[] ar)
{ar[0] = 5;}
だとかわる。

ええええ???

683 :デフォルトの名無しさん:2006/12/03(日) 16:07:47
ぜんぜん分かってないな。
当たり前、だろ。


684 :デフォルトの名無しさん:2006/12/03(日) 16:11:26
配列型(参照型)の値渡し。
つまり参照先のオブジェクト自体を操作したら当然呼び出し側でも影響を受ける。
っていうか、同じもの見てんだから当たり前。
変数が参照してるオブジェクト入れ替えても、
元のオブジェクト自身は操作してないんだから変わらないのは当たり前。

ar= new 〜
変数の指してる先を入れ替えてるだけ、元のオブジェクトに対しては何も操作してない
ar[0]= 〜
元のオブジェクト自体の中身を操作してるんだから変わって当たり前。


685 :679:2006/12/03(日) 16:27:00
>ぜんぜん分かってないな。
仰るとおり、勉強中です。

>ar= new 〜
>変数の指してる先を入れ替えてるだけ、元のオブジェクトに対しては何も操作してない
>ar[0]= 〜
>元のオブジェクト自体の中身を操作してるんだから変わって当たり前。

あ〜、分かり易い答えをありがとうございます。

(ar = アドレス参照)= new
だから「参照元が変わる」と考えてました。
たしかに変数に入れ替えているだけで元にはさわってませんよね。

ar[0]= 〜
これは元にさわってますよね。

ども助かりました。

686 :デフォルトの名無しさん:2006/12/03(日) 20:12:52

C#2.0をVS2005で勉強し始めたのですが
いまいち
 匿名メソッド
が理解出来ません。
何か良い解説サイト等をご存知の方がいましたらお願い致します。


※VS2003にてC#はずっと使っておりましたので一通りの文法は
分かっていますが、C#2.0については
Partial
generics
位しか理解していません。。。

687 :デフォルトの名無しさん:2006/12/03(日) 20:21:30
結局のところメソッド内メソッド
// 変数のスコープとか色々面白い側面はあるが

取りあえず @IT の記事でも見たらどうだ

688 :デフォルトの名無しさん:2006/12/03(日) 20:27:52
>>687
> メソッド内メソッド
メソッド内メソッドはアクセス制限のある普通のメソッド以上ではないのだから、
匿名メソッドの本質を言い表してない気がするぞ。

689 :デフォルトの名無しさん:2006/12/03(日) 20:33:43
>>686
匿名メソッド (C# プログラミング ガイド)
http://msdn2.microsoft.com/ja-jp/library/0yw3tz5k(VS.80).aspx

690 :デフォルトの名無しさん:2006/12/03(日) 20:39:05
>>687,688,689
どうもありがとうございます。
早速 >>689さんに教えて頂いたURLを見て勉強します。

※今月になってからVS2005を使い始めたのですが、現在の
プロジェクトではバリバリC#2.0のテクニックが盛り込まれておりまして
勉強せねばと必死になっています(-Д-)つ

691 :デフォルトの名無しさん:2006/12/03(日) 20:51:54
いいなー、C#2.0 使えるプロジェクト

692 :690:2006/12/03(日) 23:34:34
>>691
使い始めの頃はVS03と結構使い方が変わっていたので戸惑いましたが
慣れるとやっぱり生産性がVS05の方が良いと思いました。

693 :デフォルトの名無しさん:2006/12/04(月) 00:08:36
C#3.0配備されるとラムダ式でトリッキーなことしだすやつが会社に一人くらいは現れそう…

694 :デフォルトの名無しさん:2006/12/04(月) 00:10:34
つか、会社で.NETアプリを使うところがあるかどうか禿げしく疑問

695 :デフォルトの名無しさん:2006/12/04(月) 00:11:54
あるってば

696 :デフォルトの名無しさん:2006/12/04(月) 00:53:43
>>694
現実を見なきゃ。

697 :デフォルトの名無しさん:2006/12/04(月) 00:57:57
C#ができずに仕事の幅を狭めるなんてもったいない。

698 :デフォルトの名無しさん:2006/12/04(月) 01:10:56
C#マジで最高の言語だろ。

Javaデビューのオレはそう思う。

そして金輪際Javaを使う事は無いだろう。

699 :デフォルトの名無しさん:2006/12/04(月) 01:12:09
C++で試験的にDLLを作ったんだけど、
これをC#で可視できるようにするのにはどうしたらいいんでしょうorz

C#のプロジェクトの参照設定を右クリックして
参照追加>参照タブ選択>作成したDLLを選択 ってやったんですけど

「〜への参照を追加できませんでした。アクセスできて、有効なアセンブリであること、またはCOMコンポーネントであることを確認してください。」

と、言われて蹴られてしまいまいた><;

700 :デフォルトの名無しさん:2006/12/04(月) 01:13:16
COMにすればいいじゃん

701 :デフォルトの名無しさん:2006/12/04(月) 01:17:01
>>698
自分はC#から始めて途中CやC++やって最近はJAVAもやってる。
C#は自分の中でも最高だな。

702 :デフォルトの名無しさん:2006/12/04(月) 01:17:46
>>699
漏れの場合は、
1.COMにする。
2.System.Reflection.Emitあたりでナニする。
みたいなことをしたけど、2番目のはけっこうめんどい。

703 :デフォルトの名無しさん:2006/12/04(月) 01:20:59
>>701
どれひとつ満足できないんでしょ?

704 :699:2006/12/04(月) 01:21:15
>>700,702
了解です。
とりあえず、COMにする方法を調べてみます。
回答ありがとうございました。

705 :デフォルトの名無しさん:2006/12/04(月) 01:26:48
>>704
あう。>>702のはLoadLibraryみたいにやる話で、
ダイナミックリンクしちゃうならAPI使うときと同じようにDllImportできるよ。

706 :699:2006/12/04(月) 01:32:13
>>705
おお。やっぱりdllimportできるんですね!
でも、dllimortしたいんですけど、なにも考えずにDllimportを記述してもきっと自分の作成したDLLを発見できないんじゃないかと思うんですよ・・・。
自分の作成したDLLって何処に置けばよいのか全然わからなくて・・・。(言っていてなんか恥ずかしい><

707 :デフォルトの名無しさん:2006/12/04(月) 01:36:42
C++ だと単純にコンパイルしただけじゃ関数名がエラい事になるぞ。
メンバ関数は呼び出せないし。
DLL はまあ exe と同じとこにおいとけばいいけど。

708 :699:2006/12/04(月) 01:46:04
と、とりあえずexeと同じところに置いてチャレンジしてみます。

709 :デフォルトの名無しさん:2006/12/04(月) 01:50:28
なんの意味があるのか?

710 :デフォルトの名無しさん:2006/12/04(月) 01:51:25
>>708
extern "C" で __stdcall とかつけたグローバルな関数なら普通に呼べる。
dllはexeと同じ場所か%path%の通ってる場所。

711 :デフォルトの名無しさん:2006/12/04(月) 01:53:29
エクスポートしてる、が抜けてる

712 :デフォルトの名無しさん:2006/12/04(月) 01:57:30
んああ、そうだね。それ一番重要。

713 :699:2006/12/04(月) 02:14:09
動きました。
みなさまに感謝です!

714 :デフォルトの名無しさん:2006/12/04(月) 02:37:51


こんな深夜に何をしてるんだか。

流石オタクらオタクですねw

715 :デフォルトの名無しさん:2006/12/04(月) 05:31:19
C♯ではビスタ用アプリ作れないんですか?



716 :デフォルトの名無しさん:2006/12/04(月) 08:32:06
>>715
君には無理

717 :デフォルトの名無しさん:2006/12/04(月) 10:31:26
ここではWindowsCEのC#について聞いてもいいんでしょうか?

718 :デフォルトの名無しさん:2006/12/04(月) 10:54:29
>>717
.Net Compact Framework?
とりあえず聞いてみようか。

719 :デフォルトの名無しさん:2006/12/04(月) 11:08:13
WindowsCEなんですけど
例えばTextBoxにフォーカスがある場合、あるキー入力をTextBoxコントロールに渡るのを阻止したいのですが
private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
if(e.KeyCode == Keys.Left || e.KeyCode == Keys.Right)
e.Handled = true;
}
とe.Handled = true;
をつかっても阻止できません、なにか良い方法がないでしょうか?
ちなみに、.NET Framework 1.1です

720 :デフォルトの名無しさん:2006/12/04(月) 11:30:24
知らんけど想像で。
キーによっては IsInputKey() をオーバーライドしないとイベントが発生せずに前処理されちゃう。

721 :デフォルトの名無しさん:2006/12/04(月) 12:01:40
KeyPressイベントでやってみれば?

722 :デフォルトの名無しさん:2006/12/04(月) 12:11:36
あるいはWndProcオーバーライドでWM_KEYDOWNみるか

723 :719:2006/12/04(月) 12:57:46
御教示ありがとうございます。
レス無くてすみません、今色々と試し中です

724 :719:2006/12/04(月) 13:16:00
KeyPressイベントは矢印キーが入ってきません
IsInputKey(Keys keyData)のオーバーライドは参照先のメソッドがないと嫌われ
WndProc (ref Message m)のはオーバーライドはMessageなんて名前ないよと嫌われる

WindowsCE最強・・・・_| ̄|○

725 :デフォルトの名無しさん:2006/12/04(月) 14:46:01
>>719
WindowsCEで.NetFrameworkは動かないでしょ?
.NetCompactFrameworkじゃないの?
Microsoft .NET Framework Version 1.1 再頒布可能パッケージ
http://www.microsoft.com/downloads/details.aspx?FamilyID=262d25e3-f589-4842-8157-034d1e7cf3a3&DisplayLang=ja
サポートされているオペレーティング システム : Windows 2000; Windows 98; Windows 98 Second Edition; Windows ME;
Windows NT; Windows Server 2003 Service Pack 1 for Itanium-based Systems; Windows Server 2003 x64 editions;
Windows Vista Business; Windows Vista Enterprise; Windows Vista Home Basic; Windows Vista Home Premium;
Windows Vista Starter; Windows Vista Ultimate; Windows XP; Windows XP Professional x64 Edition

726 :719:2006/12/04(月) 15:15:43
Form1にツールボックスでTextBoxを貼り付けて
textBox1 System.Windows.Forms.TextBox
を造った場合
派生クラス
public class MyTextBox : System.Windows.Forms.TextBox{
}
をtextBox1に割り当てたい場合どうしたらいいでしょう?

727 :デフォルトの名無しさん:2006/12/04(月) 15:30:13
>>719
.NetCompactFrameworkならMessage構造体は
Microsoft.WindowsCE.Forms名前空間にある。
System.Windows.Forms名前空間のは使えないよ。

728 :デフォルトの名無しさん:2006/12/04(月) 16:03:58
>>726
一度コンパイルすると、そのMyTextBox がツールボックスに表示されるので
ぽとぺた。

一応参考に
class TextBoxEx : TextBox
{
    protected override void WndProc( ref Message m )
    {
        if( m.Msg == 0x100 )
        {
            if( (Keys)m.WParam == Keys.Left )
            {
                m = new Message();
            }
        }
        base.WndProc( ref m );
    }
}

729 :デフォルトの名無しさん:2006/12/04(月) 16:14:32
DllImportの引数で下記の構造体を渡さなければならないのですが、
C#ではどのように書けば良いのでしょうか?
どの型を指定すればいいのか解りません。
また、long qModifyId[2]とかやってみたのですが、サイズ指定できないと怒られたのですがワケワカメです

struct NDdeShareInfo_tag {
  LONG    lRevision;
  LPTSTR  lpszShareName;
  LONG    lShareType;
  LPTSTR  lpszAppTopicList;
  LONG    fSharedFlag;
  LONG    fService;
  LONG    fStartAppFlag;
  LONG    nCmdShow;
  LONG    qModifyId[2];
  LONG    cNumItems;
  LPTSTR  lpszItemList;
};

730 :デフォルトの名無しさん:2006/12/04(月) 16:19:56
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winprog/winprog/windows_data_types.asp

LONG → 32bit → int or uint ( 64bitのlongではない )
LPTSTR → stringにマーシャリング or IntPtrで読んでMarshal.PtrToStringAuto
qModifyId[2]→ short×2


と適当なことを書いてみる

731 :デフォルトの名無しさん:2006/12/04(月) 16:32:18
やっとちょっと意味が分かってきた
using Microsoft.WindowsCE.Forms;

public class myMessageWindowClass :Microsoft.WindowsCE.Forms.MessageWindow
{
protected override void WndProc(ref Message msg)
{
}
}
ってやればエラーにならない

さてこれからどうするか・・

732 :デフォルトの名無しさん:2006/12/04(月) 16:35:59
>>729
これでどうよ。しらんけど。

[StructLayout( LayoutKind.Sequential, CharSet = CharSet.Auto )]
struct NDDESHAREINFO
{
    public int lRevision;
    [MarshalAs( UnmanagedType.LPTStr )]
    string lpszShareName;
    public int lShareType;
    [MarshalAs( UnmanagedType.LPTStr )]
    string lpszAppTopicList;
    public int fSharedFlag;
    public int fService;
    public int fStartAppFlag;
    public int nCmdShow;
    public int qModifyId;
    public int cNumItems;
    [MarshalAs( UnmanagedType.LPTStr )]
    string lpszItemList;
}


733 :デフォルトの名無しさん:2006/12/04(月) 16:36:53
あ、stringのとこpublicがぬけてもうた

734 :デフォルトの名無しさん:2006/12/04(月) 21:13:30
お前ら精進しろよ!
構造体のサンプル
ttp://msdn2.microsoft.com/ja-jp/library/eadtsekz(VS.80).aspx

735 :デフォルトの名無しさん:2006/12/05(火) 17:35:42
予め列だけ追加しておいたDataGridView (dg)に、コードから作成したDataTable (dt)の内容を表示したいと思います。
単純に 
  dg.DataSource = dt
とすると、予め追加しておいた列の横に新たな列が追加されてしまいます。
DataTableの列と、DataGridViewの列をコードで対応付けるにはどのように書けばよいでしょうか。


736 :デフォルトの名無しさん:2006/12/05(火) 21:19:59
初歩的過ぎてすまないけど、「ボタンを押したら画像が開く」ようにするにはどうしたらいいか
教えてください。もう2、3時間調べてるけど分かりません。。。

737 :デフォルトの名無しさん:2006/12/05(火) 21:25:04
もう2、3年悩んどけ

738 :デフォルトの名無しさん:2006/12/05(火) 21:26:21
>>736
「開く」ってなんだよ開くって。
意味通じないよ。フォトショップで開くのか?
ピクチャボックスが全体にFillされたフォームのインスタンを new して Show するとか、
ちゃんと仕様を自分で決めろよ。質問するときはその脳内の仕様をちゃんと提示しろよ。
そんな姿勢でプログラムが書けるわけないだろ。


739 :デフォルトの名無しさん:2006/12/05(火) 21:27:21
とりあえずここの 4-4 まではわかる?
ttp://www.atmarkit.co.jp/fdotnet/easyvs/index/index.html

740 :デフォルトの名無しさん:2006/12/05(火) 21:28:44
開くといえばファイルハンドルをオープンすることだと相場が決まっておる

741 :デフォルトの名無しさん:2006/12/05(火) 21:29:39
>737-738
まあ落ち着け

もう持ってるのかも知れんが何か適当な入門書を買ったほうがいいと思うぞ。
ホントに入門のやつ。

742 :デフォルトの名無しさん:2006/12/05(火) 21:44:27
private void button1_Click( object sender, EventArgs e )
{
  Process.Start( @"C:\hoge\bar.jpg" );
}

743 :デフォルトの名無しさん:2006/12/05(火) 23:45:46
初心者です。お手柔らかにお願いします。

やりたいことは、
MessageBoxを、他のアプリ含めたすべてのウィンドウの最上位に表示したい、です。

親となれるFormがあれば、それをTopMost=Trueにすればよいことは判りました。
実はMessageBoxを表示したいときにFormは存在しないのですが、
今は空のFormを作ってTompMostだけ設定して、それを親にするという
頭の悪いやり方でしのいでいます。

あと、Win APIを使えば何とかなる、ということも判りました。

お聞きしたいのは、Win APIを使わずにもっとスマートなやり方はないものでしょうか、
ということです。

何卒、よろしくお願いします。

744 :デフォルトの名無しさん:2006/12/06(水) 00:10:44
自分でそれらしいFormを作っちゃってもいいけど

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/dialogboxes/dialogboxreference/dialogboxfunctions/messagebox.asp
をMB_TOPMOSTで呼ぶのが一番スマートかも。


745 :デフォルトの名無しさん:2006/12/06(水) 00:20:44
反則かもしれんが
MessageBox.Show("Hoge", "Hoge", MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1, (MessageBoxOptions)0x40000);

746 :743:2006/12/06(水) 01:14:57
>>744
Win APIという表現が間違ってたかもしれませんが
ご紹介いただいた方法が、まさに私のいう第二のやり方です。
やはりこれが一番ですか。

>>745
すみません、試してみましたが、私が意図している動作とは違いました。
参考までに第六引数の意図を教えていただけないでしょうか。



747 :デフォルトの名無しさん:2006/12/06(水) 01:30:11
>>746
>>744>>745は結局同じわけだが

MessageBox.Show()が内部で>>744を呼んでて
MB_TOPMOST(0x40000)を裏技的に設定してる。
DllImportしないで済むぶんだけ楽っちゃ楽
だが将来どうなるか分からない。

なんでMSがMB_TOPMOSTをMessageBoxOptionsに入れなかったのか
わからない。


748 :デフォルトの名無しさん:2006/12/06(水) 01:41:10
途中で送信してしまったが
あなたが意図している動作とは何?

>>745でMessageBox.Showでできることはすべてできるし
しかもTopMostにもなるはずだが

749 :デフォルトの名無しさん:2006/12/06(水) 11:29:38
>735
> DataTableの列と、DataGridViewの列をコードで対応付けるにはどのように書けばよいでしょうか。

dg.DataSource = dtより前に、dg.Columns[n].DataPropertyNameへDBの列名をセットしておく。


750 :名無し:2006/12/06(水) 12:28:33
初めまして、すごく切羽詰まってしまったのでこちらに書き込ませ頂きます
現在課題でプログラムを作成しているのですが仕様書がこちらになります。
閉じるボタンを押下すると「閉じてもよろしいですか?」というメッセージ
ボックス「はい」「いいえ」
を表示する。「はい」が押下された場合画面を閉じる
「いいえ」が押下された場合は画面を閉じない。というプログラムを
作っていますがうまくできません、どなたかご教授願えないでしょうか・・・


751 :デフォルトの名無しさん:2006/12/06(水) 12:31:48
23行目の最後にセミコロンが必要。

752 :デフォルトの名無しさん:2006/12/06(水) 13:02:36
>>750
Form.Closingイベントがきたらダイアログ開いて、その結果によって、
イベントのCancelプロパティをtrue/falseにするとかそのあたり?

753 :名無し:2006/12/06(水) 13:09:33
>752
VBなんですがFormClosingからではないと閉じることは不可能なので
しょうか?私がやろうとしているのはButtonで閉じるボタンを作り
そのボタンを押すと閉じる有無を聞かれ、はいを押せば閉じいいえを
押せば閉じないというプログラムをやっているのですが、まったくでき
ませんでした。現在のプログラムはこのようになっております。
private void button3_Click(object sender, EventArgs e)
{
DialogResult myResult;
myResult = MessageBox.Show("閉じてもよろしいですか?",
"終了確認",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question);
if (myResult == DialogResult.Cancel)
という状態です。

754 :デフォルトの名無しさん:2006/12/06(水) 13:12:20
OKならClose()

755 :デフォルトの名無しさん:2006/12/06(水) 13:13:50
OKじゃなくてYes

756 :デフォルトの名無しさん:2006/12/06(水) 14:10:25
>>753って頭おかしいの?


757 :デフォルトの名無しさん:2006/12/06(水) 16:29:01
うん。いろんな意味で。

758 :デフォルトの名無しさん:2006/12/06(水) 20:25:18
質問させてください。
100*100のBitmapを作成してそこに直接FillRectAngleで50*50の四角を描画したとき、
四角以外のところは何もかかれていない透明の状態になっているようですが、
ここにはデータが入っていないんでしょうか?それとも透明色が描かれているんでしょうか?

759 :デフォルトの名無しさん:2006/12/06(水) 20:37:09
なんでGetPixelとかで調べてみないの?

760 :デフォルトの名無しさん:2006/12/06(水) 20:43:30
ComboBoxをプログラムからドロップダウンリストを開きたいのですが
やり方教えてください

761 :デフォルトの名無しさん:2006/12/06(水) 20:49:14
DroppedDown

762 :デフォルトの名無しさん:2006/12/06(水) 21:01:28
>>761
ありがとう

763 :デフォルトの名無しさん:2006/12/06(水) 21:07:27
C#でSNMPマネージャ(GETのみ)もどきをつくりたいんですが、ググってみてもC#のサンプルがみつかりません。
VCとかならわりと簡単にできるみたいなんですけど、C#でないですかね。

外人さんの作ったsnmp.dllとかあるのは見たんですけど、できればソースの形で簡潔に書かれているものが知りたいです。

764 :デフォルトの名無しさん:2006/12/06(水) 21:18:37
>>763
http://www.google.com/codesearch?q=SNMP+lang%3AC%23

765 :デフォルトの名無しさん:2006/12/06(水) 21:23:16
GetPixelを知りませんでした。今から調べます。
ありがとうございました。

766 :デフォルトの名無しさん:2006/12/06(水) 21:37:35
なんでVC#2005でイベントハンドラとかのスタブを自動的に生成させると
throw new NotImplementedException();じゃなくて
throw new Exception("The method or operation is not implemented.");が追加されるの?

767 :デフォルトの名無しさん:2006/12/06(水) 21:46:34
中の人が手抜きだから

768 :デフォルトの名無しさん:2006/12/06(水) 21:46:44
こんばんは、質問があります。
ADO .NETでテーブル内にデータを追加しようとするとき、
もしテーブルに存在しなかったらデータをinsertし
存在していたらupdateするといった処理はどのようにやればいいのでしょうか
したのソースだと次回主キーが存在しているものを指定したらキー制約にひっかかりますよね…
// 接続用オブジェクトの作成
SqlConnection conn = new SqlConnection();
conn.ConnectionString = connStr.ToString();

// select用コマンド・オブジェクトの作成
SqlCommand selectCmd = new SqlCommand();
selectCmd.Connection = conn;
selectCmd.CommandText = selectStr;

// データアダプタの作成
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = selectCmd;

// データセットへの読み込み
DataSet ds = new DataSet();
da.Fill(ds, "table1");
DataTable dt = ds.Tables["table1"];
// 行の追加
DataRow newRow = dt.NewRow();
newRow["a"] = 1;
newRow["b"] = "い";
dt.Rows.Add(newRow);
// コマンド自動作成
SqlCommandBuilder cb = new SqlCommandBuilder(da);
// データベースの更新
int j = da.Update(ds, "table1");

769 :デフォルトの名無しさん:2006/12/06(水) 21:47:57
中の人に聞け
MSDN フォーラムの VS フィードバックあたりに

と MSDN forum 漁ったら MSFT の人のこんな発言があった

> I believe that the change was made from throwing
> an NotImplementedException to an Exception as the former
> is not included in the Compact Framework,
> therefore generating code that wouldn't actually compile.
> However, in saying that I do wish this was better.

770 :768:2006/12/06(水) 21:48:26
>>768のケース、
プログラム詳しい人にとっては簡単なことなんでしょうが、
どうか解決法をよろしくお願いいたします。

771 :デフォルトの名無しさん:2006/12/06(水) 22:12:09
>>764 さん

ありがとうございます。Google Code Searchなるものができてるなんて知りませんでした。
目的のものはみつかりませんでしたが、これは使えそうです。
本当にありがとうございます。

772 :766:2006/12/06(水) 22:20:39
>>769
なるほど。Compact Framework 1.0をサポートするためだったのか。
調べてみたら変更する方法も見つかった
http://blogs.msdn.com/ansonh/archive/2005/12/08/501763.aspx

773 :743:2006/12/06(水) 22:54:26
>>747,748

MessageBoxOptions列挙体の説明を読んで、仰っていることが理解できました。
昨日試したときはなぜかTOPMOSTにならなかったのですが、
もう一度試したらちゃんとTOPMOSTになりました。
昨日は簡単に試したくて、コンソールアプリテンプレートを使ったのがいけなかったのでしょうか。。

ちなみにMessageBoxOptions.DefaultDesktopOnlyを使ってもTOPMOSTになるようです。
MessageBoxはWindows2000以前風でしょぼいですが。


774 :743:2006/12/06(水) 22:57:20
>>747,748
すみません、お詫びと御礼を忘れました。
充分検証せずに746のようなレスしていまい、申し訳ありませんでした。
また、ありがとうございました。勉強になりました。

775 :デフォルトの名無しさん:2006/12/07(木) 00:17:00
>>774
こっちも十分に検証してないから
気にすんな

776 :デフォルトの名無しさん:2006/12/07(木) 01:50:19
DataTableについての質問です。

テーブルに複数のキーが設定されている場合のSelect方法が分からずに困っています。

たとえば、Column1がstring、Column2がint16の場合、下記のような感じかと思ってチャレンジしたのですが
あっさり失敗しました。

table.Select("Column1 = 'test1', Column2 = 123", "Column1 DESC");

どなたかご教授お願いしますorz

777 :デフォルトの名無しさん:2006/12/07(木) 01:56:42
>>776
試してないが
Column1 = 'test1' AND Column2 = 123
じゃねーの?

778 :デフォルトの名無しさん:2006/12/07(木) 01:57:53
>>776
http://msdn2.microsoft.com/ja-jp/library/system.data.datacolumn.expression.aspx
http://www.tt.rim.or.jp/~rudyard/torii009.html

779 :766:2006/12/07(木) 02:01:59
>>777-778
できました!
ありがとうございます

780 :デフォルトの名無しさん:2006/12/07(木) 12:44:17
.NET frameworkでSMTPは提供されているのに、なぜPOPはないんでしょうか?

781 :デフォルトの名無しさん:2006/12/07(木) 12:46:38
SMTPの方が需要が多いんじゃね?

782 :デフォルトの名無しさん:2006/12/07(木) 12:49:39
そういうことはMSの中に人に訊けよ。

783 :デフォルトの名無しさん:2006/12/07(木) 12:51:35
SMTPのが実装が簡単だからじゃなかろうか。

784 :デフォルトの名無しさん:2006/12/07(木) 12:58:35
SMTPはログを管理者にメールで送りつけるとか、Webアプリのご意見フォームみたいのとか、
いろいろと用途が広いけど、POPは用途限られてるしね。

785 :デフォルトの名無しさん:2006/12/07(木) 14:59:47
DataGridViewコンポーネントについての質問です。

DataGridViewのDataSourceに指定したデータテーブルの中にintのカラムがあるとします。
通常何も手を加えなければDataGridViewには数字が表示されますが、
数字に対応した文字列を表示する方法はないのでしょうか?

(1なら”処理中”と表示。2なら"処理終了"と表示。みたいなイメージです。)

786 :デフォルトの名無しさん:2006/12/07(木) 15:36:47
DataSourceの元が外部DBからSQLでとってくるものなら、SQLで置き換えるのが
一番簡単。Oracleならdecodeかますとか。

表示だけいじるのなら、DataGridViewのCellFormattingイベントで置き換えるとか、
いろいろ。


787 :785:2006/12/07(木) 15:54:18
>>786
返答ありがとうございます。
CellFormattingで試してみまっす。

788 :デフォルトの名無しさん:2006/12/07(木) 17:19:41
質問です。
Bitmap中の同一の色を全てまとめて変更することは出来ないでしょうか?
やっぱりforで地道にブン回すしかないですかね?

789 :デフォルトの名無しさん:2006/12/07(木) 17:27:45
他にどんな方法があるんだよ

790 :デフォルトの名無しさん:2006/12/07(木) 17:29:17
インデックスカラーにしてパレットをいじれば一発w

791 :デフォルトの名無しさん:2006/12/07(木) 18:03:13
>>788
http://msdn2.microsoft.com/ja-jp/library/4b4dc1kz(VS.80).aspx

792 :デフォルトの名無しさん:2006/12/07(木) 18:09:02
TextBoxの値をnullにしたいのですが、string.Emptyにしかなりません・・・
空文字禁止のデーターベースに更新を掛けるとエラーが出てしまいます
データーベースを空文字許可にする以外に方法はありますか?

793 :デフォルトの名無しさん:2006/12/07(木) 18:20:47
Control.Textはnullにはならん。

データベースに渡す前に""ならnullに変えればいいんじゃないの

794 :デフォルトの名無しさん:2006/12/07(木) 18:49:07
TextBoxの派生クラスを作ってTextプロパティをオーバーライドすれば?

795 :デフォルトの名無しさん:2006/12/07(木) 20:59:40
ばかなことすんじゃねーよ


796 :788:2006/12/07(木) 21:03:15
>>791
うまくいきました。ありがとうございました。

797 :デフォルトの名無しさん:2006/12/07(木) 21:18:54
>>793
ありがとうございます
nullに出来ないのですね・・・

798 :デフォルトの名無しさん:2006/12/08(金) 10:02:11
>>747
アプリケーションでシステムモーダル(Win95以降はただの常に手前)は
使うなというガイドラインを守ったのだと思われ。


799 :デフォルトの名無しさん:2006/12/08(金) 17:55:36
自前のアプリケーションからWEB上のhttpsサイトにログインしようとしているのですが、
上手く認証されずに「もう一度入力してください」の旨を示すhtmlが返却されてきてしまいます。
プログラムが悪いのか、パラメータ不足なのかを切り分けたいのですが
下記のコードに何か根本的な間違いはありますでしょうか?

Hashtable ht = new Hashtable();
ht["username"] = textBox_LoginName.Text;
ht["password"] = textBox_LoginPassword.Text;
string param = "";
foreach (string k in ht.Keys) {
param += String.Format("{0}={1}&", k, ht[k]);
}
byte[] postDataBytes = Encoding.ASCII.GetBytes(param);
string url = textBox_LoginUrl.Text;
System.Net.WebRequest req = System.Net.WebRequest.Create(url);
req.Method = "POST";
req.ContentType = "text/html; charset=shift_jis";
req.ContentLength = postDataBytes.Length;
System.IO.Stream reqStream = req.GetRequestStream();
reqStream.Write(postDataBytes, 0, postDataBytes.Length);
reqStream.Close();
System.Net.WebResponse res = req.GetResponse();
System.IO.Stream resStream = res.GetResponseStream();
Encoding enc = Encoding.GetEncoding("shift_jis");
System.IO.StreamReader sr = new System.IO.StreamReader(resStream, enc);
Console.WriteLine(sr.ReadToEnd());
sr.Close();

800 :デフォルトの名無しさん:2006/12/08(金) 18:12:33
↓こういうモノのをポストするの?


Content-Type: text/html; charset=shift_jis
Content-Length: nnn

username=xxx&password=yyy

801 :799:2006/12/08(金) 18:18:21
>>800
イメージ的にはそうです。
ただし、そのイメージがあってるかどうか自分でも自信がもてません。

> username=xxx&password=yyy
この部分は間違いない気がしますが、

Content-Typeについては、ログイン画面のHTMLに書いてあったものをそのまま使用すればよいのかと思い
> Content-Type: text/html; charset=shift_jis
と、しています。

また、Content-LengthについてはC#でのHTTP通信関連の情報をWEBで漁り、
パラメータ部の長さを入れているつもりです。

802 :デフォルトの名無しさん:2006/12/08(金) 18:27:06
鯖はイメージ的には処理してくれないと思うが・・・
multipart/form-data で送るんじゃないの??

803 :デフォルトの名無しさん:2006/12/08(金) 18:33:43
=と&で連結したクエリ文字列ならMIMEタイプはapplication/x-www-form-urlencodedだよ。
ASCIIに変換してるのに、charset=shift_jisと送ちゃってるのも間違い。

URIエンコードの処理が入ってないのも気になるが、その辺は簡略化したせいだろうか。

804 :799:2006/12/08(金) 18:42:47
やっぱり、色々間違ってるんですね・・・^^;
ご指摘色々ありがとうございます。
まずは、Content-Typeとエンコード部分について見直してみます。

805 :799:2006/12/08(金) 20:07:19
無事ログインできました。
MIMEタイプがいけなかったっぽいです。
(実は一個程必須パラメータが抜けてたりしましたが・・・w)

806 :デフォルトの名無しさん:2006/12/09(土) 10:37:31
perlでGUIなアプリ作ってましたが限界を感じたのでC#+.NET Framework2.0を覚えようとしてます。

言語としてのC#を深く学べるオススメの書籍を教えてください。
とりあえず今の候補はこの二つです。

プログラミング Microsoft Visual C# 2005 言語編
ttp://bpstore.nikkeibp.co.jp/nsp/book/05173/05173.html

プログラミング C# 第4版
ttp://www.oreilly.co.jp/books/4873112648/toc.html

よろしくお願いします。

807 :デフォルトの名無しさん:2006/12/09(土) 10:40:23
漏れは@ITの記事で使えるようになった・・・

808 :806:2006/12/09(土) 11:12:49
>>807
確かにtipsは充実してますね、僕も今見ながら勉強してます。
でも何か物足りないような気がしたもので…

809 :デフォルトの名無しさん:2006/12/09(土) 11:15:50
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/index/index.html
これ読破すれば完璧だよ
C#2.0の新機能には触れられてないから、それだけは他の記事で

810 :807:2006/12/09(土) 11:17:55
>>809
そうそう、漏れが読んだのまさにそれw

811 :デフォルトの名無しさん:2006/12/09(土) 11:21:56
文法や言語仕様を一通り理解したら、
GUIまわりはいろんなコントロールを使ったり作ったりして
覚えた方がはやいよね

812 :デフォルトの名無しさん:2006/12/09(土) 11:26:05
本は何冊も買ったほうがいよ。
このスレで出てくる質問も載ってる本があるし。

813 :デフォルトの名無しさん:2006/12/09(土) 11:34:10
英語版だといい本あるんだけどね。
日本語版は初心者用ばっか。

814 :デフォルトの名無しさん:2006/12/09(土) 11:43:24
初心者スレだからそれでも良さそうだけどな。

815 :806:2006/12/09(土) 11:57:09
>>807 どうやら単に僕がperl出身(トリッキーなスクリプター)なので変なこと求め過ぎただけみたい…

匿名メソッドやC#3.0のvarに親近感がわきますねw

とりあえず@ITだけでOKみたいなのでしっかり制覇して、
なれたころに洋書でも読もうと思います。
みなさんありがとうございました!


816 :デフォルトの名無しさん:2006/12/09(土) 11:59:30
洋書は理論や設計系の本のことじゃないかな

普通の初心者のようにコントロールの使い方だけでも
勉強したほうがいいんじゃないのかな

817 :デフォルトの名無しさん:2006/12/09(土) 12:10:07
varは動的型付けってわけじゃなくて、
型が明らかなときにいちいち型名を書かなくてもいいようにするだけじゃなかった?

818 :799:2006/12/09(土) 15:31:01
799です。
SSLログインは上手く行き、ログイン後のHTMLを取得することが出来たのですが
次のページを表示させるべく改めてGET又はPOSTを行うと、「セッションが無効」の旨のページに飛んでしまいます。

セッションを維持すれば良いと思うのですが、セッションを継続しつつアクセスできる手段が探し当てられません。
(本物のブラウザーではクッキーを切っても動くのでクッキー関連ではないと思っています。)

クラス名等、ヒント程度でもよいので宜しくお願いします。

819 :デフォルトの名無しさん:2006/12/09(土) 15:39:50
そのサイトの仕組みも分からんのに分かるわけがなかろう。
だいたいSSLログインてなんだ?

改めてGET又はPOSTって具体的にどう改めてなの?


820 :デフォルトの名無しさん:2006/12/09(土) 15:40:48
>>818
そこは鯖側アプリケーションの実装次第だからなんとも言えん。

セッションの保持にクッキーを使ってなければ、次に考えられるのはURIにセッションIDを付けて回るタイプ

821 :デフォルトの名無しさん:2006/12/09(土) 20:19:43
>>819SSLログインも知らんやつはもうおわっとる

822 :デフォルトの名無しさん:2006/12/09(土) 20:24:19
>>821
じゃあ説明してくれ

823 :デフォルトの名無しさん:2006/12/09(土) 21:59:41
SSLつかってるログインページでログインすることを
SSLログインとでも言ってるのかな?


824 :デフォルトの名無しさん:2006/12/10(日) 01:03:44
>>816
コントロールの使い方なんて覚えても何の意味も無い
人様に見せることが出来るアプリケーションを書こうとすると
ほとんどのコントロールは自前で用意することになるんだから

825 :デフォルトの名無しさん:2006/12/10(日) 01:20:00
そんなレベルの話してねーだろ。
少しは空気読め&人の話を聞け

826 :デフォルトの名無しさん:2006/12/10(日) 01:22:41
>>824
百歩譲ってそうだとしても,気違いじみた俺様設計コントロールにならないように
標準のコントロールの使い方ぐらい知っておくべきだろ

827 :デフォルトの名無しさん:2006/12/10(日) 01:23:01
つかったことしかないのか・・・

828 :デフォルトの名無しさん:2006/12/10(日) 01:23:47
そもそも自前で作れたらここ卒業だろ…

829 :デフォルトの名無しさん:2006/12/10(日) 02:13:15
継承を覚えたての猿みたいに糞コントロール量産してる人がいるのはこのスレですか?


830 :デフォルトの名無しさん:2006/12/10(日) 04:40:39
凄く初心者っぽい質問なんですけど

------------------------
Aクラス  普通のクラス
Bクラス  普通のクラス
Cメソッド Bクラス内で呼ばれるスレッドプールメソッド
------------------------

この条件で、AでB内部に定義されている構造体をnewしてBクラスのメソッドへ引数で渡し、
その渡されたメソッド内でスレッドプールCにその構造体を渡した場合、構造体の内部データは保障されるのでしょうか?

【イメージ図】
 1. Aクラスにて構造体をnew
 ↓
 2. newした構造体をBクラス内のメソッドへ引数で渡す
 ↓
 3. 呼ばれたBクラスのメソッドは引数で受け取った構造体をスレッドプールメソッドCへ引数として渡し実行。

831 :デフォルトの名無しさん:2006/12/10(日) 04:44:45
構造体の内部データってのがなんなのか分からん
どの観点から見てのどういう保証なのかも分からん

832 :830:2006/12/10(日) 04:51:32
構造体の中身はintやstring等のデータです。

保障というのは、最終的にCクラス内でスレッドプールが実行されますが、
このスレッドプール処理が終了する前に構造体をnewしたAクラスのメソッドの処理が終わってしまう可能性があります。
その場合、Aクラスのメソッドが終了した時点で構造体内部のデータはガベージコレクションの対象になってしまうのでしょうか?
それとも、スレッドプール処理が終了するまでガベージコレクションの対象にはならないのでしょうか?

833 :デフォルトの名無しさん:2006/12/10(日) 05:06:45
>>830
構造体は値渡しだから、Bクラスに渡した時点とCメソッドに渡した時点で
それぞれコピーされるよ。
従ってもとの構造体は消えてなくなるかもしれないが渡した構造体は存続する。

構造体でなかった場合もGC対象になるのはすべての参照が断たれたオブジェクトだから
そのオブジェクトにアクセスする手段がある限りGCされることはない。


834 :830:2006/12/10(日) 05:09:10
>>833
なるほど。分かりやすい説明ありがとうございます。

835 :デフォルトの名無しさん:2006/12/10(日) 05:47:48
つか、そこほんとに構造体でいいのかね?


836 :デフォルトの名無しさん:2006/12/10(日) 06:57:05
>>833
> 構造体は値渡しだから、
初心者スレなんだしそこはきっちり用語を使い分けようぜ。
値型、な。

なにを構造体(値型)にするべきか、については MSDN のガイドラインで触れられてるから
一度目を通した方が良い。
C と同じ感覚で使うのはあんまり良くない。

837 :デフォルトの名無しさん:2006/12/10(日) 07:15:18
>>836
いや間違ってないでしょ。構造体は値型、だから引数にすると値渡しになる。ってこと。

838 :デフォルトの名無しさん:2006/12/10(日) 07:26:07
>>837
refやoutは?

839 :デフォルトの名無しさん:2006/12/10(日) 07:34:52
スレッドにrefやoutで渡せないんだからそれは>>830の話題と関係ないっしょ。


840 :デフォルトの名無しさん:2006/12/10(日) 09:34:29
参照型を引数にすると参照渡しになるってか?

参照型/値型と参照渡し/値渡しはまるっきり別物だっつの。

841 :デフォルトの名無しさん:2006/12/10(日) 09:51:19
つっこむやつは偉そうにつっこむだけじゃなくて、ちゃんと説明してくれ。
初心者用スレなんだから。

842 :デフォルトの名無しさん:2006/12/10(日) 09:56:24
DataGridViewコントロールとDataGridコントロールって
何が違うのかよくわからない。もしかして処理速度とかですか?

843 :デフォルトの名無しさん:2006/12/10(日) 10:03:35
>>842
DataGridViewはDataGridの後継って書いてあった。
漏れはどっちも使ったことないけどね!
ttp://msdn2.microsoft.com/ja-jp/library/ms171628(VS.80).aspx

844 :デフォルトの名無しさん:2006/12/10(日) 10:13:06
>>843
うわー難しいこといっぱい書いてある。
高機能になったんだから何も考えずにDataGridView使っとけってことですね?

ありがとん

845 :デフォルトの名無しさん:2006/12/10(日) 19:07:43
Form1の外にも移動できるツールボックスを作りたいんですが
これはForm2をつくってやらないといけないんでしょうか?
良いやり方教えてください。
あとForm1とForm2を作った時にタイトルバーの状態を同じにする事は出来ますか?
例えばForm1がアクティブになった時、Form2のタイトルバーの色は薄くなってしまいますが
Form1と同じように濃くしたいんです。

846 :デフォルトの名無しさん:2006/12/10(日) 20:57:51
・そうですね。
・良いやり方もなにも。
・タイトルバー消して自前で描画。
・普通はそんなこと考えませんが。

847 :デフォルトの名無しさん:2006/12/10(日) 21:33:10
ボーダーをToolWindowだったかにしてオーナーセットしてShow


848 :デフォルトの名無しさん:2006/12/11(月) 00:34:24
ちょっと間抜けな質問かもしれないんですが、

string st = textBox1.Text;

で変数に複数行あるテキストデータを入れたのはいいのですが、
この中身を一行ずつ処理するにはどうするんだろ?

テキストファイルならReadLineメソッドで一行ずつ処理できますけど、
改行コード¥r¥nで区切って??
あれれ?でもどうやって繰り返して変数の最後まで判断するんだ?

849 :デフォルトの名無しさん:2006/12/11(月) 00:40:09
TextBox なら Lines プロパティ
StringReader 使う手もある

850 :848:2006/12/11(月) 01:05:47
即レスサンクス。

StringReaderのほうはテキストファイルの読込と似た感じになるのかな、ちょっとわからん。

Lines プロパティなんてものがあったのね。
参考になりました。

851 :845:2006/12/11(月) 09:45:13
>>846
>>847
ちょっと遅くなりましたがどうもありがとうございました。

852 :デフォルトの名無しさん:2006/12/11(月) 09:46:40
ボタンの縦幅をデフォルトよりも小さくしているんですが、キャプション文字の下側が上下に余裕があるにもかかわらず切れて表示されません。
ボタンの縦幅一杯まで文字を表示する方法はありますか?

853 :デフォルトの名無しさん:2006/12/11(月) 10:31:20
Padding?

854 :852:2006/12/11(月) 11:27:34
PaddingはALL0にしてるんですが、それでもやぱり切れてしまいます。

855 :デフォルトの名無しさん:2006/12/11(月) 12:18:08
自前で描画汁

856 :852:2006/12/11(月) 12:25:44
('A`)

857 :デフォルトの名無しさん:2006/12/11(月) 20:27:36
>>852
>キャプション文字の下側が上下に余裕がある
とあるが良く見てみると無いと思う。

多分、余裕があると思ってる部分はボタンの斜面だよ。
どうしてもあわせたいならfontを微妙に(.5ポイントほど)小さくしてみたら?

858 : :2006/12/11(月) 23:53:47
C#2.0でマスターすべきポイントの見出しを教えて下さい。
勉強します。

859 :デフォルトの名無しさん:2006/12/11(月) 23:59:16
Windowsのエクスプローラ上でファイルを右クリックすると
ポップアップメニューが出ますよね?
それに項目を加えたいんですけどやり方がのってるサイトとかありませんか?

あと、ブラウザにツールバー(Yahoo!ツールバーのようなもの)などを登録する
やり方も教えてください。


860 :デフォルトの名無しさん:2006/12/12(火) 00:06:26
>>858
C#2.0の新機能という意味ならジェネリック
その他は大体糖衣構文だからあんまり大事じゃない

861 : :2006/12/12(火) 00:10:16

>>860
ありがとうございます。
勉強します。

※業務中にですがw

862 :デフォルトの名無しさん:2006/12/12(火) 00:12:20
>>860
匿名メソッドを糖衣構文で済ますつもりか。
// いやまあ確かに使わずともほぼ等価のコードは書けるけどさ。

863 :デフォルトの名無しさん:2006/12/12(火) 01:03:26
>>859
http://msdn.microsoft.com/msdnmag/issues/04/01/WindowsShell/

後者は

http://www.codeproject.com/csharp/dotnetbandobjects.asp

864 :859:2006/12/12(火) 01:28:44
>>863
ありがとう。むずかしそうwwwwwww

865 :デフォルトの名無しさん:2006/12/12(火) 01:49:46
System.Console.Write("{0, -10}", str)な感じで均等に幅を確保したいんですが
strに半角と全角がまざるとどうしてもずれてしまいます
なんとかぴったり合わせる方法ありませんか?

866 :デフォルトの名無しさん:2006/12/12(火) 06:53:28
自分で計算すれ

867 :デフォルトの名無しさん:2006/12/12(火) 10:40:19
ExcelからDataGridViewに対してコピー&ペーストする処理は
自分で書くものなんでしょうか?
どこかで設定すれば可能になったりしませんか?

868 :デフォルトの名無しさん:2006/12/12(火) 15:17:48
自分で書きます。

869 :867:2006/12/12(火) 15:38:16
>>868
なるほど。やってみます。

870 :デフォルトの名無しさん:2006/12/12(火) 19:00:49
配列の宣言についての質問ですが

int[] dat;
でとしておいて

ある関数で
dat = new int[5];
とします。

別の関数で
dat = new int[3];
とか配列を再割り当てしたい場合、dat = new int[3];の前にメモリーの解放関数or宣言みたいなものを呼ばなくても大丈夫でしょうか?
もし必要があるならば、その関数or宣言も教えてください

871 :デフォルトの名無しさん:2006/12/12(火) 19:06:08
ふよう
それがりてん

872 :デフォルトの名無しさん:2006/12/12(火) 19:08:08
>>871
ありがとう

873 :デフォルトの名無しさん:2006/12/12(火) 22:22:17
クラスオブジェクトの配列の扱いがいまいちぴんとこないのですが
class Arrからa個のオブジェクト配列がほしいとき
Arr[] arr = new Arr[a];
arr[n] = new Arr(); //n = 0 〜 arr.Length
というように必要な要素ごとにインスタンスを作るという感覚でいいのでしょうか

874 :デフォルトの名無しさん:2006/12/12(火) 22:26:38
そう。
ただし n の最大値は arr.Length - 1 な。

875 :デフォルトの名無しさん:2006/12/12(火) 22:28:24
VisualC#2005で
カスタムコントロールの作り方がわからないので教えてください。
コントロールを継承して描画などは独自でやりたいんですが

Windowsコントロールライブラリを作成した後
public partial class UserControl1 : System.Windows.Forms.Control
でコントロールを継承させた後に何をすればいいのでしょうか
とりあえず下準備?をしたいのですが
この段階ではUserControl1' に 'AutoScaleMode' の定義がありません。というエラーが出ます。


876 :デフォルトの名無しさん:2006/12/12(火) 22:35:58
userControlじゃないよ

MSDNじっくり見てみな。

877 :デフォルトの名無しさん:2006/12/12(火) 22:37:21
http://msdn2.microsoft.com/ja-jp/library/ms171725(VS.80).aspx

878 :デフォルトの名無しさん:2006/12/12(火) 22:39:11
まずそのUserControl1を削除しろ
それからプロジェクトにカスタムコントロールを追加する
あとは↑を参照しながらOnPaintをオーバーライドするなりお好きにどうぞ

879 :デフォルトの名無しさん:2006/12/12(火) 22:50:58
新しい項目のお追加にカスタムコントロールはありました。
カスタムコントロールって新規作成→プロジェクトからは作れないんですか?


880 :デフォルトの名無しさん:2006/12/12(火) 22:54:44
Windowsコントロールライブラリでいけるでしょ

881 :デフォルトの名無しさん:2006/12/12(火) 22:58:40
×public partial class UserControl1 : System.Windows.Forms.Control
○public partial class UserControl1 : System.Windows.Forms.UserControl

'AutoScaleModeプロパティ' はContainerControlクラスにしかない。
UserControlクラスはContainerControl を継承してる。
ContainerControl は ScrollableControl その他を継承してて、
ScrollableControl が Controlその他を継承してる。

882 :デフォルトの名無しさん:2006/12/12(火) 23:01:36
Controlからの継承は初心者には難易度が高いから
UserControlから始めたほうがいいよ

883 :デフォルトの名無しさん:2006/12/12(火) 23:06:26
レスどうもありがとうございました。

継承の事も含め勉強不足のようなのでまず上のサイトを調べてきます。


884 :デフォルトの名無しさん:2006/12/13(水) 00:02:06
「Visual C#2005 逆引き大全500の極意」って本の267ページに「ファイル名をすべて所得する」
ってのがあるんだけど、
System.IO.Directory.GetFiles()の説明で
3番目の引数にtrueかfalseでサブフォルダも検索するかを
指定するって書いてあるんだけど、これって「SearchOption.AllDirectories」または
「SearchOption.TopDirectoryOnly」で指定しないと駄目なんだよね?

本に書いてあるように、trueまたはfalse入れてもエラーになるんですけど?

885 :デフォルトの名無しさん:2006/12/13(水) 00:11:46
>「SearchOption.AllDirectories」または
>「SearchOption.TopDirectoryOnly」で指定しないと駄目なんだよね?
うん。MSDNにはそう書いてる。
boolも取るGetFilesメソッドのオーバーロードは無いね。

886 :デフォルトの名無しさん:2006/12/13(水) 00:18:38
たぶんベータの頃のが混じったんだろう
結構ベータからでも変わったところがあるからな

887 :884:2006/12/13(水) 00:27:47
やっぱり間違いか。出版社にメール送っておいた。

888 :デフォルトの名無しさん:2006/12/13(水) 04:25:14
プロパティから配列にアクセスしたいのですが引数(要素?)を送ることってできないのでしょうか
インデクサからアクセスすることで応急処置したんですが・・・

889 :デフォルトの名無しさん:2006/12/13(水) 06:54:45
引数付きプロパティをやりたいのかと思ったが違うようだ
こんなのやりたいという擬似コードだけでも書けんか

890 :888:2006/12/13(水) 07:23:28
>>889
仰るとおりのことだと思います
フィールドに2つ以上の1次配列メンバがあって個別にアクセスできるプロパティがほしいと思ったんです
しかしそれのために引数が2個以上のインデクサを作るのは忍びないと感じつつ
その変数ごとにインデクサからアクセスできるクラスを作ってしまった。といった感じです

891 :デフォルトの名無しさん:2006/12/13(水) 07:30:53
>>890
C# 的にはそれで正解。
.NET のクラスライブラリも C# にあわせてそう言う構造になってるしな。

892 :デフォルトの名無しさん:2006/12/13(水) 07:30:55
まったく意味わかんね

893 :888:2006/12/13(水) 07:43:40
>>891
そうなのですか。。
何とか割り切って有効利用できるようがんばります

>>892
言葉足らずですまんかった

894 :デフォルトの名無しさん:2006/12/13(水) 08:31:11
> フィールドに2つ以上の1次配列メンバ
の意味から分からない俺は頭悪いのか?

895 :デフォルトの名無しさん:2006/12/13(水) 08:34:34
>>894
yes

896 :デフォルトの名無しさん:2006/12/13(水) 11:44:13
よくわかんねけど

public int this[int index, int index2]
{
    get
    {
        if( index == 0 )
            return arr1[index2];
        else if( index == 1 )
            return arr2[index2];
        else
            return -1;
    }
}

こんなかんじ?
インデクサに複数の引数いけるって知らんかった

897 :デフォルトの名無しさん:2006/12/13(水) 13:04:20
配列のインデックサつかうんじゃだめなんか?

898 :デフォルトの名無しさん:2006/12/13(水) 13:38:44
>>893
配列なら普通にプロパティとして公開すればインデクサで要素にアクセスできるが、それじゃ不満なんだろうか

public int[] Arr1{ get{ return arr1; } } //とか。

899 :デフォルトの名無しさん:2006/12/13(水) 15:13:53
VC#2005で
文字列をクリップボード経由で
エクセル2003のワークシート
に貼り付けたいのですが
エラーが発生してしまいます

 Clipboard.Clear();
 Clipboard.SetText("貼り付ける文字列");
 Excel.Application exl = new Excel.Application();

 exl.Visible=true;
 exl.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
 exl.ActiveCell.PasteSpecial(Excel.XlPasteType.xlPasteValues, Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone, false, false);
  ↑ここで
 「Range クラスの _PasteSpecial メソッドが失敗しました。」
 とエラーが出ます


エラーの原因がわかりません・・・
どうやれば貼り付けできるのでしょうか?

900 :デフォルトの名無しさん:2006/12/13(水) 17:00:54
>>898
リードオンリーにできないとか値チェックができないとか
インデクサの代用にはならなそう


901 :デフォルトの名無しさん:2006/12/13(水) 17:09:08
>>900
複雑なことをやろうとすると、やはりラッパクラスを作るしかないわな
リードオンリーだけならReadonlyCollection<>が使えそう

902 :デフォルトの名無しさん:2006/12/13(水) 17:41:18
デリゲート駆使してみるとか
引数つきプロパティぽくコーディングできるかも

public class CallbackIndexer<TIndex, TValue>
{
    private GetCallback getter;
    private SetCallback setter;
    public CallbackIndexer(GetCallback getter, SetCallback setter)
    {
        this.getter = getter;
        this.setter = setter;
    }
    public TValue this[TIndex index]
    {
        get { return this.getter != null ? this.getter(index) : default(TValue); }
        set { if (this.setter != null) this.setter(index, value); }
    }

    public delegate TValue GetCallback(TIndex key);
    public delegate void SetCallback(TIndex key, TValue value);
}

903 :デフォルトの名無しさん:2006/12/13(水) 17:58:29
>>902
いいかもね。
ただ個人的にはデリゲートがnullならゲッタでもセッタでも例外を投げてほしい


904 :デフォルトの名無しさん:2006/12/13(水) 18:04:47
ゲッタがnullは例外を投げるべきだけど,セッタは別にnullでもいいんじゃないの

905 :デフォルトの名無しさん:2006/12/13(水) 18:08:07
>>904
set や get が無いのはそれぞれ ReadOnlyCallbackIndexer とか別の実装にするべきだと思う。
コンパイル時にチェックしてもらえるから。

906 :デフォルトの名無しさん:2006/12/13(水) 18:11:49
ところで、匿名メソッドの戻り値の型ってコンパイラが決めてくれるんだっけ?

907 :デフォルトの名無しさん:2006/12/13(水) 18:28:20
>>905
そこまでするならインターフェースに分けて,
public interface IGetIndexer<TIndex, TValue>{TValue this[TIndex index]{get;}}
public interface ISetIndexer<TIndex, TValue>{TValue this[TIndex index]{set;}}
public interface IGetAndSetIndexer<TIndex, TValue> :
IGetIndexer<int, string>, ISetIndexer<int, string>{}

public class Sample{
public IGetAndSetIndexer Item{get{return new CallbackIndexer...}}
private class CallbackIndexer<TIndex, TValue> : IGetAndSetIndexer<TIndex, TValue>{
public TValue this[TIndex index]{get{...}set{...}}
}
}

908 :デフォルトの名無しさん:2006/12/13(水) 18:51:05
なんか初心者スレなのに凄い事聞く人多いな
クラスオブジェクトを配列に入れて、どんな目的で使うのか分からない
Cで言う関数配列なら分かるんだけど、同じもんの配列でしょ・・・・

909 :デフォルトの名無しさん:2006/12/13(水) 18:54:41
と書きながら、TextBoxとかのクラスを配列化すりゃ便利かと思い立った

910 :デフォルトの名無しさん:2006/12/13(水) 18:56:31
VB互換ライブラリにTextBoxArrayとかあるじゃん

911 :デフォルトの名無しさん:2006/12/13(水) 18:59:41
>>907
セッタとゲッタを別々にインターフェイスにできるんだな。ちょっと感動した。

しかしそれだと読み取り専用にしてもコンストラクタでsetterを要求されるのが美しくない。

912 :デフォルトの名無しさん:2006/12/13(水) 19:05:19
>>908
Stringもクラスだが?

Cの関数配列ってのはC#でいうとデリゲート配列みたいなものか。
マルチキャストできるから配列にする意味はなさそうだけど

913 :デフォルトの名無しさん:2006/12/13(水) 19:15:52
多分クラスとオブジェクトの違いが理解できてないんだよ

914 :デフォルトの名無しさん:2006/12/13(水) 19:37:01
クラスオブジェクトを別の意味でとってるんじゃないか?

フィールドも死語?

915 :デフォルトの名無しさん:2006/12/13(水) 19:44:45
フィールドはMSDNでも使ってるでしょ。

クラスオブジェクトってのはTypeクラスのインスタンスオブジェクトのことなのか?

916 :デフォルトの名無しさん:2006/12/13(水) 19:47:01
JAVAのClassオブジェクト…
staticでも渡されるオブジェクト

917 :デフォルトの名無しさん:2006/12/13(水) 19:51:59
クラスオブジェクトって言葉C#にあるの?

フィールドはある
msdnより

>このトピックでは、フィールドについて説明します。
>フィールドとは、クラスまたは構造体に含まれるオブジェクトや値のことです。
>フィールドを使用すると、クラスおよび構造体でデータをカプセル化できます。

918 :デフォルトの名無しさん:2006/12/13(水) 19:59:03
>>917
C#ではクラスオブジェクトという呼び方はしないな

他の型宣言をあらわすのも同じTypeだから、Typeオブジェクトとか言う

919 :デフォルトの名無しさん:2006/12/13(水) 20:02:56
クラスオブジェクトって,クラス自体もオブジェクトとして扱われる言語で使われる用語だろ

920 :デフォルトの名無しさん:2006/12/13(水) 20:06:15
クラスっていうクラスのインスタンス

921 :デフォルトの名無しさん:2006/12/13(水) 20:10:06
いまだに
>>888 の言ってることがわかんにゃー
メソッドじゃダメなの?

922 :デフォルトの名無しさん:2006/12/13(水) 20:19:25
>>921
foo.Bar[baz] += qux;
foo.set_Bar(baz, foo.get_Bar(baz) + qux);

923 :VC2005:2006/12/13(水) 20:23:38
object aaa = new object();
aaa = yyy.getxxx();

getxxx()はobjectの配列を返すのですが、
この場合、aaa[0]というような参照ができません。
・・というかコンパイルで怒られます。
aaaを配列にするとaaa[0]に配列が代入されます。
配列の要素を参照するにはいかがいたしましょう。?

924 :デフォルトの名無しさん:2006/12/13(水) 20:26:06
キャスト


925 :デフォルトの名無しさん:2006/12/13(水) 20:26:29
>>922
そんだけの略記のために複雑な仕掛けをあれこれ考えるなら、
単に
 foo.set_Bar(baz, foo.get_Bar(baz) + qux);
を一発で実行するメソッドを容易すりゃいいと思うけど。

926 :デフォルトの名無しさん:2006/12/13(水) 20:29:39
だから初心者スレなんだなあ

927 :デフォルトの名無しさん:2006/12/13(水) 20:31:16
>>925
プロパティはBarのほかにも何個もあるわけだし、
加減だけでなく、乗除やビット演算をしたくなるかもしれない

複雑な仕掛けを使わないで一発で実行できるメソッドを考えてみれ。

928 :デフォルトの名無しさん:2006/12/13(水) 20:32:11
>>923
つか何でobject型で受けるの?
object[] bbb = yyy.getxxx();でいいのに
使いまわしはややこしくなるだけだよ

929 :デフォルトの名無しさん:2006/12/13(水) 20:32:37
>>923
object[] aaa;
aaa = yyy.getxxx();

930 :デフォルトの名無しさん:2006/12/13(水) 20:35:17
>>927
いやだから、そういうそのクラスにとって必要な演算子を直接実装すればいいんじゃないの?
将来必要かもしれないっていう理由であれこれ作りこむのは無駄に太ってく原因だよ。

931 :デフォルトの名無しさん:2006/12/13(水) 20:37:26
>>930
もう俺にはお手上げだ。

foo.Bar[baz] += qux;
と同等の機能をメソッドと演算子で具体的にどう実装するのか教えてくれ。

932 :デフォルトの名無しさん:2006/12/13(水) 20:39:24
.netフレームワークだったら、その単位ごとに新しくクラス作ってると思うが?


933 :デフォルトの名無しさん:2006/12/13(水) 20:41:21
>>931
クラスに実際に必要なのは foo.Bar[baz] += qux; そのものじゃなくて、
それを使って表現するなんかしらの機能なんでしょ?

934 :デフォルトの名無しさん:2006/12/13(水) 20:41:43
>>932
それは結局、上で論じてきたことと一緒でしょうが

935 :デフォルトの名無しさん:2006/12/13(水) 20:42:07
結局インデクサかSetItem(int index, object value)だろ
もういいよ

936 :デフォルトの名無しさん:2006/12/13(水) 20:44:17
>>899
分からんけど
ActiveCell指定してないとかそのあたりじゃないのか?

937 :デフォルトの名無しさん:2006/12/13(水) 20:44:52
>>933
俺らが貰ったのは引数付きプロパティで配列にアクセスするって言うお題だったわけよ
それ以上つっこまれても困る

938 :デフォルトの名無しさん:2006/12/13(水) 20:45:38
すまんかった。
なんか水を差しちゃったみたいだ。

939 :デフォルトの名無しさん:2006/12/13(水) 20:47:49
まあいいじゃないか。
少ない仲間同士仲良くしようw

940 :デフォルトの名無しさん:2006/12/13(水) 21:36:19
MailMessage message = new MailMessage();
//メールの設定
message.To = "hoge@hoge.hoge";
message.From = "hoge@hoge.hoge";
message.Subject = "ほげほげ";
message.BodyEncoding = System.Text.Encoding.GetEncoding("iso-2022-jp");
message.BodyFormat = System.Web.Mail.MailFormat.Text;
message.Priority = MailPriority.Normal;
message.Body = "ほげほげほげほげ";
//添付ファイル
MailAttachment attach1 = new MailAttachment(imagefileName, MailEncoding.Base64);
message.Attachments.Add(attach1); ←←←←←←←←←←この一行
//SMTPサーバ
System.Web.Mail.SmtpMail.SmtpServer = "mail.hogehoge.jp";
//送る
System.Web.Mail.SmtpMail.Send(message);


メールを送信する処理があるので、上記の様なコードを書いているのですが
「'CDO.Message' オブジェクトにアクセスできませんでした。」
と言うエラーが出てメールが送れてません。
どうも添付ファイルに問題があるらしく、「この一行」の部分をコメントアウトすると
問題なく送信されてます。
対象のサーバがsmtpの前にpop3ですの。事前にpop3認証はしてあります。

よろしくお願いします。

941 :デフォルトの名無しさん:2006/12/13(水) 21:49:11
>>940
OSは?
System.Web.Mailは環境依存のCOMのラッパだから使わんほうが身のため。
System.Net.Mailを代わりに

942 :デフォルトの名無しさん:2006/12/13(水) 21:55:26
>>940
MSDNに非推奨って書いてあるものをどうして使うかな。

943 :デフォルトの名無しさん:2006/12/13(水) 22:05:26
些細な疑問なんだけど
bool型ってtrueじゃなくていい場合でも初期化したほうがいい?

944 :デフォルトの名無しさん:2006/12/13(水) 22:09:51
初期化しなかったら false だよ

945 :デフォルトの名無しさん:2006/12/13(水) 22:11:15
>>943
default(Boolean)==falseだが、気になるなら初期化しとけ。

946 :デフォルトの名無しさん:2006/12/13(水) 22:11:17
何に初期化されるかは言語仕様で決められてるので不要っちゃ不要

947 :デフォルトの名無しさん:2006/12/13(水) 22:19:51
>>944-946
thx。とりあえず初期化しないでおきます

948 :899:2006/12/14(木) 08:01:04
>>936
Activecellの指定はちゃんと出来てると思う
PasteSpecialの部分を
Value="ああああ"とかに置き換えると、
エラーにならずちゃんと動くんです

もうだめぽ・・・

949 :デフォルトの名無しさん:2006/12/14(木) 08:58:16
>>948
(exl.ActiveSheet as _Worksheet).Paste(Type.Missing, Type.Missing);

PasteSpecialはExcelでCopyした後でしか使えないと思う。

950 :899:2006/12/14(木) 09:26:04
>>949

おぉおおおおお、出来ましたぁああああああ
ありがとうございます!!!!


951 :デフォルトの名無しさん:2006/12/14(木) 12:53:36
>>908 を書いた者だけど、色んな角度からレスしてくれて凄く勉強になる
この初心者スレ良いよ

952 :デフォルトの名無しさん:2006/12/14(木) 17:14:35
>>941
わかりました。変えてみます。OSはWinXPHomeでした。
>>942
すいません。まだ初めてから三日目でしたのでそう言うところまでは
調べてませんでした。

953 :デフォルトの名無しさん:2006/12/15(金) 01:50:58
なにがトリガーとなったか分かりませんが、
VC# Express 上から自作したプログラムを起動すると
「ファイル 'Microsoft.Windows.CommonLanguageRuntime, Version=2.0.50727.0' が見つかりませんでした。」
と、エラーがでるようになってしまいました。

対処方法がまったく分からない状況です。どなたか解決方法しらないでしょうか;

954 :953:2006/12/15(金) 01:59:21
原因はわかったけど、復旧方法がのってない…('A`)
http://support.microsoft.com/kb/907757/ja

955 :953:2006/12/15(金) 02:09:41
解決しました。
プロジェクト参照をやめてファイル参照にしたら無事復旧しました。

手塩に掛けたプログラムだったので取り乱してしまい申し訳ない。

956 :デフォルトの名無しさん:2006/12/15(金) 19:21:03
最近始めてから3日とか言うやつ増えたな。

なんでだろ?

957 :デフォルトの名無しさん:2006/12/15(金) 19:54:22
本当のこと書くと「○ヶ月やってその程度かよ」とか言われると思ったからかも。

958 :デフォルトの名無しさん:2006/12/15(金) 20:20:16
プログラム初めて22年です…
c#は3年くらい触ってます。

959 :デフォルトの名無しさん:2006/12/15(金) 20:24:52
C#の場合は,使って覚えるよりも,先に徹底的に文法をマスターした方が早い気がする

960 :デフォルトの名無しさん:2006/12/15(金) 20:37:43
色んな言語知ってる人なら半日くらい概要を調べたら、あとは使いながらの方がはやいよ。

961 :デフォルトの名無しさん:2006/12/15(金) 20:47:55
そうだろうね。
C#からスタートって人は少ないだろうね。

俺はBASIC→アセンブラ→C→C++→JAVAだったから違和感なかった。

FORTRANやPASCALも学校で習ったがまったく覚えていない。

962 :デフォルトの名無しさん:2006/12/15(金) 21:23:43
自分の場合はC#から始めたんだけど(6年程前)
当時は流行らずに消える言語だろうとか言われてて
選択を誤ったかと心配してた。
最近は結構流行ってきてるからうれしい。
C# -> C -> C++ -> JAVA

963 :デフォルトの名無しさん:2006/12/15(金) 22:49:25
>>961
おれ自身は C とアセンブラがほぼ同時で最初で、その後、C++ → C#。
でも、今からプログラミング始めるなら C# ではじめるのが最良だと思ってる。

964 :デフォルトの名無しさん:2006/12/15(金) 23:07:30
プログラムやるなら
アセンブラ→C→C++→C#だろ

C#から始めたらVBプログラマーみたいに狭い中でしか使えない奴になる

965 :デフォルトの名無しさん:2006/12/15(金) 23:09:25
漏れは年寄りなので、
BASIC -> アセンブラ -> Lisp -> C -> C++ -> C#
だったな。

アセンブラから始めたら、「自分が考えた通りに動くものを作れる」っていう
プログラミングの魅力に触れる前に嫌になると思う。

966 :デフォルトの名無しさん:2006/12/15(金) 23:13:37
Z80 のころならアセンブラからも良かったんだがな
ま、何から始めようが本人次第

967 :デフォルトの名無しさん:2006/12/15(金) 23:15:52
>>965
それはあるなぁ

でもハードを含めてプログラムの真髄を知るのならアセンブラやってた方がいいな
まぁ今だと組み込みなんかやらなければアセンブラなんてふれる事もないだろうが
と言う漏れももうアセンブラなんて面倒くさくて組めない

968 :デフォルトの名無しさん:2006/12/15(金) 23:18:20
>>964
現状で↓を勧めるオマイの見る目の無さに感服
アセンブラ→C→C++→C#

969 :デフォルトの名無しさん:2006/12/15(金) 23:21:50
>>968
なんで?

970 :デフォルトの名無しさん:2006/12/15(金) 23:22:32
ならばここらで手を打ったらどうだ?
C→C+→C++→C+++→C#

971 :デフォルトの名無しさん:2006/12/15(金) 23:28:05
もこみちがリリーフランキー役やる時代だから何でもあり☆

972 :デフォルトの名無しさん:2006/12/16(土) 00:03:12
いきなりアセンブラはないだろw
まずやる気が起きん。

973 :デフォルトの名無しさん:2006/12/16(土) 00:22:10
まぁ何を目指すかなんだけど

今でもロボコンなんかでH8なんかのコードをCやアセンブラでしこしこ書いてる香具師
はいるわな

将来PGで飯食ってくのならVBかC#しかできんのなら偉く安く使われるだろうし
C#から低級言語に行くのは難しいし若い内しかできん

974 :デフォルトの名無しさん:2006/12/16(土) 00:36:27
初めてC#でツール作ったけど。凄い簡単だったな。
ファイル開いてテキストで読み込んで文字列の加工処理やるのが、
こんなに簡単に出来るとは。
C++でAPIとか呼んでやってたのがバカバカしく思える。

975 :デフォルトの名無しさん:2006/12/16(土) 00:50:23
自分はC#から始めたけど、Marshalクラスに手を出して
ポインタとかの使い方を覚えてからCに行った。

976 :デフォルトの名無しさん:2006/12/16(土) 00:52:29
CASL II は必須にすべきものなんだよ

977 :デフォルトの名無しさん:2006/12/16(土) 00:53:40
'95頃からDelphiやC++Builderを使ってきたが
ようやくMSも徐々に出はあるがBorlandの統合開発環境のような
使い勝手に近付いてきたかと感じた。
まあそのBorlandも'02で見限ったが

978 :デフォルトの名無しさん:2006/12/16(土) 01:09:53
VC++使っていたときはVB見たいにもっと簡単にできないのかと思ってたが
C#使ったら簡単に色んなものが組めてしまうので逆に怖い

C#良くできてるよ

979 :デフォルトの名無しさん:2006/12/16(土) 01:10:55
とりあえずCILは覚えてみたが使い道がないな。

980 :デフォルトの名無しさん:2006/12/16(土) 01:13:41
確かにC#はよくできてるし、開発効率も高い

しかし、それがゆえに仕事にならん
中学生でも使いこなせるだろう

981 :デフォルトの名無しさん:2006/12/16(土) 01:16:42
>>980
開発効率高くて仕事にならないって・・・
バカな俺にわかるように説明してくれ

982 :デフォルトの名無しさん:2006/12/16(土) 01:17:29
>>980
標準的な事をやらせるならC#だけど
重箱の隅を突っつくような細かい事やるならVC++だと思う

まぁVC++ってボタンの色変えるだけでものすごい苦労するが・・・

983 :デフォルトの名無しさん:2006/12/16(土) 01:18:33
>>981
結局人件費勝負になるってことだろ

984 :デフォルトの名無しさん:2006/12/16(土) 01:20:56
>>981
それこそアルバイトでもできそうな仕事に、好き好んで大金を払うやつなんぞおらん

985 :デフォルトの名無しさん:2006/12/16(土) 01:35:47
画像処理やストリームのビット操作が遅すぎるので使い物になりません =>C#

986 :デフォルトの名無しさん:2006/12/16(土) 01:50:35
>>985

ダブルバッファリングもしても遅いし。。。参ってます

987 :デフォルトの名無しさん:2006/12/16(土) 01:52:08
そんなに遅いかなあ。仕事で使ったことないからよくわからんや。

988 :デフォルトの名無しさん:2006/12/16(土) 02:04:28
>>985-986
Win32APIを呼び出して使うかポインタ操作するか
DirectX使いましょうね

989 :デフォルトの名無しさん:2006/12/16(土) 02:06:24
どうにも化石と学生が混じってるようで困る

990 :デフォルトの名無しさん:2006/12/16(土) 02:09:15
詳しく

991 :デフォルトの名無しさん:2006/12/16(土) 02:16:24
C#でちらつきの悩みって、なんか方向性が間違ってる気がする

992 :デフォルトの名無しさん:2006/12/16(土) 05:51:15
ラベルに縦書きで文字を表示する方法ってないですか?

993 :デフォルトの名無しさん:2006/12/16(土) 08:44:26
あるよ

994 :デフォルトの名無しさん:2006/12/16(土) 09:41:25
何が遅いかわかってるならそこだけネイティブでやりゃいいじゃん
用途に応じておいしいとこだけ使えばいいの

995 :デフォルトの名無しさん:2006/12/16(土) 10:48:40
・・・発作?

996 :デフォルトの名無しさん:2006/12/16(土) 10:50:01
>>995
???????????????

997 :デフォルトの名無しさん:2006/12/16(土) 11:12:12
>>994
突然どうしたんだ?

998 :デフォルトの名無しさん:2006/12/16(土) 11:12:51
998

999 :デフォルトの名無しさん:2006/12/16(土) 11:13:25
999

1000 :ぼるじょあ ◆yBEncckFOU :2006/12/16(土) 11:14:00
(・3・)b エェー またまた1000いただきだお

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

255 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)