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

C♯相談室 Part19

■ このスレッドは過去ログ倉庫に格納されています
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

ソース置き場.NET
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1003826049&rm=10
0153デフォルトの名無しさんNGNG
>>152
ワロタ
0154デフォルトの名無しさんNGNG
>152
こういうギャグがとっさに出てくるのが2chだなw
0155デフォルトの名無しさんNGNG
>役に立たないコメント

/// <summary>2を取得します。</summary>
int Get2();
0156デフォルトの名無しさんNGNG
2番煎じはつまらんよ
0157デフォルトの名無しさんNGNG
3番煎じ
>役に立たないコメント

/// <summary>test1をします</summary>
int test1();
0158デフォルトの名無しさんNGNG
ちょっと質問。

TextBoxとかListViewなどのコントロールになんて名前のつけかたしてる?
0159デフォルトの名無しさんNGNG
4番煎じ
>役に立たないコメント

/// <summary>回答を激しく求めています</summary>
String getAnswer(>>141);
0160デフォルトの名無しさんNGNG
ここまでくると可哀相に思えるな
0161デフォルトの名無しさんNGNG
>>158
textBox_hoge
.NET の名前付けガイドラインに思いっきり反してるが、
Formのコントロールはぽこぽこ増えたり減ったりするので、
自分で管理してるほかのフィールドとは区別したい。
0162デフォルトの名無しさんNGNG
>>159
どうも透過ウィンドウと相性悪げ。

プラットフォーム呼び出しでPatBltのDSTINVERTを使って
選択範囲内のコントロールをいちいち描画してくとか面倒なことが必要になりそうだな。
0163141==159NGNG
レスありがとうございます。

ちょっと見た目重視にするだけでやたら面倒くさそうですね…

素直に諦めます… 
0164デフォルトの名無しさんNGNG
5番煎じマダ〜?
0165デフォルトの名無しさんNGNG
Opacity を変えると見た目が良くなるのか…
0166デフォルトの名無しさんNGNG
5番煎じ
>役に立たないコメント

/// <summary> >>141を減量します。</summary>
Man man = new Man(>>141);
man.Hear.Count--;
0167166NGNG
Hear -> Hair。
二℃と現れません。orz
0168デフォルトの名無しさんNGNG
01.jpgと言う画像を表示させたいだけなのですがうまくいきません。
pictureBox1.Dispose();

//PictureBox pb = new PictureBox();
PictureBox PictureBox2 = new PictureBox();
PictureBox2.Location = new Point(300, 400);
PictureBox2.Size = new Size(100, 100);
//pb.Image = new Bitmap(300, 300);
//Bitmapオブジェクトの作成(画像ファイルを読み込む)
Bitmap bmap = new Bitmap("01.bmp");
//または、次のようにも出来る
//Image bmap = Image.FromFile(@"C:\Blue hills.jpg");

//PictureBox1のGraphicsオブジェクトの作成
Graphics g = PictureBox2.CreateGraphics();
//画像の描画
g.DrawImage(bmap, 300, 300);
//BitmapとGraphicsオブジェクトを破棄
bmap.Dispose();
g.Dispose();
どこか、間違っていますでしょうか?
0169168NGNG
あ・・・拡張子は、下記ミスってます。
拡張子以外のミス、ありませんでしょうか?
0170デフォルトの名無しさんNGNG
PictureBoxをFormのControlsにAddしてないとみた。
0171デフォルトの名無しさんNGNG
なんかわけわからんことやってるなー……。
折角PictureBox使うのになぜImageプロパティじゃなくて直接書くのかとか。
pictureBox1.Dispose()ってなによとか。
ひょっとして画像を変更するためだけに一々コントロールを作り直してるのか?
0172168NGNG
ココ参考にして作ってみてます
ttp://dobon.net/vb/dotnet/graphics/drawimage.html
0173最凶VB厨房NGNG
コピペしてから修正しろw
0174168NGNG
>>170
簡単なImageの方でやったらAddの有る無しで表示されない場合と表示される場合
確かめることが出来ました。
Addしていませんでした(まだ解決してませんが)

>>171
>172

