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

C♯, C#相談室 Part35

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん2006/11/03(金) 03:07:45
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。

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

過去スレは>>2-5あたり。
※スレタイに「#」を入れても消えちゃうので新スレ立てる人は要注意だ。
0893デフォルトの名無しさん2006/12/06(水) 19:41:43
>>892
IntegralHeight を false に
0894デフォルトの名無しさん2006/12/06(水) 20:09:10
ListBoxに追加するアイテムの色分けする方法を教えてください

行ごとに色を変える方法はDrawItemで作れたのですが
一列の中で何色も色を変える方法がわからないです
0895デフォルトの名無しさん2006/12/06(水) 20:31:56
>>893
ありがとうございました!できました!
0896デフォルトの名無しさん2006/12/06(水) 20:39:48
>>894
言いたいことがよく分からんが、オーナードローならどんな描画だってできるでしょ。
08978942006/12/06(水) 20:52:40
一行丸々色を変更する方法は、こんな感じで出来ました
e.Graphics.DrawString(文字列, フォント, 色, e.Bounds);
e.DrawFocusRectangle();
---
赤い青い黄色い
という文字列(実際に色がついているとして)をリストボックスの1列に表示したいんですが
ListBoxの要素ひとつの中で色を変更する方法を探してます
上のDrawString + DrawFocusRectangle だと一列ごとにひとつの文字列・一色しか設定できませんでした

わかりやすい説明が出来なくて申し訳ないです
0898デフォルトの名無しさん2006/12/06(水) 20:55:23
DrawString を複数回呼び出せばいいだろ
要は MeasureString だな
08998942006/12/06(水) 21:05:45
MeasureStringの知識がなかったので助かりました
苦肉の策で文字数*5と指定してX位置を横にずらして表示していたので
その部分を変えていけばできそうです
ありがとうございます
0900デフォルトの名無しさん2006/12/06(水) 22:19:08
>>888
そうならないようにインタフェースに責任を持たせる。
自然な発想で操作から連想される名前が重なる場合には衝突は気にしない。(どうせ、明示的実装できるし)
もちろん、時と場合による。
0901デフォルトの名無しさん2006/12/06(水) 22:39:34
そもそも幽霊だからこの世の物質に干渉できないって言うなら
そもそも視覚や聴覚も機能しないはず
0902デフォルトの名無しさん2006/12/06(水) 22:55:45
視覚や聴覚を認識する自意識はこの世の物にはあらず
0903デフォルトの名無しさん2006/12/06(水) 23:14:54
例外が発生してそれをキャッチした場合に
PictureBox.Imageが突然、nullになってしまうのですが、
何が原因なのでしょうか?

0904デフォルトの名無しさん2006/12/06(水) 23:21:52
>>903
何が投げてる例外だよ?
0905デフォルトの名無しさん2006/12/06(水) 23:25:56
>903が自力で調べるのを投げてるように見えるが…。
0906デフォルトの名無しさん2006/12/06(水) 23:30:32
誰がうまいこと言えと
0907質問です。2006/12/06(水) 23:32:58
DataTableに関する質問です。

例えばDataTableに10行レコードが入っていたとして
一番最初(0レコード目)に””(空白)値のみのDataRowを
挿入したいのですが何か良い方法をご存知の方はいらっしゃいますか?

New DataRow ・・・ dt.Add
⇒この方法だと一番末尾にレコードが追加されてしまいます。
0908デフォルトの名無しさん2006/12/06(水) 23:34:52
TextBoxのGetPositionFromCharIndex(int index)を呼び出すと
indexにかかわらずIsEmptyがTrueのPoint(X=0,Y=0)が帰ってきます。

何がいけないのでしょう?
09099032006/12/06(水) 23:37:28
スマヌ。
原因が分かった orz...

try{...}
catch(...){return;}
PictureBox.Image = new ...;
0910デフォルトの名無しさん2006/12/06(水) 23:38:33
>>909
おもろいやんけw
0911デフォルトの名無しさん2006/12/06(水) 23:43:18
>>907
もうちょっとメソッド調べれ 挿入を英語で
0912デフォルトの名無しさん2006/12/06(水) 23:46:01
>>908
indexは0以上かつText.Length未満でなければならない。
0913デフォルトの名無しさん2006/12/06(水) 23:54:18
>>912
はい、その点は大丈夫です。
txtBox.GetPositionFromCharIndex(txtBox.SelectionStart);
とやっているのにそうなるのです…(T-T)
0914デフォルトの名無しさん2006/12/07(木) 00:05:32
>>913
ブレークポイント張ってSelectionStartの値は見てみたのか?
0915デフォルトの名無しさん2006/12/07(木) 00:07:39
fuck?
09169072006/12/07(木) 00:12:33
>>911

