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

C♯相談室 Part14

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

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


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

関連リンク
http://onigiri.s3.xrea.com:8080/csharp/index.php?%5B%5B%A5%EA%A5%F3%A5%AF%5D%5D
0232デフォルトの名無しさんNGNG
>>231
KeyPressならHandledプロパティでビープ音を抑制できるらしい。
……でもKeyPressって使いにくいんだよな。
0233デフォルトの名無しさんNGNG
>215
昔Javaのソースを見て、
Delphiならポトペタで終わる部分を一々手書きしてるので
嫌になったことがあるよ。
C#はJavaとDelphiのいいとこ取りさw

0234229NGNG
>>232
KeyPress内でe.Handledをtrueにして(するだけ)、実際のキーイベント処理はKeyDown内でのままだと
特に手間もなく、警告音を鳴らなくすることができました。
これだと全キーで警告音が鳴らなくなるので、KeyPress内で入力キー判別して…とやってたら
結局KeyDownじゃなくてKeyPressで全処理すればいいかなということに気づいた次第(´・ω・`)

なんにしても助かりました。ありがとうです。
0235デフォルトの名無しさんNGNG
ボタンを動的に生成するにはどうしたらいいですか。
「マインスイーパ」みたいに大量のボタンを生成する時に
いちいちコピペを繰り返すわけにもいかないし、
ボタンをクリックした時の動作も大量に書くのも無理ですし
0236デフォルトの名無しさんNGNG
>>235
デザイナで作らずにコードで書けばいいじゃんか
0237デフォルトの名無しさんNGNG
System.Drawing.Bitmap bitmap1 = new System.Drawing.Bitmap(<元ファイル名.jpg>);
bitmap1.Save(<新ファイル名.jpg>, System.Drawing.Imaging.ImageFormat.Jpeg);

とすると、<新ファイル名.jpg>は<元ファイル名.jpg>と
はっきり目で分かるくらい違いが出てしまいます。
JPEGだと品質によって変わるからかと思って、BMPにしても(上のjpgとJpegはBmpに)
目では分からない程度ですがバイナリに違いが出てしまいます。
(途中でbitmap1に書き込みをしたいので単なるコピーではなく)
元のファイルと同じ品質で新しいファイルを作るにはどうすればいいでしょうか?
0238デフォルトの名無しさんNGNG
同一のJPEGファイルをPhotoshopでBitmapに書き出したのと
MS Paint で書き出したのとで各ピクセルを比較すると微妙に色が違ってる
JPEGのデコーダによって違いがあるからではないか?
0239デフォルトの名無しさんNGNG
ちなみにjpegの保存時の品質指定は
ttp://dobon.net/vb/dotnet/graphics/encoderparameters.html
を参考に。
0240デフォルトの名無しさんNGNG
>>238-239
ありがとうです。
その方法で品質高めにすればいいかなと試してみたけど色合いが変わってしまいます。
それを調整するとしてもASP.NETなのでブラウザ、OSで違いが出そうなので
適当に妥協することにします。
0241デフォルトの名無しさんNGNG
>>240
追記
色合いが変わってしまうのは違うフォーマットでした。
JPEGで元画像と同じくらいのサイズになる品質85程度だと違いが分からない。
0242デフォルトの名無しさんNGNG
>233
JBuilderとか使ったことないんか?
まぁいいけどね。Javaスレじゃないんだし。
0243デフォルトの名無しさんNGNG
文字コードEUC-JPのMySQLからODBCでデータをSELECTし、
odbcDataAdapter1.Fill(dataSet11.meibo);
のようにしてデータグリッドに表示させようと思うのですが、
どうやって文字コードを変換すればよいのでしょうか??
0244デフォルトの名無しさんNGNG
> 文字コードEUC-JPのMySQL

この時点でもうダメポと思われ
0245デフォルトの名無しさんNGNG
なぜですか?
0246デフォルトの名無しさんNGNG
EUC-JPがこわいのでしょう ;-)
0247デフォルトの名無しさんNGNG
MySQLってUNICODE対応してないんだっけ
0248名無しさん♯NGNG
ttp://blogs.msdn.com/csharpfaq

C# Teamのweblogです。期待しましょ。
0249デフォルトの名無しさんNGNG
ネームスペース内共通の定数ってどこに記述するのが良いんですかね?
普通にstaticでクラスに定義しておけば良いんですかね?
皆さんはどうされてますか?
0250デフォルトの名無しさんNGNG
>>249
その方法でなにか問題でも?
0251デフォルトの名無しさんNGNG
>>250
ださい
0252デフォルトの名無しさんNGNG
ださくてなにか問題でも?
0253デフォルトの名無しさんNGNG
>>249
整数であればenumを使うこともある。
モジュール内でどの程度広い役割を持っているかにもよるだろうけど
0254デフォルトの名無しさんNGNG
>>252
そりゃー、コードはエレガントじゃないとさ
それでメシ食ってるならなおさら
0255デフォルトの名無しさんNGNG
>>254
つーか別にださくないような?
ネームスペース内に限定可能な分、defineよりエレガントじゃないか。
0256デフォルトの名無しさんNGNG
正規表現を使わない検索できませんか?
オプションでIgnoreCaseとRightToLeft が使えると尚いいです。
0257デフォルトの名無しさんNGNG
コードにエレガントさなんて不要と思いますが・・・
いかに早く動作するかが問題でしょ
0258デフォルトの名無しさんNGNG
>>257
機械語でな。
0259デフォルトの名無しさんNGNG
全部MSILでプログラミング?



……お客さん、チャレンジャーですね。
0260デフォルトの名無しさんNGNG
もういい加減ポトペタでコード書くの止めてくれませんか?
0261WhidbeyネタNGNG
>>260
> もういい加減ポトペタでコード書くの止めてくれませんか?
コードスニペットとかインテリタスクとかは邪道ですか、そうですか。
0262デフォルトの名無しさんNGNG
ポトペタってなに?
0263デフォルトの名無しさんNGNG
private string SockRecv(Socket tmpS)
{
int bytes;
byte[] RecvBuff = new byte[256];
MemoryStream RecvMsg = new MemoryStream();
Socket pop3 = tmpS;

do
{
bytes = pop3.Receive(RecvBuff,RecvBuff.Length,SocketFlags.None);
RecvMsg.Write(RecvBuff,0,bytes);
}
while(pop3.Available != 0);

return Encoding.ASCII.GetString(RecvMsg.ToArray());
}
をつかって
0264デフォルトの名無しさんNGNG
//RETRコマンドの送信
for(int count = 1; count <= mailCount; count++)
{
SendComd = "RETR " + count + "\r\n";
Console.WriteLine(SendComd);
SendBuff = Encoding.ASCII.GetBytes(SendComd);
pop3.Send(SendBuff,SendBuff.Length,SocketFlags.None);
RecvComd = SockRecv(pop3);
Console.WriteLine(RecvComd);
}

//QUITコマンドの送信
SendComd = "QUIT\r\n";
SendBuff = Encoding.ASCII.GetBytes(SendComd);
pop3.Send(SendBuff,SendBuff.Length,SocketFlags.None);
RecvComd = SockRecv(pop3);
Console.WriteLine(RecvComd);

pop3.Shutdown(SocketShutdown.Both);
pop3.Close();

の操作をするとRETRコマンドの途中で止まって
QUITコマンドまで逝けないのはなぜなんでしょう?
原因が全くわかりません・・・・
0265デフォルトの名無しさんNGNG
>>264
まずはブレークポイントなりで具体的にどこで止まってるのかを確認しないと。
0266デフォルトの名無しさんNGNG
>>249
メインになる部分で、値を設定して、別クラスにはプロパティでくれてやってる。
0267デフォルトの名無しさんNGNG
for(int count = 1; count <= mailCount; count++)
{
SendComd = "RETR " + count + "\r\n";
Console.WriteLine(SendComd);
SendBuff = Encoding.ASCII.GetBytes(SendComd);
pop3.Send(SendBuff,SendBuff.Length,SocketFlags.None);
RecvComd = SockRecv(pop3);
Console.WriteLine(RecvComd); <-ここにブレイクポイント
}

して実行したところ

RETR 1

+OK 406 octets

RETR 2

(メール2通分の内容)

が表示されてここでプログラムが
終わってまいQUITコマンドまで逝けなかった。
0268デフォルトの名無しさんNGNG
また気になったこととして
ブレイクポイントを置かないで実行すると
RETR 1

+OK 406 octets

RETR 2

(メール1通分の内容)

となって挙動が変るのですがなんでだろう・・・
0269デフォルトの名無しさんNGNG
ステップインで一行ずつな?
何が表示されたかじゃなくてコードのどこで止まってるのかが重要なんだぞと。
それともなにか、いきなり終了するのか?
0270デフォルトの名無しさんNGNG
ステップインで一行ずつ実行した場合は全ての結果が表示
されるんだけどブレイクポイントを置かないで実行すると
一回目のwhileループが終わった後のConsole.WriteLine(RecvComd);
の結果までしか表示されない・・・
というか挙動が違うような気がする・・・
0271デフォルトの名無しさんNGNG
もっと前の所にブレークポイント置いてみる。
0272デフォルトの名無しさんNGNG
>>262
D&D
0273デフォルトの名無しさんNGNG
C#を触り初めたばかりなんですが、
C# = (VB + JAVA + Delphi + C++) / 4 + α
という認識でよろしいですか?
0274デフォルトの名無しさんNGNG
>>262
部品をフォームに「ポト」っと落とすと「ペタ」っと貼りつく開発環境。
0275デフォルトの名無しさんNGNG
>>273
混合比率が1:1:1:1じゃない気もするけどおおむねその通り。
0276デフォルトの名無しさんNGNG
でもMSの後押しが弱いような気がする
0277273NGNG
>>275
確かにその通りで、最初は重み付き平均で表そうと思ったのですが
面倒臭くなったのでやめました。

>>276
MSの後押しは弱いのでしょうか?MSはLonghornを筆頭とする次期
Windowsの開発言語のStandardとすることを目標としているように
私は感じます。Win32APIに至ってはエミュレータ上で動作するように
なり、VirtualPC状態になると聞いたので、腹をくくってC#を始めたん
ですけどね…
0278デフォルトの名無しさんNGNG
勉強始めて1週間です。
デリゲートが理解できません。
ダメですか?
0279デフォルトの名無しさんNGNG
>>278
今までに他のプログラミング言語を使った経験は?
それが結構あってデリゲートが分からないならダメです。
0280デフォルトの名無しさんNGNG
Perl,PHP,ActionScriptです。
0281デフォルトの名無しさんNGNG
>>280
それがダメ。
0282デフォルトの名無しさんNGNG
じゃあどうしろと?
0283デフォルトの名無しさんNGNG
Lisp でもやりなさい
0284デフォルトの名無しさんNGNG
やだ
0285デフォルトの名無しさんNGNG
>>278
必要になるまで放っておけばいいよ。
0286デフォルトの名無しさんNGNG
いつ必要になりますか?
0287285NGNG
>>286
とりあえずは、自作クラスにイベントを用意したくなったら必要になるね。
まずは、フレームワークのまねで実装することから始めて、徐々に理解していけば
十分だと思うけど。
理解しなくても使うことはできるから。
0288デフォルトの名無しさんNGNG
多分、当分必要にならないと思うよ。

それはそれとして、自分も質問があるっす。

キーボードイベントの
キーコードとキーデータって何が違うんですかね?
どっちも、同じENUMのKeys値が返ってくるだけなんですけど。
まあ、別に困ることは無いので良いのですが。
0289デフォルトの名無しさんNGNG
どうやら、同じ1byteの右半分と左半分の違いのようなんですが、
シフトキーやコントロールキーなどの特殊なキーの判別に
ビット演算をつかって判別するのに利用するみたいですが、
別にそんなことしなくても、
普通にシフトキーとかはkeys値自体で分かるのですが、、、。
0290デフォルトの名無しさんNGNG
あ、分かったから良いです。
どうやら、同時押しの時に、
他の文字と一緒に押されたかの判別に使うということが分かりました。
0291デフォルトの名無しさんNGNG
自分のプログラムの自作ルーチンで
アップ、ダウンイベントで処理するところを、
事前に判断して処理してフラグを立ててくれてるってことのようですね。
0292デフォルトの名無しさんNGNG
Windows画像とfaxビューワーに独自形式の画像を
表示させる事は可能でしょうか?
出来ればこれをC#でやりたいと思っています。
資料を探してみたのですが、見つけることが出来ませんでした・・・
どなたかアドバイスをお願いいたします。
0293デフォルトの名無しさんNGNG
>>292
独自形式からテンポラリにbmpかjpgで保存して、それを開くってのじゃダメ?
0294292NGNG
独自形式というのがデジカメの生ファイルなのです。
それをプログラム的にbmpやjpeg形式に変換することは
当然可能なのですが、できればそのままの形でJpeg等と
同等の扱いで鑑賞したいのです。
0295デフォルトの名無しさんNGNG
IMEの変換機能とかってC#から利用できるんでしょうか?
できるなら郵便番号変換に使いたい・・・
0296デフォルトの名無しさんNGNG
どう言う場面でどう使うのさ。
textboxをつかえば全然普通に日本語入力は受け付けてくれるよ。
0297デフォルトの名無しさんNGNG
答え:
APIを使う。
0298デフォルトの名無しさんNGNG
TabPageが切り替わったときに処理する方法教えてください。
今から本買いにいってきますけど。
帰ってきたら書いてあったらいいなぁ。
よろしくお願いします。
0299デフォルトの名無しさんNGNG
>>296
TextBox1に七桁の数字を打ったら、
TextBox2に住所が入るっていう具合にしたいんです。
0300デフォルトの名無しさんNGNG
>292
いまどきjpeg以外の独自形式で保存するデジカメなんてあるの?
とりあえず独自形式が何なのかハッキリさせないとアドバイスも
貰えないのではないかと。
0301デフォルトの名無しさんNGNG
>>299
Win32 API
Webサービス
データ落としてきてDBにしてそこから取得
0302デフォルトの名無しさんNGNG
http://www.postan.jp/postanws.htm

インターネットに接続しているならWebサービスを利用するって
方法もあります。有料のようですが...
0303デフォルトの名無しさんNGNG
あんまりいい方法じゃないけど、
インターネットで郵政公社の検索を使うとか
http://ukamen.hp.infoseek.co.jp/Programming1/ZipCode/
XMLでやってくれれば弁理なんだg
0304デフォルトの名無しさんNGNG
>>299
自前で郵便番号→住所なデータを用意して
TextBox1からフォーカスが外れたら、TextBox2に書き込むってのが簡単そうだが。

郵便番号→住所のデータはそこいらに転がってるだろうから、
それからソースに取り込むなり、テキストにして起動時に読み込むなりすればいいし。
0305デフォルトの名無しさんNGNG
>> 300
いわゆるRAWというやつなのですが、Jpegのような圧縮形式では
なくて、CCD情報をそのまま持っている形式です。
最近のカメラはかなり出力対応しているのですが、カメラ毎にフォー
マットが違います。

別な方法としては、Windows画像とFaxビューワーをSUSIEプラグイン
対応にするといったことをしたいのです。

0306デフォルトの名無しさんNGNG
DataGridコントロールの質問なのですが、列ごとに背景色の設定をしたい場合、どのようにすればよいのでしょう?
すみません。お願いします。
0307デフォルトの名無しさんNGNG
>>306
オーナドロー
0308デフォルトの名無しさんNGNG
>>307
ありがとうございます。
DataGridColumnStyle.Paintメソッドをオーバーライドして、
列ごとに背景色を変えました。
ご回答の内容と合ってます??
0309デフォルトの名無しさんNGNG
ListViewがさくっとオーナードローできないなんて……_| ̄|○
0310デフォルトの名無しさんNGNG
オーナードローって何?
さらにレベル下げてすまん。
0311デフォルトの名無しさんNGNG
オーナーがねドローすんの
0312デフォルトの名無しさんNGNG
>>309
Longhornでは可能ぽい
ttp://longhorn.msdn.microsoft.com/lhsdk/ref/ns/system.windows.forms/c/listview/e/drawitem.aspx

>>310
ユーザー独自描画みたいなもんだ。
デフォルトで描画されるコントロールとは違った外観をつくったりできる。
0313デフォルトの名無しさんNGNG
>>312
>デフォルトで描画されるコントロールとは違った外観をつくったりできる。

しかしながらその統一感のないインターフェイスに、PCビギナーは
戸惑ってソフトそのものを使えなくなったりする罠。
0314デフォルトの名無しさんNGNG
GetDeviceCaps(.hdc, PHYSICALOFFSETX)
みたいなことは、まだAPI使わないといけないんでしょうか?

「PrintPageEventArgs」あたりを中心に代替仕様を探していますが、
見つかりません。
これだけいろいろ揃ってるのにこれがないとは思えないんですが...
0315デフォルトの名無しさんNGNG
Xamlon - XAML Application Development for Today s .NET Platforms
http://www.xamlon.com/

Using Windows Forms Markup (WFML)
http://windowsforms.net/articles/wfml.aspx

MyXAML
http://www.myxaml.com/

もどき3つ
0316デフォルトの名無しさんNGNG
既存のコントロール(TextBoxとか)から派生させたクラスのdllを作成して、
VSのツールボックスに追加しようとしたら、
「○○.dllにはツールボックスに含めるコンポーネントは何もありません」
って怒られちゃった。

やっぱり、デザイナで使おうとすると何か特別な作り方してないと駄目なのかな。
既存のコントロール継承しているから、そこらへんもオッケーかなと甘いこと考えてたんだけど。
0317デフォルトの名無しさんNGNG
>>316
オッケーのはずだが
0318デフォルトの名無しさんNGNG
C#2003Standardを使ってるのですが、
キーワード検索してヘルプファイルを読もうとすると
毎回CDを挿入しろとかなんとかいうダイアログが出てきてしまいます。
これはセットアップし忘れた部分があるということでしょうか?
全てインストールした筈なんですけどね・・・
0319デフォルトの名無しさんNGNG
>>318
MSDNライブラリをセットアップしてないだけだろ
0320デフォルトの名無しさんNGNG
>>318
Officeでもある有名な問題
0321デフォルトの名無しさんNGNG
>>313
結局、余計なことしないでデフォ外観で作ったほうが早いし、
使う側にも戸惑いがないんだよね。('A`)