>>173
コピペしました。。
0175デフォルトの名無しさんNGNG
コピペしてねーじゃん。
0176デフォルトの名無しさんNGNG
一辺ファイル名と変数名以外全部コピペでやってみな。
0177デフォルトの名無しさんNGNG
その「うまくいかない」状態というのがどういったものかを教えてくれないとどうしようもない気がするが
コンパイルすら通らないのか
コンパイルは通るけど思ったような動きをしてくれないのか
そうならばどのような動きをしているのか、とか
0178168NGNG
>>175-177
コピペしてやってみました。一瞬表示されて消えるみたいです。

コンパイルは通り、プログラムは実行されるのですが
画像が表示されないという状況です。

このプログラムの前にちがうpicturebox1.Dispose()しているのも原因の一つみたいです。
0179デフォルトの名無しさんNGNG
>>168
なんで厨房はみんな「うまくいきません」しか書かないんだ?
エラーうんぬんの前に、質問を読む側に状況が全く伝わってないことが分からないのか?

ttp://bbx.hp.infoseek.co.jp/cgi-bin/bbx.cgi?log=44&vew=111
ttp://bbx.hp.infoseek.co.jp/cgi-bin/bbx.cgi?log=44&vew=106
0180最凶VB厨房NGNG
Paintイベントハンドラに書いてんのか?
それもそのURLにかいてあんぞ。
0181夜NGNG
お世話になります。GUIのプログラミングに関しての質問です。
現在、お手軽2ちゃんねるブラウザをC#で開発中です。
取得済スレッドの振り分け機能を作ろうと思っているのですが、
それをOutlookのメッセージルール
作成に見られるような
「下線をクリックすると編集できます」みたいな感じで作りたいんです。
こんな感じのボックスってRichTextBoxで実現できますか?
他にも何かいい方法があったらおしえてくださいませ。
0182デフォルトの名無しさんNGNG
>こんな感じのボックスってRichTextBoxで実現できますか?
できなくはない。

>他にも何かいい方法があったらおしえてくださいませ。
UserControl
0183デフォルトの名無しさんNGNG
VSの設定ダイアログみたいに、左にツリー置いて右に詳細をおいた設定を作りたいけど
どうやればいの?
タブより面倒くさそ
0184夜NGNG
>>182
ありがとうございます。
UserControlをどのように応用するのか私には想像がつかないのですが、
サンプル的なコードなどありますでしょうか?
0185デフォルトの名無しさんNGNG
foreach (TextBox tb in this.Controls)
{
tb.Text = "";
}
Formに配置したすべてのテキストボックスをリセットにしたいのですが
指定したキャストは有効ではありません と実行時にエラーが出ます
コンパイルは通るのですが何かすべてのテキストボックスをリセットするいい方法ないですか?
0186デフォルトの名無しさんNGNG
Controlで回して中でas演算子
0187185NGNG
foreach(Control tb in this.Controls)
{
TextBox temp = tb as TextBox;
if(temp!=null)
{
temp.Text = temp.Name;
}
}
でうまくいけました。 ありがとうございました。
けどやってみて気づいたのですがGroupBoxの中に分類して入れてる10個以上のTextBoxは
FormのControlコレクションに入ってないんですね… orz
0188デフォルトの名無しさんNGNG
>>183
TreeViewのAfterSelectイベントでごにょればなんとかなるまいか。
0189最凶VB厨房NGNG
コンテナだからさ。
0190162NGNG
>>163
ちょっと調べてみた。

MouseEnterでOpacityを1Fに戻すところで
一緒にForm.AllowTransparencyをfalseにするのはどうだろう。
0191デフォルトの名無しさんNGNG
TextBoxを拡張して、色分け表示しようとがんばって調べていますが、
OnPaintとかオーバライドするのがベーシックなやり方でしょうか?
また、TextBoxは内部でもっているデータにどのようにアクセスして、
テキストとして描画しているのか理解できていないのですが、どうやって
調べれば判るでしょうか?
0192デフォルトの名無しさんNGNG
コントロールのフォーカス枠を非表示にしたいんですが、
フォーカス枠を描いているメソッドてありますか?
0193デフォルトの名無しさんNGNG
>>192
Control.ShowFocusCues プロパティ
とか言ってみる。
0194デフォルトの名無しさんNGNG
0195192NGNG
それをoverrideして、常にfalse返すようにしてもダメぽいんです。。
0196デフォルトの名無しさんNGNG
というか、ShowFocusCuesは
フォーカスが移ってきた場合でも使用されて無いみたい。
0197141==159NGNG
>>162==190さん
その方法で無事反転矩形が描画されました。
ありがとうございました。
0198デフォルトの名無しさんNGNG
AllPaintingInWmPaint追放してえ
0199デフォルトの名無しさんNGNG
C#で拡張子の関連付けを設定するにはどうやるんですか?
0200デフォルトの名無しさんNGNG
A.exeがB.exeのstaticな変数を共有する事は出来ないのでしょうか?