DataTable.Insertでしょうか?

このメソッドは挿入箇所をインデックスで指定する事も
出来るのでしょうか?
0917デフォルトの名無しさん2006/12/07(木) 00:21:00
なぜ調べない?
09189072006/12/07(木) 00:24:00

>>917
調べても使い方が分かりません。
0919デフォルトの名無しさん2006/12/07(木) 00:36:36
つか DataTable には Insert 以前に Add が無いはずだが
Add は別のクラスのだろ? それ調べれ
0920デフォルトの名無しさん2006/12/07(木) 00:43:07
>>918
そんな姿勢ならプログラミングやめた方がいいよ
少なくともこのスレには来ないでくれ
0921デフォルトの名無しさん2006/12/07(木) 00:59:35
>>918
プログラミングというのは、正にそういうことの地道な繰り返しなわけだが。
その作業が嫌なら、プログラミングには向いてないな。
09229072006/12/07(木) 01:06:17
いや、向いてるよ。

実際プロだしね。
0923デフォルトの名無しさん2006/12/07(木) 01:09:19
プロに勝った!
0924デフォルトの名無しさん2006/12/07(木) 01:09:31
>>922
名前全角にしないとそれっぽく見えないよ
0925デフォルトの名無しさん2006/12/07(木) 01:12:43
プロが2ちゃんで質問かよw
それで教えて貰って分からないってのも。
0926デフォルトの名無しさん2006/12/07(木) 01:16:30
http://www.amazon.co.jp/exec/obidos/ASIN/4759222197/kimagureeigan-22/ref=nosim/
0927デフォルトの名無しさん2006/12/07(木) 09:52:41
DataRowCollection.InsertAt メソッド

コレクション内の指定した位置に新しい行を挿入します。

名前空間: System.Data
アセンブリ: System.Data (system.data.dll 内)

構文
C#
public void InsertAt (
DataRow row,
int pos
)

パラメータ
row
追加する DataRow。

pos
DataRow を追加するコレクション内の位置。

解説
InsertAt で指定する位置は、DataRowCollection での行の順序だけを表しています。
DataRow 配列で複数の行が返される場合は、挿入行が InsertAt で指定した位置に返されないことがあります。
たとえば、Rows プロパティは指定した挿入位置に行を返しますが、Select と GetChildRows は挿入位置に行を返しません。
DataRowCollection の内容を XML (WriteXml など) で作成すると、行は DataRowCollection で指定された順序に従って書き込まれます。

pos パラメータで指定した値がこのコレクション内の行数を超えている場合は、新しい行はコレクションの末尾に追加されます。
0928デフォルトの名無しさん2006/12/07(木) 10:25:47
下記で、悩んでいます、たすけてください。

TEST_DLLという名前空間にTEST_CLASSというpublic クラスをつくりました。
これは、DLLとしてビルドされます。

それで、上記のDLL内のクラスを参照して、うごくEXEファイルを別につくっているのですが、
以下のようにするとDLLのクラスを呼べるのは確認しました。
TEST_DLL.TEST_CLASS test = new TEST_DLL.TEST_CLASS();

ただ、上記のDLLを削除して起動すると例外(System.IO.FileNotFoundException)が発生して
おちてしまいます。DLLがあれば、問題なく動きます。
そら、DLLがないのだから当然の例外なのですが、インスタンスを作成する前に、
DLLがあるかどうかのチェックをする処理を入れて、
あれば、インスタンス生成にしても、例外が発生します。
インスタンス生成を削除すると動くので、インスタンス生成が問題であるのは確認しました。
また、上記インスタンス生成時に(System.IO.FileNotFoundException)を
catchにしてもキャッチされません。
Visual Studioのデバッグで起動しても、どこで例外がおこってるかも表示されません。

