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

C♯相談室 Part15

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん♯NGNG

(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。


過去スレは>>2-5あたり。

関連リンク
http://onigiri.s3.xrea.com:8080/csharp/index.php?%5B%5B%A5%EA%A5%F3%A5%AF%5D%5D
0153デフォルトの名無しさんNGNG
>>152
MSDNでクエリ結果のページングって項目みてみ。
0154デフォルトの名無しさんNGNG
>>153
ページングか
これってページの管理だけができるのかと思ってたよ
「全部で20ページあって、15ページ目を表示する」みたいな使い方。
ちょっと見てみる。サンクス。
0155デフォルトの名無しさんNGNG
ん〜、初心者的質問で恐縮ですが・・・
たとえばFormにTextBoxをDock.Fillにして配置してます。
で、その辺のテキストファイルをそのTextBoxにドラッグして表示させるにはどうしたらいいのでしょうか?
とりあえず外からのドラッグ通知を知る方法が分からないので、それさえ分かればなんとか・・・
0156デフォルトの名無しさんNGNG
んっと、ついでにもう一つ質問です。
えと、例えばPenとかBrushとかGraphicsとかのDisposeメソッドが付いてる奴は
GCに任せるよりも使い終わったら明示的にDisposeを呼んだ方がいいのでしょうか?
質問ばっかりですいません。
0157デフォルトの名無しさんNGNG
>>155-156
色々参考になるサイト
ttp://ukamen.hp.infoseek.co.jp/

GCはメモリしか面倒見てくれない。
Disposeはそれ以外のリソースを明示的に破棄するためのメソッド。
ttp://www.users.gr.jp/ml/archive/list.aspx?name=cs&no=2500
の「げに奥深きはGCかな」の一連の流れが参考になる。
0158デフォルトの名無しさんNGNG
Windows Forms の DateTimePicker で, Enterキーの押下で,
年,月,日へフォーカスを移動する方法があれば教えてください.
年,月,日へは左右カーソルでしか移動できないのでしょうか?
0159デフォルトの名無しさんNGNG
すまんいまだによくわかってないんだが,多重継承ないと不便でないのか?
自分はC++でシリアライズ機能をもつウィンドウとかを作ったりするんだが,インターフェースだと派生クラスでかく必要が出てくるよね.
多重継承できると,クラス宣言だけで出来て非常に簡便なんだがどうなんでしょう?
0160デフォルトの名無しさんNGNG
入門者向けの、おすすめの書籍を教えて。
テクニック集みたいなのじゃなくて、文法を分かりやすく説明してくれるような本。

いままで、Javaを半年ほどやっただけです。
0161デフォルトの名無しさんNGNG
VS.NETで、ユーザーコントロールや自作コントロール使ってたら、
急にデザイナで表示されなくなったりするようになることがあるんだけど、
こんな経験している人って他にもいます?
0162最凶VB厨房NGNG
kokoniimasu
0163161NGNG
おお、自分だけじゃなかったか。

どうやらデザイン時にフォームに貼り付けたり、デザイナを開いたりする時に、
コントロールのコンストラクタやLoadイベントが発生しているみたいですね。
そこでエラー発生したりすると、デザイナがエライことになってしまうみたい。
とほほ・・・
0164デフォルトの名無しさんNGNG
>159
そこはhas-a使って委譲。まぁ、呼び出しメソッド書く手間はちょろっと要るけど。

多重継承即ち悪かと言われると漏れには分からん。まぁとりあえずC#に多重継承が
ないことは動かしようがないんで、郷に入れば郷に従うってことで。
0165デフォルトの名無しさんNGNG
>>160
Java半年やって、それなりに理解できてるんだったら、別にどれ買っても
いいんでない?Java半年やって、全然身についてないんだったら、どれ
買っても無駄なような気もするが。
0166デフォルトの名無しさんNGNG
というか、Java 半年やってるんだったら、ネットで「C# Java 比較」と検索するのが一番手っ取り早くない?
0167デフォルトの名無しさんNGNG
高橋 麻奈 シリーズの やさしいJava ってわかりやすかったので
そういう感じの、入門者定番の書籍ってないかなぁと思ったのですが。

やっぱりC#って、CやC++からの乗り換えの人が多いから、そういう親切な本って少ないんですかね。
0168デフォルトの名無しさんNGNG
俺はC#->C++->C->JAVA->C#って感じに流れていったけど
(JAVAまではお遊びレベル。どの言語にするか落ち着かなかったので。)
俺は独習C#が分かりやすかったな。
C#の本じゃないけど、+オブジェクト指向開発講座ってのと結城著のデザインパターン入門が俺には良かった。
コンソールアプリ作りながらOOを勉強してからFormアプリに行くのが近道と俺は思うぞ。
0169デフォルトの名無しさんNGNG
大学受験の時、あんまり勉強しなかったけど、
参考書は毎日のように探しに行ったな。
0170デフォルトの名無しさんNGNG
MFCでPreTranslateMessageの戻り値にtrueを返して
メッセージの流れをそこで止めたのと同じことは、
どうすれば実現できますか。
mainForm1にオーバーライドしたWndProcの、
Messageのプロパティを全て変更してみましたがうまくいきません。
0171デフォルトの名無しさんNGNG
VS.NET 2003 英語版でC#のスタンドアロンアプリを作ってるんですが、
System.Web に
AspNetHostingPermission
AspNetHostingPermissionAttribute
の2つのsealedクラスしかなく、HttpUtilityなどがないため、途方にくれています。
(Object Browserで System.Web で検索した結果)

実際、using System.Web; しても、エディタでHttp... と打っても補完してくれません。

何が悪いんだろう?? 英語版だから??
0172デフォルトの名無しさんNGNG
>>171
参照設定でSystem.Web.DLLを追加してやれば?
0173デフォルトの名無しさんNGNG
関連して独り言
参照設定でSystem.Web.DLL追加したら「using System.Web; を追加しますか?」とかなんとか、
using System.Web; と書いたら自動でSystem.Web.DLL参照設定追加
してほしいと今まで何度も思った。
0174171NGNG
でけました。ありがとうございました。

「System.Web 見つからない」とかで必死にグーぐるしたら、@ITの会議室にも
同じ質問があった。。。
0175デフォルトの名無しさんNGNG
>>173
無茶。
0176デフォルトの名無しさんNGNG
>>170
IMessageFilterを実装して、Application.AddMessageFilterで登録。
0177デフォルトの名無しさんNGNG
>>167
そのレベルで考えるなら、JAVAを学習したあとC#をあえて学習しなおす必要はないと思う。
それより、チュートリアルの方が役に立つと。
0178デフォルトの名無しさんNGNG
ListView にいくつか項目を追加して表示します.
項目が多い時はスクロールバーで上下に動かして内容を見る事になります.

このような時,ユーザーの操作ではなく,コードによって,
ある条件に該当する ListView の項目を選択状態としているの
ですが,アイテム自体は選択状態となるのですが,スクロールが
自動でされないので,選択しているアイテムを探すには
ユーザーがスクロールバーで選択されているアイテムをみつけるしか
ありません.

選択されたアイテムが表示できるように,スクロールバーの値を
動かしたいのですが,何か方法はありますでしょうか?
0179デフォルトの名無しさんNGNG
>>178
ListView.EnsureVisible(int index)
0180178 NGNG
>> 179
できました.ありがとうございます.
0181デフォルトの名無しさんNGNG
Disposeもデストラクタもないけど要らなくなったオブジェクトは、
GCの対象にしたいのですが、
要らなくなったことということをどうやって書くんですか?
0182デフォルトの名無しさんNGNG
>>181
……GCをきちんと理解してるかね?

>  Disposeもデストラクタもないけど要らなくなったオブジェクトは、
>  GCの対象にしたいのですが、

デストラクタは明示的に呼ぶもんじゃないぞ。
明示的に破棄したいならnullを代入しとく。
0183デフォルトの名無しさんNGNG
>>182
明示的に「GCの対象」にしたいならとかの方がいいかもね。
# 破棄という言葉を勘違いする人が多いので
0184デフォルトの名無しさんNGNG
0xなどで始まる16進数のstringをint32に変換する方法を教えてください。
string s = "0xFFFF";
int i = Hoge(s);
みたいな。
0185デフォルトの名無しさんNGNG
>>184
Convert.ToInt32(string value, int fromBase)
//あ、これ0xつけてても問題ないんだ。
0186デフォルトの名無しさんNGNG
MDI子フォームを親フォームの中で最大化させると
勝手にコントロールボックスついてしまうんですが、
なくすことって出来ないんでしょうか

VB6とかVB.Netならできるのに
0187184NGNG
ありがとうございました
0188170NGNG
>>176
いけました。ありがとうございます。
0189た〜NGNG
教えて頂きたいことがあります。
環境:WinXP VisialC# SQLServer

現在、検索処理を作成中で、
VisualC#からSQLサーバのデータを取得するために

///ソース抜粋 Start
system.Data.SqlClient.SqlCommand commandOtherFields = new System.Data.SqlClient.SqlCommand(sb.ToString(), conn);
System.Data.SqlClient.SqlDataReader readerOtherFields = commandOtherFields.ExecuteReader();

while(readerOtherFields.Read())
{
al.Add (readerOtherFields.GetString(0)) ;
}

readerOtherFields.Close();
commandOtherFields.Dispose();

///ソース抜粋 End

と、このような感じでデータを取得しにいっているのですが、
ExecuteReaderが行われている段階(つまり途中で)
で、検索をキャンセルしたい場合は
このSQLConnection自体を切断してかまわないのでしょうか?
それともExecuteReaderのように同期ではなく非同期に
データを読むやり方があるのでしょうか?

説明がうまくないのでわかりにくいかもしれませんが
よろしくお願いいたします。
0190デフォルトの名無しさんNGNG
>>189
マルチポスト ハケン(・∀・)
0191デフォルトの名無しさんNGNG
まるぽぐらいで騒ぐか
0192デフォルトの名無しさんNGNG
>>191
ガ・・・
ガッ
0193デフォルトの名無しさんNGNG
>>189
なんで、検索をキャンセルしないといけないの?
WHEREできっちり該当を絞れば検索なんてすぐ終わるんじゃない?
0194デフォルトの名無しさんNGNG
>>189
ExecuteReader()の実行が、人間にキャンセルできるくらいに遅いということですか?
それDBアクセス側を見直したほうが良いとおもわれますが・・・
0195デフォルトの名無しさんNGNG
「らっぴんぐ」

ってなんですか?
分かりやすく教えて欲しいです。
0196デフォルトの名無しさんNGNG
http://www.google.com/search?num=50&hl=ja&ie=UTF-8&q=%E3%83%A9%E3%83%83%E3%83%94%E3%83%B3%E3%82%B0&lr=lang_ja
0197デフォルトの名無しさんNGNG
>>196
下らんこと書くな。ぼけ
ほらよ。
http://www.asahi-kasei.co.jp/saran/products/saran_h/saran_h.html
0198デフォルトの名無しさんNGNG
Caps/Num/Kana Lockの状態はどうすれば取得できますか。
0199デフォルトの名無しさんNGNG
C#これは買っとけ!って本ありますか?
レベルはK&R一回読んだレベルです。
憂鬱なも一回読みました。
0200デフォルトの名無しさんNGNG
あと、独習javaも一回よみました。
0201デフォルトの名無しさんNGNG
重い腰を上げてC#を始めようと、入門書を買いに行ったんです。
売り場にはC#の棚もあって、数はそれなりにあってんだけど、
昔、C言語を勉強したときに読んでいた林晴比古のものがあったんで、それを選びました。
4000円。

さっき、さっそく読もうと手に取ったら
「新 Visual C++.NET」って書いてあるわけですよ。

C++.NET

俺はこのままC++.NETを始めるべきでしょうか?

ちなみに内容は読みやすそうでした。
0202デフォルトの名無しさんNGNG
買った本でどの言語を始めるかを決めるとは、男の中の男ですな。
0203デフォルトの名無しさんNGNG
>>201
C-OBOLの本でなかったことに感謝し、C++を勉強すべし
0204デフォルトの名無しさんNGNG
重い腰を上げて入門書を買ったにもかかわらず、切替は軽やかだなw
0205デフォルトの名無しさんNGNG
まあマジレスすれば、C#の方が言語の習得に使う時間は少なくて済む。四千円分以上。
仕事にしようと言うんでない限りC#のほうが良かろう。
0206201NGNG
前書きを読んでみると
・VC++.NETの学習には労力がかかる
・異質な世界の「業界語」

とか書かれちゃってますw
なのでC#をメインで、C++は怖いもの見たさで流し読みすることにしました。

>>202-205
助言ありがとう。
0207デフォルトの名無しさんNGNG
動くだけのプログラム開発ならC#はかなり簡単だが、
.NET内部の不透明さや複雑さのせいで、
より速いコードを書こうとか考えると難しくなる。
機械の動きを理解できれば最終的には低レベル言語がよろしい。
0208デフォルトの名無しさんNGNG
FormにオーバーライドしたProcessKeyPreviewって、
なぜかComboBoxにフォーカスがあるときは呼ばれないね。
また、呼ばれるコントロールでもキーによっては
falseを返してもtrueと同じになる。
ex. Delキーはt/fで区別されるのに、BSキーはされない。
0209199-200NGNG
だれかアドバイスください。おなかいたい。
0210デフォルトの名無しさんNGNG
>>209
参考書は胃薬でも精神安定剤でもない。
0211デフォルトの名無しさんNGNG
>>209
「C#によるプログラミングWindows」でもかっとけー。
ちょっと高いけどその価値はあるから。
0212デフォルトの名無しさんNGNG
>>209
Helpにもウェブページにも参考書をはるかに凌ぐ情報があるぞ。
しかも、入門レベルから高度なものまで!!
なぜ、利用しない?
0213デフォルトの名無しさんNGNG
>>212
だね。
オレ、一冊も持ってない。
書店に行ってもしっくりくる本がない。
オレ的に不要な超入門的なものは日本語でもたくさんあるのに、欲しい本は英語版ばかり。
良い本は翻訳して欲しいなー。
0214208NGNG
後半は誤解だった。すまね。ComboBoxのは事実。
0215デフォルトの名無しさんNGNG
>>212-213
>>209はプログラムが書きたいわけじゃなくて、C#の本を読みたがってるんだから
教えてあげなよ。
0216デフォルトの名無しさんNGNG
>>215
そうねぇ。じゃ。
標準C#.NETプログラミング(1)と(2)が良いかな。
でもね。本って目的によっても、好みによっても選択肢が違うから
売れてる本を知りたいならAmazonで調べてみたら。
JAVAがわかるなら、実際に何か作ってみて「?」なところはHELPへGO!!
0217209NGNG
どうも。

とりあえず@ITの改訂版C#入門でもやってみようと思います。
本はとりあえずあきらめました。
0218デフォルトの名無しさんNGNG
こんにちは。
Windowsフォームを表示する際に画面の中央に表示させたいのですが、
どうもうまくいきません。いろいろ試行錯誤したソースが以下です。
なにがおかしいのでしょうか。記述はFormのInitializeComponent関数の
後ろにしています。

Rectangle tempRectangle1 = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea;
Rectangle tempRectangle2 = this.Bounds;

this.label2.Text = System.Convert.ToString(tempRectangle1.Width)
+ "," + System.Convert.ToString(tempRectangle1.Height);
this.label3.Text = System.Convert.ToString(tempRectangle2.Width)
+ "," + System.Convert.ToString(tempRectangle2.Height);
//this.label2.Text = System.Convert.ToString(System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Width);
//this.label3.Text = System.Convert.ToString(System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height);
//this.DesktopLocation.X = (tempRectangle.Width - tempRectangle2.Width) / 2;
//this.DesktopLocation.Y = (tempRectangle.Height - tempRectangle2.Height) / 2;
//this.label2.Text = this.DesktopLocation.ToString();
//this.DesktopLocation = new Point((tempRectangle1.Width - tempRectangle2.Width) / 2, (tempRectangle1.Height - tempRectangle2.Height) / 2);
//this.label3.Text = this.DesktopLocation.ToString();
//this.Location = new Point((tempRectangle1.Width - tempRectangle2.Width) / 2, (tempRectangle1.Height - tempRectangle2.Height) / 2);
this.Text = "Hello,World";
this.Top = (tempRectangle1.Width - tempRectangle2.Width) / 2;
this.Left = (tempRectangle1.Height - tempRectangle2.Height) / 2;
0219デフォルトの名無しさんNGNG
どうおかしい?
これだと何処に表示されてんの?
0220デフォルトの名無しさんNGNG
>>219
不定です。
0221デフォルトの名無しさんNGNG
>>218
this.StartPosition = FormStartPosition.CenterScreen; だけでいいじゃん。
0222デフォルトの名無しさんNGNG
>>218の問題は>>221で正解だろうけれど、
FormのコンストラクタでLocation変えても指定した位置に出なくて俺も悩んだ。

Loadの中でも出なかったっけ?
0223デフォルトの名無しさんNGNG
C#2003を使用しています。
したいことは、ボタンを押すとピクチャーボックス内に線を引き、その画像を
保存することをしたいのですが、
「'System.NullReferenceException' のハンドルされていない例外が 040516.exe で発生しました。
追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。」
というメッセージがで前にすすみません。
よいアドバイスを頂けませんか。

private void button1_Click(object sender, System.EventArgs e)
{
Graphics g = this.pictureBox1.CreateGraphics();
Pen myPen = new Pen(Color.LightGreen);
g.DrawLine(myPen,100,100,200,200);
pictureBox1.Image.Save(@"d:/testZ.bmp", System.Drawing.Imaging.ImageFormat.Bmp);
}
0224デフォルトの名無しさんNGNG
Imageがnullなんでは?
0225デフォルトの名無しさんNGNG
下のような感じにしましたら
エラーはでなくなったのだけど、線が保存できません。

pictureBox1.Image = Image.FromFile("d:/st1.bmp");

Graphics g = this.pictureBox1.CreateGraphics();
Pen myPen = new Pen(Color.LightGreen);
g.DrawLine(myPen,100,100,200,200);

pictureBox1.Image.Save(@"d:/testZ.bmp", System.Drawing.Imaging.ImageFormat.Bmp);
0226デフォルトの名無しさんNGNG
new Bitmap() して
bmp.Save() かなんかすればいいんでは?
0227デフォルトの名無しさんNGNG
Graphics g = this.pictureBox1.CreateGraphics();
↓
Graphics g = Graphics.FromImage(pictureBox1.Image);
でどうかな
0228218NGNG
>>221
ありがとうございました。できました。

>>222
無理なんですか、今までどうにかやろうと格闘していました。
丸一日無駄だったのか(笑)
0229デフォルトの名無しさんNGNG
すいませんが、C#でC++のlistやvectorみたいなのってありますか?
とりあえず可変長の配列が欲しいと思ったのですが
0230デフォルトの名無しさんNGNG
>>229
System.Collections名前空間を調べれ
0231デフォルトの名無しさんNGNG
>>227
ありがとうございます。
0232デフォルトの名無しさんNGNG
>>230
うおお、たくさんある!
ありがとうございました
0233デフォルトの名無しさんNGNG
すいませんがもう一つお願いします

メニューバーにあるような、ファイル(F) の(F)みたいなのをつくりたいのですが
ShortCutの項目ではAlt+Fで割り当てられませんでした
これはどこで割り当てるのですか?
0234デフォルトの名無しさんNGNG
>>233
"ファイル(&F)"
0235デフォルトの名無しさんNGNG
>>234
できました
ありがとうございました
0236デフォルトの名無しさんNGNG
C#でRs232通信したいんだけど、どうしたら言いのでしょう。
0237デフォルトの名無しさんNGNG
>>236
ここでも参考にしたら?
http://msdn.microsoft.com/msdnmag/issues/02/10/netserialcomm/default.aspx
0238デフォルトの名無しさんNGNG
>237
 ありがとう。
0239デフォルトの名無しさんNGNG
ListViewを使っているのですが、
ある列だけ非表示にすることってできませんか?
ListViewはデータを持っているけど、非表示にしてユーザに見せたくないのです
よろしくお願いします
0240デフォルトの名無しさんNGNG
>>239
非表示にするっていうか、ColumnHeaderのWidthをゼロにするとか。
0241デフォルトの名無しさんNGNG
見せないListViewって存在価値あるの??
0242デフォルトの名無しさんNGNG
ListViewItemのTagプロパティに見せたくないデータをいれとけば?
0243デフォルトの名無しさんNGNG
>>241
あるよー。
0244デフォルトの名無しさんNGNG
>>239
そういうのって結局、テーブルでデータを持って、表示はそのうちの一部の列にすればいいと思うが。
0245デフォルトの名無しさんNGNG
>>240
ColumnHeaderのWidthを0にしてもマウスで触られると見えちゃった気がするんだけど。
違ったかな…
0246239NGNG
Tagにいれておくことでなんとかできました
Tagって何のためにあるのかよく解っていませんが
とりあえずこれでやってみたいと思います
0247デフォルトの名無しさんNGNG
>>246
ヘルプを見れば何となく分かるけど、
要はそのコントロールに関連の深いデータを入れるプロパティ。
ま、都合良く好きなものを入れられるプロパティとおもっといて間違いじゃない。
0248デフォルトの名無しさんNGNG
ListViewを使っているのですが、ウインドウのサイズ変更をしたときに
ちらつきが激しいのですが、何か対処法はありませんか?
他のアプリケーション動かしてみるとまったくちらつきが発生してないので
これはどうやってるんだろう…
0249デフォルトの名無しさんNGNG
>>248
このへんをヒントにしたら?
http://www.codeproject.com/cs/miscctrl/listviewxp.asp
http://www.codeproject.com/cs/miscctrl/listviewff.asp
0250デフォルトの名無しさんNGNG
Microsoft Win32 と Microsoft .NET Framework API との対応
http://www.microsoft.com/japan/msdn/net/general/win32map.asp#win32map_performancemonitoringfunctions

ここきれいにまとめてあって便利


ところで、http://www.google.com/intl/ja/sitesearch/bsd.gif
と入力したら
http://www.google.com/intl/ja/sitesearch/ と
bsd.gif に文字列を分けてくれる関数ってないですか?
0251デフォルトの名無しさんNGNG
>>250
取り敢えず思いつくのはSystem.IO.Pathクラスの各メソッド
0252デフォルトの名無しさんNGNG
>>251
サンクス

public class systemio_path {
public static void Main(string [] args){
string files;
files=Path.GetFileName(
args[0]);
Console.WriteLine(files);
}
}
■ このスレッドは過去ログ倉庫に格納されています