B.exeは起動中一秒ごとにpublic static int aをインクリメントし、
A.exeはボタンを押すとその時点のB.aの値を取得して表示する、というものなのですが、
A.exeのアセンブリ参照にB.exeを加えても、
B.exeから見た変数aと、A.exeから見た変数aとが異なるのですが
0201最凶VB厨房NGNG
appdomain
0202デフォルトの名無しさんNGNG
>>200
プロセス間でとなるとメッセージのやりとりやDDE、リモート処理が必要。
//まず別プロセスで実行する必要性があるかどうかから検証するとか。
0203デフォルトの名無しさんNGNG
>>200
DLL 経由で共有する方法はある。
0204デフォルトの名無しさんNGNG
>>201-203
ありがとうございます。
やはり単純には行かないのですね。
AppDomainについて勉強してからもう一度やってみようと思います。
0205デフォルトの名無しさんNGNG
クラスの設計について質問です。

Console.WriteLineなどのように、出力専用であったり、ある値を変換するだけ
のクラスは、staticメソッドにしてもよいのでしょうか?
それともインスタンスを生成して、メソッドを利用するほうがよいのですか?

あまりstaticな変数やメソッドは使うべきではないと聞くのですが、
主にstaticなものはどのような具合に使用するのがよいのでしょう。
0206デフォルトの名無しさんNGNG
>>205
そこらへんはコーディング スタイルの問題だと思う。
私ならほとんどの場合インスタンスを生成してメソッド利用にするけど。
0207デフォルトの名無しさんNGNG
>>205
Console は設計があまりよろしくない。
Win32 では確かに Console は同時に一つしか持てないことになってるが、
他の環境でどうだかは定かではない。
static にしないほうが良かった。
Math などの普遍的かつ非オブジェクト的なメソッド/プロパティはstaticがよろしい。
Path は名前は間違ってるがやってることはやっぱりstaticでよろしい。
0208デフォルトの名無しさんNGNG
javaのstringTokenizerクラスだったか、あれは.NETではString.Splitメソッドで済ます方向だよな。
//わざわざクラス立ててる割りにメソッドがしょぼいと言うイメージを受けたが。>stringTokenizer
0209205NGNG
即レスありがとうございます。