どうしたら、いいのでしょうか?ご教授頂けませんか?おねがい致します。
09299282006/12/07(木) 10:59:08
>>928
ごめんなさい。自己解決しました。
インスタンスの生成に失敗すると自動的に例外が上位にあがるんですね…。
たぶんで、自信ないけど…。
インスタンス生成部分をメソッド化して、呼び出し元でキャッチしたらできました。
メソッド化した時に例外が発生したら上位にあげるとかもかかなくても、勝手に上位に上ったので、
たぶん、そうなのかなあと思いましたが…。
0930デフォルトの名無しさん2006/12/07(木) 11:00:24
>>928
Exceptionならキャッチできる?
09319282006/12/07(木) 11:14:27
>>930
System.Exceptionでもキャッチできなかったから、ほんきで悩んだんだ。
そんなはずないだろ?って。
メソッド化しても、メソッド内ではキャッチできなくて、呼び出し元ではキャッチできた…。
よくわからんが…。
0932デフォルトの名無しさん2006/12/07(木) 12:04:29
あのね、参照した型を直接扱コードを実行するためには
実際の実行より前に型情報が必要になるのね
つまり、そのコードを含むメソッドのJITコンパイル時ね
先にJITコンパイル済まさないと実行出来ないからね
てことは、そのメソッドの実行よりも前に型のロードが必要になるのね
もう分かるね?
0933デフォルトの名無しさん2006/12/07(木) 12:09:39
すげぇわかりやすい説明だと思った
0934デフォルトの名無しさん2006/12/07(木) 12:15:49
>>932
日本語でおk
0935デフォルトの名無しさん2006/12/07(木) 12:19:38
>>928
あるかどうか分からんライブラリをアーリーバインドする馬鹿がいるかよ。
Reflection使っとけ。
0936デフォルトの名無しさん2006/12/07(木) 12:32:26
試してないけど、完全に分離して、アセンブリの名前解決が起こらないようにすればいけるんじゃね?

namespace ConsoleApplication1
{
    class Program
    {
        static private void doSomething()
        {
            new ClassLibrary1.Class1().DoSomethong();
        }
        static void Main(String[] args)
        {
            if (File.Exists("ClassLibrary1.dll"))
            {
                doSomething();
            }
        }
    }
}

汚いからやめて欲しいが。
0937デフォルトの名無しさん2006/12/07(木) 13:54:56
C#でRC6使えないのかな?
0938デフォルトの名無しさん2006/12/07(木) 14:09:18
C#から入ってC、C++もできるようになる?
0939デフォルトの名無しさん2006/12/07(木) 14:14:19
>>937
使えるから自分で実装汁
0940デフォルトの名無しさん2006/12/07(木) 14:15:25
>>938
なる奴はなる。ならん奴はならん。

そういう質問をするタイプの奴はならん。
0941デフォルトの名無しさん2006/12/07(木) 14:16:36
そっか
じゃあやめとくか
0942デフォルトの名無しさん2006/12/07(木) 17:59:47
Formatメソッドで、文字列を幅固定し左詰したいのですが、
固定幅を文字数でなくバイト数で設定することは可能なのでしょうか?
何がしたいかというと・・・(アスタリスクは空白文字とお考え下さい)

1.String.Format("{0, -6}", 1) -> “11****”
2.String.Format("{0, -6}", "あい") -> “あい****”

上記の2の結果“あい****”を、“あい**”で取得したいのです。
0943デフォルトの名無しさん2006/12/07(木) 18:05:43
>>942
"1" と "あ" はどちらも2バイト。
0944デフォルトの名無しさん2006/12/07(木) 18:17:42
>>942
Encoding.GetEncoding(name).GetByteCount(s)
で目的のエンコーディングでのバイト長を取得して、
足りない分を空白を埋めればいいんじゃね?
0945デフォルトの名無しさん2006/12/07(木) 18:27:07
>>943-944
・・・根本的に思い違いをしていたのですねorz
GetByteCountで取得してみます。即レスありがとうございました。
0946デフォルトの名無しさん2006/12/07(木) 21:05:16
質問があります。

wsdl.exeで作成したプロキシクラス(呼び出し元はjavaで作成したwebサービス)
をコンソールアプリケーションのプロジェクトに追加してビルドすると
プロキシクラスの先頭で

using System.Web.Services;
using System.Web.Services.Protocols;

と宣言している部分で
「型または名前空間名 'Services' は名前空間 'System.Web' に存在しません。アセンブリ参照が不足しています」
というエラーが出ます。
どのようにすればビルドが成功するかわかりません。
助けて下さい。


0947デフォルトの名無しさん2006/12/07(木) 21:19:03
>>946
アセンブリ参照が不足しています
0948デフォルトの名無しさん2006/12/07(木) 21:31:21
プロパティのオーバライドについて質問です。

public abstract class AbstractClass{
public abstract int Value{get;}
}