もしくはぜーんぶ独自描画で統一するか。
0322デフォルトの名無しさんNGNG
MDI 親フォームから、子フォームの公開されているメソッドを
スレッドで実行したいと思い、

m_Thread = new Thread(new ThreadStart(childForm.threadMethod()));
m_Thread.Start() ;

のように、親フォームに記述したのですが、

スレッド '<名前がありません>' (0xa00) はコード 0 (0x0) で終了しました。

のようにスレッドを開始できません。親フォームで子フォームに
書かれたメソッドをスレッドで実行させる事はできないのでしょうか?

もし可能であるなら方法をアドバイスして頂けるとうれしいです。
0323デフォルトの名無しさんNGNG
>>320 直し方を何卒
0324デフォルトの名無しさんNGNG
WebProg板とマルチポストです、すみません。

現在、ASP.NETからC#で書かれたコンソールアプリケーションを呼び出し、かつ二重起動を防止する、というアプリケーションを書いていますが、うまく動きません。呼び出すほうは
Process myProcess = new Process();
myProcess.StartInfo.FileName = "c:\exe\moner.exe";
myProcess.Start();
とやってうまく動いているのですが、これが動作しているかを判定することが出来ないのです。
(1)Process.GetProcessesByNameを使う
(2)Mutexを使う
の二通りを試しているのですが、(1)はどうやらAdminでないと動きません。かつ、Adminでも"moner"/"moner.exe"でプロセス名を検索できないようです。
(2)もやはりadmin権限が必要ですが、とりあえずは動いています。