たしかに少し値を変換するぐらいのメソッドだったら、
インスタンスを生成せずstaticで済ませたい気持ちありますね(汗

もうすこしクラスの組み立て方を考えてみたいと思います。
みなさんありがとうございました(^^
0210デフォルトの名無しさんNGNG
オプションなどで変更した画面配色などを、次回起動時にも反映できるように、
設定などを保存しておきたいとします。

現在は配色や、その他設定項目を保持するクラスを生成して、
XmlSerializerとTextWriterを使ってそのクラスをファイルに書き出している状態です。
こちらのページを参考としました。
http://fe0r.at.infoseek.co.jp/Doc/csXmlSave.htm

最近バグに気づいたのですが、Colorクラスなどは参照型なので(?)、
値がうまく保存されないことに気が付きました(;´д⊂
文字などはきちんと保存され、読み込みもできるのですが・・・。

Color.Blackなどの情報はどのように保存して置けばいいのでしょうか?
0211デフォルトの名無しさんNGNG
Color は値型でんがな
0212デフォルトの名無しさんNGNG
bool a=b=true;

abともに真である条件式で
if(a & b){}
if(a && b){}
お前らはどっち書く?
0213デフォルトの名無しさんNGNG
複数のスレッドから、ひとつのファイルに読み書きを行っているのですが、
ファイルに対して排他ロックを取得する良い方法はないでしょうか?

読み書きを行うメソッドをひとつのクラスにまとめ、
lock(this){}でロックをかけていたのですが、
諸々の事情から、他のクラスからもファイルにアクセスする必要があり、
出来れば、ファイルそのものに対してロックをかけたいのです。
lock(filename){}とかで今はごまかしているのですが、
これだと単純に一定の文字列に対してロックをかけているだけなので、
やはりファイルそのものでロックをかけたいのです。

何か良い方法はないでしょうか?
0214デフォルトの名無しさんNGNG
>>212
供に真であるとわかっているなら、その if 節自体書かない。
わかっていないなら、&& を使う。コスト変わらない場合でもなんとなく。
0215デフォルトの名無しさんNGNG
あれ?同じプロセス内なら排他しててもファイル開けるんだっけ?
OS上でそれなら、擬似的に排他を行うファイルクラス作ればいいんでは?
0216デフォルトの名無しさんNGNG
>>212
&&で書く。結果は同じになるかもしれんが、
論理演算子とビット操作演算子では意味が違う。
あんまり保守プログラマをいじめないでくれい。
0217デフォルトの名無しさんNGNG
>>216
おまえ、C#って言語知ってるか?
0218デフォルトの名無しさんNGNG
b を必ず評価すべきときは当然 &。
a の値によって b を評価すべきか否かが決まる時は &&。
どっちでもいいときは、コストが少なくなる可能性がある方をとって &&。

つか、リファレンス嫁。
0219デフォルトの名無しさんNGNG
>結果は同じになるかもしれんが、
>論理演算子とビット操作演算子では意味が違う。

ここまで自覚のない厨房は初めて見たな。傑作だ>>216。
0220デフォルトの名無しさんNGNG
もうちょっと詳しく書いておくと、bool型の値を返すメソッド A() と B() があるとして、

A()とB()を両方呼んで、どちらの戻り値もtrueだったらC()を呼ぶ、と言うような場合は、
if (A() & B()) C();

A()の戻り値がtrueだったらB()を呼んで、B()の戻り値がtrueだったらC()を呼ぶ、
というような場合は
if (A() && B()) C();

C由来の構文を持ってる言語はほとんどそうなんじゃないかな。
0221デフォルトの名無しさんNGNG
>>212
マルチポストはやめたまへ
0222デフォルトの名無しさんNGNG
>>220
いやそれは誰でも知ってる・・・というか C# でもそれは && の定義だから当然だとして、
マルチポストの >>212 は bool a=b=true と(たぶん)単純変数のケースを指定してきてるわけじゃないか。
つまり「どっちでもよさげな場合はどっちにしてる?」という、単なるアンケートかと。
0223デフォルトの名無しさんNGNG
>>220
自分は余計なバグ増やしたくないんでそういう記述絶対にしないんだが。
0224デフォルトの名無しさんNGNG
俺も&&||を短絡のために使うことはないな・・・。
本当に右オペランドを評価して欲しくないならifの入れ子にする。
0225デフォルトの名無しさんNGNG
あ、でも
if ( s==null || s.Length==0 )
とかは普通にやってるな・・・orz
0226220NGNG
そ、そうか? 俺おかしい?
こういうC時代からの癖は、もはや時代遅れなのかな…… orz
0227デフォルトの名無しさんNGNG
今はあんまり使わない技法だねぇ
素直に&& || 使っちゃうな
0228デフォルトの名無しさんNGNG
いやおかしくはないんだけど、うっかり評価関数の順番入れ替えたりとかうかつなことしそう。
0229デフォルトの名無しさんNGNG
&では違うが、ififも&&もILは全く一緒になるんだからそこまでこだわらなくてもイイのでは?
保守性って言ってもそんな大掛かりな変更が必要になる場面じゃないんだし、
ミスが減る減らないはそんな構文の違いより個人個人の癖の方が大きいんじゃないかな。
0230デフォルトの名無しさんNGNG
&と|は列挙型の合成分離にしか使わない。
0231220NGNG
そうだねえ。普段から書き慣れてるスタイルが一番ミスが少ないわな。
短絡って言っても、せいぜい
if (args.Length > 0 && args[0] == "xxx") {} とか
if (aaa.ShowDialog() == DialogResult.OK && xxx()) {} 程度のことしかやってないし、
気にするほどでもないな。
0232デフォルトの名無しさんNGNG
>>229
そのとおり。全ては>>216のアフォさが原因の茶番でしたというわけで、



糸冬
0233デフォルトの名無しさんNGNG
>>231
いや下のほうはどうかと思うぞ。
Cでも普通そういうことしないだろ。
Perlでは当たり前にやるみたいだが。
0234デフォルトの名無しさんNGNG
Perlは xxx or die と書きたいだけ
0235デフォルトの名無しさんNGNG
iif ( hoge != null && hoge.Visible )とかわりとよく使う。
漏れは。
0236デフォルトの名無しさんNGNG
俺も短絡評価はいちいち参照のnullチェックでインデント下げたくない時くらいだな
0237デフォルトの名無しさんNGNG
new Hoge(new Hage(new Mage(new Moge(new Hige new Fuga()))));
0238デフォルトの名無しさんNGNG
>>237
>new Hige new Fuga()
プゲラッチョ
0239デフォルトの名無しさんNGNG
C#は、C++でいうところの

if (Derived* pDerived = dynamic_cast<Derived*>(pBase)) {
  ・・・;
}

みたいなコードが一文&&余計なスコープ無しで書けないのが自分ではかなりぎこちない。
0240デフォルトの名無しさんNGNG
C言語の時代じゃないんだから
ややトリッキーな書き方は止めるべきだね。
可読性が大事。
そんなオレはスクリプト言語は使えませんw
0241デフォルトの名無しさんNGNG
Pytho はいいぞ。可読性もばっちり。
0242デフォルトの名無しさんNGNG
>>220
短絡評価ってやり始めると凄い見通しがいいんだよな、&&はやるのは考え物なので専用の演算子が欲しい所。
0243デフォルトの名無しさんNGNG
しかし短絡評価とそうでない評価の両方が使い分けられるのは便利だな。
0244デフォルトの名無しさんNGNG
>>239
あーそれはあるなあ。
C#でそれをやろうとすると、

Derived derived = base as Derived;
if (derived != null) { ・・・; }

とか

if (base is Derived) { Derived derived = base as Derived; ・・・: } // 効率悪い

とか異様に長ったらしくなるんだよね、、、
0245デフォルトの名無しさんNGNG
GraphicsのDrawImage()メソッドで描写したイメージを
消したいのですが、DeleteImageメソッドみたいな物はありませんでしょうか?

g.DrawImage()
↓
g.DeleteImage()

よろしくお願い致します。
0246デフォルトの名無しさんNGNG
Drawする前の状態に戻したいという意味なら、そんなものはない。
0247デフォルトの名無しさんNGNG
>>245
「消したい」が何を言ってるのかさっぱり分からんが、
ある色で塗りつぶしたいんならClearとかFillRectangle、
イメージオブジェクトを破棄したいんならimage.Dispose(); image = null;でいいんじゃないの
0248デフォルトの名無しさんNGNG
>DeleteImageメソッドみたいな物はありませんでしょうか?

その「DeleteImageメソッド」とやらが一体何者なのか何の説明もなく、
いきなり「DeleteImageメソッドみたいなもの」とか言われても答えようがないんだが。
0249245NGNG
>>247
deleteみたいなメソッドは無いみたいですね。
結局disposeで消し(オブジェクトごと)ました。

ありがとうございました。
0250デフォルトの名無しさんNGNG
もうちょっと詳しく書いておくと、bool型の値を返すメソッド A() と B() があるとして、

A()とB()を両方呼んで、どちらかの戻り値がtrueだったらC()を呼ぶ、と言うような場合は、
if (A() | B()) C();

A()の戻り値がtrueだったらB()を呼んで、B()の戻り値がtrueだったらC()を呼ぶ、
というような場合は
if (A() || B()) C();
0251デフォルトの名無しさんNGNG
その両者を使い分けているコードはすっきりはするだろうが可読性はかなり下がりそうだな。
0252デフォルトの名無しさんNGNG
何かの言語で and と andalso というのがあったような。
あと、or と orelse だったかな。
■ このスレッドは過去ログ倉庫に格納されています