public class ConcleteClass{
public override int Value{get{return 0;} set{ }}
}

のようにサブクラスではGetter/Setter両方を定義する方法ってありませんか?
プロパティに対してoverrideキーワードを追加すると以下のようなコンパイルエラーになるのですが
「オーバーライド可能な set アクセサがないため、オーバーライドできません。」
0949デフォルトの名無しさん2006/12/07(木) 21:39:29
ない
SetValue メソッドでも用意してやれ
0950デフォルトの名無しさん2006/12/07(木) 21:43:35
>>927
ありがとう。
0951デフォルトの名無しさん2006/12/07(木) 21:50:15
public abstract class AbstractClass{
public abstract int Value{get;}
}

internal class MiddleClass : AbstractClass{
public override int Value{get{return 0;}}
}

public class ConcleteClass : Class{
public new int Value{get{return base.Value;} set{ }}
}

こうするとか
0952デフォルトの名無しさん2006/12/07(木) 21:55:05
ミス
ConcleteClass : MiddleClassね
あと、internalにはできないな
0953デフォルトの名無しさん2006/12/07(木) 22:44:40
concrete
0954デフォルトの名無しさん2006/12/07(木) 23:37:04
TreeViewの一番上の親ノードを取得するのってどうやるんですか?
0955デフォルトの名無しさん2006/12/07(木) 23:43:22
何を悩む事があるんだ?
0956デフォルトの名無しさん2006/12/07(木) 23:55:56
何かトリッキーな方法を欲してるんじゃね?
0957デフォルトの名無しさん2006/12/08(金) 00:00:21
(仮想的な)スーパールートノードが欲しいとか?
0958デフォルトの名無しさん2006/12/08(金) 00:08:07
TreeView.FirstNodeみたいなのはないんですか?
09599282006/12/08(金) 00:08:31
>>935
Reflection使って、作りなおしました。
でも、複数アプリに共通なクラスはDLL化したらしたで、
Reflectionつかわないとってなるとめんどいな…。
0960デフォルトの名無しさん2006/12/08(金) 00:10:18
配布せずに自分でしか使わないというならGACに入れるという手も……
0961デフォルトの名無しさん2006/12/08(金) 00:16:41
959 の思考がさっぱり理解できない
0962デフォルトの名無しさん2006/12/08(金) 00:22:17
>958

お前の頭についている二つの穴はフシアナか?
0963デフォルトの名無しさん2006/12/08(金) 00:23:59
あんまり釣られんな
0964デフォルトの名無しさん2006/12/08(金) 00:34:20
??あるんですか?
0965デフォルトの名無しさん2006/12/08(金) 00:35:10
人に訊く前にMSDNくらい読んでこいや
0966デフォルトの名無しさん2006/12/08(金) 00:36:44
MSDNってなんですか?
0967デフォルトの名無しさん2006/12/08(金) 00:40:17
thx >>949,951,953
メソッド用意しました。

0968デフォルトの名無しさん2006/12/08(金) 00:43:16
>>966
これは自分じゃないです
見てきます
0969デフォルトの名無しさん2006/12/08(金) 00:59:38
>>961
ごめんお…
0970デフォルトの名無しさん2006/12/08(金) 01:10:15
>>959
いったい何がしたいわけ?
dllがなくても正常に動かしたいの?
普通dllがなきゃ動かないのは当たり前でそ
0971デフォルトの名無しさん2006/12/08(金) 02:34:06
>>970
いや、エラー処理なんだな。
DLLがなきゃ動かないのは当然なのはわかってるんだ。

もし、DLLがない場合&DLLが古い&DLLが名前は同じでも別もの
の場合でもちゃんとエラーをだして止まるようにしたかったんだ。
例外が発生しておちましたでは困るんで。

一般のユーザは、こっちが思ってるように、正しく使ってくれないから…。
0972デフォルトの名無しさん2006/12/08(金) 03:10:35
だから例外キャッチしときゃいいんでしょ?
0973デフォルトの名無しさん2006/12/08(金) 06:04:03
Reflection使うのめんどくさいって・・・
3行くらい書くだけじゃないの?
0974デフォルトの名無しさん2006/12/08(金) 06:50:23
必須DLLだったらReflectionもメソッド単位でcatchする必要も無いと思うけど
0975デフォルトの名無しさん2006/12/08(金) 08:25:07
せいぜい最上位レベルでキャッチしてメッセージ出すくらいだな。
0976デフォルトの名無しさん2006/12/08(金) 09:56:01
publicなHashtableを持つクラスをシリアライズしたいんですが
XmlSerializer.Serializeを使ったら冷害が出ました。
どうすればいいんでしょうか?
0977デフォルトの名無しさん2006/12/08(金) 10:15:51
BinaryFormatterマンセー
0978デフォルトの名無しさん2006/12/08(金) 13:50:32
Xmlserializerはそんなことには使えない
0979デフォルトの名無しさん2006/12/08(金) 18:17:13
Magic Library Docking Manager Designer
http://www.codeproject.com/cs/miscctrl/dockingmanagerextender.asp