不思議なのは、(2)で、上記のコードでASP.NETから起動したときだけ動かない、ということです。
起動コードを除いたASPXではちゃんとMutexを操作できますし、コンソールから起動したmoner.exeもやはりちゃんと動作します。
動かないのはASPXから上記のコードで呼び出したときだけなのです。

adminでなら動くということで、まず間違いなく権限/セキュリティの問題だとは思いますが、どこをいじればいいのかわかりません。
ユーザー偽装を最後の手段として、もしなにかご存知のことがありましたらアドバイスをいただければ幸いです。よろしくお願いいたします。
0325デフォルトの名無しさんNGNG
>>323
なにそつキタ━━━━━━(゚∀゚)━━━━━━ !!
0326324NGNG
>>324
っと、追伸です。
(2)が「動かない」ってのは、ASP.NETを動かしてる「ASPNET」ユーザがUserグループの権限しか持っていない場合です。
上にも書いたとおり、Adminグループ権限を与えればこちらの意図したとおりに動いています
0327324NGNG
>>324
追伸その2.

……ユーザー偽装も×でした(T_T)
0328デフォルトの名無しさんNGNG
>>324
ミューテックス生成/操作時にどんな例外がでてるのか調べるのが先決だと思う。
0329324NGNG
>>328
Just-In-Timeデバッガが動かないのでわかりません(T_T)

ということで多少事態が整理できました。Mutexのせい「だけ」ではなさそうです。WebProg板にも書きましたがちょっと整理します。

(1)Process.Startで起動は出来てます。
(2)中身も動いてます。引数のチェックや起動メッセージ表示(どこにも表示されないけど(^^;))は動いてます。
(3)DB接続もしくはMutexの生成で異常終了します。
(4)どーして落ちてるか、Just-In-Timeデバッガが動かないのでわかりません(T_T)

というところまでは整理できました。Admin権限で動く以上、セキュリティの問題だということはわかっているのですが……(T_T)
0330デフォルトの名無しさんNGNG
>>321
でも、標準コントロールって、ダサいんだよね。
当然出来るだろってことができないし・・・・。あ、俺もだ。。
0331デフォルトの名無しさんNGNG
Crypto Service Provider(CSP) がuser権限だと動かないんだよね・・・。
この前それではまった。
■ このスレッドは過去ログ倉庫に格納されています