デバッグに失敗するですけどどうすればいいんでしょうか?
VS2005です。
0980デフォルトの名無しさん2006/12/08(金) 19:04:36
>>979
Magic Libraryっていう有償のコンポーネントが必要
0981デフォルトの名無しさん2006/12/08(金) 20:07:39
Magic Docking - VS.NET Style
http://www.codeproject.com/cs/miscctrl/magicdocking.asp

フリーバージョンがあってそれを使ってます。

参考サイト
http://dobon.net/vb/dotnet/links/dockingwindow.html          
0982デフォルトの名無しさん2006/12/08(金) 22:05:55
>>979
詳しく書かないってことは答えて欲しくないってことでおk?
0983デフォルトの名無しさん2006/12/09(土) 01:58:02
>>974-975
またまた、出没しましたよ…。
下のソースの 1 のClassLibrary.MyClassがDLL内にある。
それで、そのDLLがないともちろんエラーとなるんだが、例外が 2 じゃなくて 3 でキャッチ
されるのがなぜなのか理解できない。普通 2 じゃないの?
ここでthrowしてないのに…。なぜ3にいくの…

static void DLL_Class_Test()
{
try
{
ClassLibrary.MyClass test = new ClassLibrary.MyClass(); // ←ここ 1
}
catch (System.Exception ex) // ←ここ 2
{
Console.WriteLine(ex);
}
}


static void Main(string[] args)
{
try
{
DLL_Class_Test();
}
catch (System.Exception ex) // ←ここ 3
{
Console.WriteLine(ex);
}
}
0984デフォルトの名無しさん2006/12/09(土) 02:26:22
>>983
>>932読んでも分かんないの?
0985デフォルトの名無しさん2006/12/09(土) 03:29:17
>>984
エラーになるのはなぜかっていうのはわかるけど、
例外の発生場所がなぜそうなるのかわからないよ…。
型情報がないから、そのメソッド自体を初期化できないってこと?
飲み込み悪くてすまねぇ。
0986追加2006/12/09(土) 03:52:14
>>985
そのメソッドってのは、上でいうDLL_Class_Testのことです。
0987デフォルトの名無しさん2006/12/09(土) 10:32:02
いや、そのメソッドを実行開始する前にJITコンパイルが必要だから、
そのメソッドを実行開始する前に、型がロードされる。JITコンパイルしようとして。

これでなんで分からないんだ?
初めてDLL_Class_Testが呼び出される時点、つまりDLL_Class_Test();の部分を実行箇所に来ると、
この時点でDLL_Class_TestのJITコンパイルが開始され、
まだロードされてないClassLibrary.MyClassが必要と認識され、
自動的にロードが試みられる。
↓
ふぁいるが見つかんないから例外
↓
DLL_Class_Testメソッド内の
ClassLibrary.MyClass test = new ClassLibrary.MyClass();ではなく、
MainのDLL_Class_Test();
の実行箇所で例外となる。
0988デフォルトの名無しさん2006/12/09(土) 11:30:39
ザッツオール!
0989デフォルトの名無しさん2006/12/09(土) 15:32:10
32bitのpng画像なんですが、汚くなってしまいます。

なにかのcontrol.Image プロパティに直接指定したときは綺麗なんですが、
一度ImageListに格納してしまうと(ColorDepth を32bitにしています)
微妙にアルファがつぶれてくれます。
iconでも確認しました。


回避法はありませんか〜?
0990デフォルトの名無しさん2006/12/09(土) 15:45:51
メッセージボックスに表示される文字列を改行することってできますか
0991デフォルトの名無しさん2006/12/09(土) 15:51:39
それはギャグで(ry
0992デフォルトの名無しさん2006/12/09(土) 16:02:51
改行文字を入れればいいと思うよ。
レス数が950を超えています。1000を超えると書き込みができなくなります。