一個あるんだから立てんなよ・・・
>>1 そんなに俺のことが嫌いなのかよ? このフナムシ!
きもい粘着のことは忘れて
新たな気持ちで参りましょう
正規表現で置換する以外に、文字列内に含まれる変数名を展開する便利関数てないですか?
string str = "あいうえおabcけこ";
abc = "かきく";
変数じゃなくて Dictionary / Hashtable 使えよ
ループまわして String.Replace 使ってけばいいだろ
>>11 変数名はどうやって取得するんだ?
きめうちか?
フィールドだったら(this.GetType().GetFields())[0].Nameで取得できるよ
初心者に無駄なアドバイス。
変数名を使ったプログラムは書かないほうがいい。
変数名を使ったプログラムは書かないほうがいい。
変数名はメタ次元のものであり、それを使ってテキストと比べるのは良くない。
アルゴリズムとデータ構造がOOPと別の意味で混じってしまう。
変数のコンパイル後の内部表現とテキストが必ず同じかどうかもわからないような気もするし。
また他の言語では使えない場合が多い。
public static string 便利関数(string str, Type type, object instance){
FieldInfo[] fields = type.GetFields(
BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Static|BindingFlags.Instance);
foreach (FieldInfo field in fields){
string name = field.Name;
if (str.Contains(name)){str = str.Replace(name, field.GetValue(instance).ToString());}
}
return str;
}
static string abc = "かきく", def = "さしすせそ";
public static void Main(){
string str = "あいうえおabcけこdef";
Console.WriteLine(便利関数(str, typeof(このクラスの名前), null));}
調子に乗ってやってしまった
絶対使うなよw
>>11 文字列に意図しないstrが入っていたら...
19 :
11:2007/06/16(土) 23:02:40
あんまそういう事はしない方がいいんですかね。
perlでいうevalみたいなチョロで出来てしまうのがあればなぁと思ったんだけど。
message = "あなたの年齢はage才です。";
みたいな定型分を用意して、age部分だけ変化するみたいな。
自分でしかこの定型文の場所はいじらないから他の変数名が入るという事はないんだけど。
message1, message2みたいにしてくっつければいいだけだけど、1個にしたかったので。
String.Format 使うし。
同意
エロゲでもつくるのか?
どうしても名前付けたいなら別だが、
そうでないなら
>>20みたいにFormat使うのが無難。
エロゲか。
文字列リソースが大変そうだな〜
>>19 message = "あなたの年齢は%age%才です。";
やるんならうっかり固定テキストと被らないように↑みたいなことしてループで置換しまくれ、このフナムシ!
多用するならミニ言語っぽく仕様決めてメタな実装するのもいいんじゃね
すぐ忘れてしまうようなら濫用しないほうがいいとおもうけど
下のようにstring[]に入っているASCIIコードを、
string[] strArr = { "4e", "4f", "50", "51" };
string [] の配列 "N", "O", "P", "Q" に変換するには
どうしたらよいのでしょうか?
string[] result = new string[strArr.length];
for (int i = 0; i < strArr.length; ++i){
result[i] = Convert.ToChar(byte.Parse(strArr[i], NumberStyles.HexNumber)).ToString();
}
できました
夜遅くにありがとう
string[] result = Array.ConvertAll(strArr, delegate(string hex) { byte.Parse(strArr[i], NumberStyles.HexNumber)).ToString(); });
間違い
string[] result = Array.ConvertAll(strArr, delegate(string hex) { Convert.ToChar(byte.Parse(hex, NumberStyles.HexNumber)).ToString(); });
DataGridViewのDataSourceにに自作クラスのコレクションを設定したときに、
ソートできないのですが、どうすればソートできるようになるでしょうか?
よろしくお願いします。
IComparableは実装済み?
IComparerか
データソースのコレクションはListで、自作クラスはIComparableを実装しています。
DataGridViewの方はBindingSource以外は何もいじっていません。
絡むヘッダクリックイベントで自分でSort()
enum にインターフェイスってかぶせられないんですかね?
SomeClass.Set(int value);
というメソッドがあって、enum で渡したいのですが、
複数の種類の enum を渡したいと考えています。
SomeClass.Set((int)SomeEnum.One);
とすることはできるのですが、いちいちキャストするのがあまりスマートではないので、
もっと良い方法はないでしょうか?
他のenumを包含したenumを作れば?
オーバーロード汁
それいうならスーパーロードでは?
>>38 横からすまそ、enum のオーバーロードってどうやるの?
SomeClass.Set(PastelColor value);
SomeClass.Set(PrimaryColor value);
SomeClass.Set(LightColor value);
みたいなことを言ってるんだろたぶん
>>41 あー、それじゃ、enum が増えたときに対応できないね。
>>42 enumにそれを求めるのは間違いだろ
OOP的にやれよ
enumが増えるって何か設計がおかしいような気がするんだが
普通にクラスにしろよって話だわな
どんなことがしたくてそういう設計になったのか気になるのだが。
単に興味があるだけなんで別に答えなくてもいいけど。
Generic型の定数をstaitcで宣言したいのですが、タイプ初期化子例外
がでます。解決法を教授いただけないでしょうか?
public class TestClass<T>
{
public T Value;
public static TestClass<T> ConstValue = new TestClass<T>();
}
static Main()
{
TestClass<int> test = TestClass<int>.ConstValue;
}
}
全くどうでもいいが、Const を名乗るなら ReadOnly くらい付けようぜ。
あ、readonly だ
53 :
デフォルトの名無しさん:2007/06/19(火) 02:15:41
すいません、教えてください。
xmlからxsdと通してDataGridViewにデータを表示し編集したりしようとしてるんですが
CheckBoxにチェックしたら、xmlではTrueになりTextBox内容はそのまま残るまではわかります。
ただ、Buttonの項目だけ、xmlに情報として残りません。
実際したいことは、ButtonでColorDialogを表示し、Buttonセル自体をそのColorDialog
で設定した色で色づけして、その後TextBoxから読み込んだ文字列を他の処理にあてるとき
その色を使うため、色見本として表示させてるんですが、xmlにそのButtonに関する情報が
記録されないため、閉じて、再度開いたら、色が元通りの白になります。
xmlにそんな情報まで残せないのでしょうか。
すいませんが、対処法を教えてください。
これは試練なのだろう。
これが理解できたらおれはあの娘に結婚申し込む
55 :
デフォルトの名無しさん:2007/06/19(火) 06:33:18
Console を noecho モードにする方法ってありませんか?
ちなみにできれば 1.1 で。 2+ なら ReadKey 使えそうなんですが。
ReadConsoleInput
>>53 無理じゃないか?
xmlにはデータセットを通してデータが保存されている。
データは常識的には、
チェックボックスにはチェックの状態、
テキストボックスにはテキストとなるだろう。
ではボタンのデータって何だ?
DataColumn column = new DataColumn("Button", typeof(Button));
BackgroundWorkerについて相談です。
以前作ったFileEnum(仮名)というクラスがあって、EnumDir(path, pattern)という
メソッドを呼ぶと、ディレクトリを再帰走査して、ディレクトリ一個ずつ
FindDirイベントが発生する、というものです。
Abort()メソッドも付けてあって、従来のスレッド処理やDoEvents()を使った方法で
中止させることができます。
こいつをBackgroundWorkerで処理させようと思い、とりあえずキャンセルボタンを
増設してBackgroundWorker.CancelAsync()を呼ぶようにしました。
資料を読むと、キャンセルさせたいときには
DoWork イベント内でCancellationPendingプロパティを監視してDoWorkEventArgs.Cancel
を設定しろ、ということらしいです。
しかし上記のクラスだとDoWork内で呼び出したFileEnum.EnumDir()メソッドが、
いったんこちらにお返しするのが別のイベントになってるので、
DoWorkEventArgsを参照できないので困っています。
DoWorkEventArgsは無視して、FindDirイベントの中でCancellationPending=trueなら
FileEnum.Abort()しとけばいいんでしょうか?
それはよくないという場合、たとえば
DoWorkEventArgsを呼び出しフォームのフィールドに代入してFindDirイベントで参照
するとか考えたんですが、
ほかにうまい方法があったら教えてください。
ながくてすまん。
>>59 なんかそもそもスレッドの意味が分かってなさそう。。
真面目に勉強するのが結局一番早道だと思うよ。
少なくともスレッドの意味も知らずにスレッド使うのは無理無駄ムラ。
前スレをBackgroundWorkerで検索
職場に、スレッド使うと処理が早くなるって勘違いしていたババアエンジニアが居たな。
今も目の前でプログラムくんでるけど。
そんなんケースバイケース
ケースバイケースばい
>ババアエンジニア
kwsk
変なところに食いつくなよw
神速黒い風様が500ゲットォーーー!!!!
おしい
マルチコアでもマルチプロセッサでもスレッドはほとんど恩恵をうけれないんだよな?
ネットやディスクなどのアクセスが絡んでくると待機時間がもったいない
一見正論だが、大抵の場合その待機時間が必要時間全体のほぼすべてである。
最近はマルチコアCPUなので高速化の為にスレッド分けることがあるって聞いたけど嘘ですかそうですか
スレッドは同一プロセスで、プロセスは普通CPUまたいで動作しない。
環境依存だろ
試したの?
テストした人教えて。
C# でどうなのかは知らんが、
マルチコアでマルチスレッドにして高速化なんてのは
並列計算業界では常識的に行われている事。
口ばっかで試す奴なんかいないだろ
え?
高速化、とかそんな漠然といわれても。
string my_url = "
http://www.yahoo.co.jp";
HttpWebRequest req = WebRequest.Create(my_url) as HttpWebRequest;
HttpWebResponse res = null;
try
{
res = req.GetResponse() as HttpWebResponse;
}
catch
{
textBox1.Text = "指定した Web ページが応答していません!";
return;
}
StreamReader reader = new StreamReader(res.GetResponseStream(),
Encoding.GetEncoding("EUC-JP"));
textBox1.Text = reader.ReadToEnd();
System.Xml.XmlDataDocument doc= new System.Xml.XmlDataDocument();
String xml = textBox1.Text;
doc.LoadXml(xml);
yahooのウェブページをXMLDocumentにしたいのですが、LoadXmlのところで
6 行目にある開始タグ 'meta' と、終了タグ 'head' とは対応していません。 行 306、位置 3 です。
というエラーになり止ってしまいます。
metaとheadに対応していないということでしょうか。
解決策はありますでしょうか?
XHTMLではなくHTMLのページをXMLとしては読み込めませんよ
どうしても読み込ませたいなら、自力でXHTMLに変換してから読み込ませてくださいw
>>83 あり。
ではウェブページの構造解析をするのは
自力でやるかWebBrowser経由でやるかどっちかなんですね・・
DOM 使うだけなら Microsoft.mshtml.dll 使えんこともないが。
DataTableの列を入れ替える方法ってある?
Accessのクロスクエリみたいな処理作ってるんだけど、データ発生順に列を生成してるから列が発生順になるんだ
教えてエロい人
DataTableにこだわるならDataColumnCollectionからカラム削除してまた追加
データを表示する時に希望の並び順でさえあればいいならDataGridView.DisplayIndex
たんいつCPUならマイクロスレッドにしとけ。
マルチコアなどならスレッドわけも利点があろうもん。
>87
thx
最終的にFlexGridとかいうグリッドコントロールのDataSourceにぶっ込むたかったので
グリッドにぶっ込んだ後で整形すればいいだけか
90 :
デフォルトの名無しさん:2007/06/21(木) 13:08:13
質問です。下記のようなコードを作り、SQLで店舗を検索、検索に
引っかからなかったときはif(listbox.Items.Count == 0)としています。
このとき、また新たに検索して店舗がリストボックスに表示されるときに
店舗名ではなく、System.Data.DataRowViewと表示されてしまいます。
検索に引っかからなかったときだけ上記のように表示されてしまい困ってます。
DisplayMemberなどを追加してあげても駄目なんです。
どうすればいいでしょうか?
OleDbDataAdapter oleda;
DataSet dataSet11 = new DataSet("SHOP_MST");
oleda = new OleDbDataAdapter("SELECT〜(略);
oleda.Fill(dataSet11,"SHOP_MST");
listbox.DataSource = dataSet11.Tables["SHOP_MST"];
listbox.DisplayMember = "SHOP_JP_NAME";
listbox.SelectedValue = "SHOP_JP_NAME";
if(listbox.Items.Count == 0)
{
MessageBox.Show("店舗が見つかりませんでした。");
MessageBox.Show("日付はyyyy/MM/dd形式で入力してください。");
return;
91 :
90:2007/06/21(木) 13:14:35
はう・・・見づらくてすみません・・・・orz
>90
ItemsじゃなくてRowsじゃね?
93 :
90:2007/06/21(木) 13:48:05
Rowsがないです・・・
94 :
92:2007/06/21(木) 13:52:38
ちょっと勘違いしてたけど
oleda.Fill(dataSet11,"SHOP_MST");
の後に
if(dataSet11.Tables["SHOP_MST"].Rows.Count == 0)
が良いんじゃまいかとオモタ
95 :
90:2007/06/21(木) 13:57:53
dataSet11は競合されていますって出てしまいまする・・・
96 :
92:2007/06/21(木) 14:39:56
エラーはわからんけどTable追加してないのが問題かな?
OleDbDataAdapter oleda;
DataSet dataSet11 = new DataSet("HOGE");
dataSet11.Tables.Add("SHOP_MST");
oleda = new OleDbDataAdapter("SELECT〜(略");
oleda.Fill(dataSet11,"SHOP_MST");
MessageBox.Show(dataSet11.Tables["SHOP_MST"].Rows.Count.ToString());
97 :
90:2007/06/21(木) 16:06:34
追加してみましたが、駄目です・・・原因不明だ・・・・
こっちで同じようなコード書いてみたけど再現しないな
データの取得自体は上手くいってるの?
99 :
90:2007/06/21(木) 16:13:42
取得自体はうまくいっています。ただ、表示だけがSystem〜っとなってしまいます。
100 :
92:2007/06/21(木) 16:13:59
問題なければその処理全体をここに貼り付けr
その表示はtoString() なんだろうし、どこか勘違いしてるだけぽいが
102 :
90:2007/06/21(木) 16:34:53
Tostringにしても変わらず・・・でした
いや、そうじゃなくてね……
104 :
92:2007/06/21(木) 16:37:47
System.Data.DataRowViewになる原因は分かってる
データ取得できる状態にしてDisplayMemberの行をコメントにしてみればなんとなく分かる
DataTableが0行でもListBoxには型名が貼り付けられるからItemsの数をかぞえちゃだめなんだよ
Rows.Countが通らない理由はシラネ
105 :
90:2007/06/21(木) 16:37:48
System.Data,DataRowViewとなっているのを
MessageBox.Show(listBox.Text)で表示させてみると
そっちはきちんと店名が表示されてます・・・
106 :
92:2007/06/21(木) 16:54:01
まぁソース全体見ないとなんとも言えない
107 :
90:2007/06/21(木) 16:54:29
今試してみたところ
if(listbox.Items.Count == 0)を無くしてみたのですが
検索が0件だった場合=表示がおかしくなってしまうみたいです。
108 :
90:2007/06/21(木) 17:04:43
private void buttom1_Click(object sender, System.EventArgs e)
{
try
{
if(DateTime.Parse(textBox1.Text) > DateTime.Parse(textBox2.Text))
{
MessageBox.Show("日付を正しく入力してください。");
return;
}
else
{
OleDbDataAdapter oleda;
DataSet dataSet11 = new DataSet("SHOP_MST");
oleda = new OleDbDataAdapter("SELECT〜);
oleda.Fill(dataSet11,"SHOP_MST");
listbox.DataSource = dataSet11.Tables["SHOP_MST"];
listbox.DisplayMember = "SHOP_JP_NAME";
listbox.SelectedValue = "SHOP_JP_NAME";
}
if(listbox.Items.Count == 0)
{
MessageBox.Show("店舗が見つかりませんでした。");
}
}
catch
{
MessageBox.Show("日付を正しく入力してください");
}
}
109 :
90:2007/06/21(木) 17:06:00
上記がソース全体です。
そういうことにListBox(というかコントロール)を使うな
listbox.SelectedValueはただのタイプミスだよな?
mdb相手に全く同じコード使っても再現できず
("SELECT〜);と略した部分にでも問題があるんでね?
>>108 前に質問してた方ですねw
ふらっとに移らなかったの?
113 :
92:2007/06/21(木) 17:31:03
いろいろ問題を残したままとりあえずうちの環境では動いた(DB関係は別として)
これでだめならSQL見直さないとだめだな
書き込もうとしたら改行多いって言われたのでインデントは変だけどキニシナイ
private void buttom1_Click(object sender, System.EventArgs e)
{ try {
if(DateTime.Parse(textBox1.Text) > DateTime.Parse(textBox2.Text))
{ MessageBox.Show("日付を正しく入力してください。");
return;
} else
{
OleDbDataAdapter oleda;
DataSet dataSet11 = new DataSet("HOGE");
dataSet11.Tables.Add("SHOP_MST");
oleda = new OleDbDataAdapter("SELECT");
oleda.Fill(dataSet11.Tables["SHOP_MST"]);
if (dataSet11.Tables["SHOP_MST"].Rows.Count == 0)
{ MessageBox.Show("データ無い");
return;
} listBox1.DataSource = dataSet11.Tables["SHOP_MST"];
listBox1.DisplayMember = "SHOP_JP_NAME";
}
}
catch
{ MessageBox.Show("日付を正しく入力してください");
}
}
114 :
90:2007/06/21(木) 17:31:18
ふらっととどちらに書き込むか迷いましたけど、こっちに来てみました。
前スレの715か
じゃあ相手にするだけ無駄だったな
116 :
90:2007/06/21(木) 17:37:27
>>92 ありがとうございます、無事動きました!
いろいろご迷惑をおかけしましたがこれにて失礼させていただきます!
にしても SelectedValue は変じゃない???
取り敢えず Parseの例外を拾ってないのはわかった。
119 :
92:2007/06/21(木) 17:47:26
前スレ見てみたけど結果を示さないほうが良かった気もするな・・・
何が問題なのか理解しないみたいだし・・・
>117
SelectedValueは消してみた
120 :
111:2007/06/21(木) 17:51:39
そもそも何が問題だったんだ?
俺の環境じゃあのコードでも動いたよ
(ValueMemberに直しとSQL文作成と接続文字列は自前のだけど)
前スレじゃDataGrid使いたいと書いてたから.NET1.1の問題なんだろうか
プログラムで詰まるたびにに質問してきそうだなあ。
俺たちはお前の友達でもお兄さんでも先輩でもない。
まあ面白けりゃ何でもありだけど。
>>60 やっぱり使い方自体変ですよね?
このスタイルでVB6時代からたまってるコード資産があるもんで、
おとなしくDoEventsでキャンセルを受け付ける方向でいきます。
新しいクラスやモデルはそれにあったコードで生かせということですね。
つかわざわざイベントで通知するもんでもないだろ、と思った。
コールバック渡すか IEnumerable<T> でも返せばいいじゃん、と。
>>123 たとえばSQL-DMOなんか、進捗をイベントで返すんですよ。
で、その手法をパクッてたんです・・・
というか、イベントというのはコールバックを渡す行為そのものじゃないかと(w
hogeクラスが複数のfugaクラスを持つときってどう表現するべき?
今は、
public class hoge
{
public fuga[] f1;
}
ってやってるんだけどf1配列から項目削除する方法で悩んでたり
こういう場合はArrayListにしたほうが良いのかね?
List<hoge> だな。
>127
これは知らんかった
こないだリリースしたプログラム直したくなってきた・・・orz
Generics知らないってどれだけもぐりだ。
それは『新薬の特許が切れてから同じ成分・同じ効果で作られる薬のこと』
ですか?
まあそうやって覚えていくのさー
サーセン、VB坊(VB6.0とかVBA)だったもんでw
ってどっちにしろVS2003じゃ使えなかったのか
今やってる作業からVS2005だったから丁度良いタイミングで知れたのかな
133 :
デフォルトの名無しさん:2007/06/22(金) 15:57:59
>>128 >これは知らんかった
新機能の一覧に位目を通せよ・・・・
目玉機能の一つだったと記憶しているが・・・
ああ、次は匿名メソッドだ
delegate { System.Console.Write("anonymous method\n"); return; }
yieldを忘れないでやってください
そんなこといやるど。
while(true) yield return "僕を忘れないで";
yield使ったことないわ
grepしたら一箇所だけ使ってた。
ちゃんとした言語としては、ジェネリックとは比較にならない革新的新機能だぞ
142 :
デフォルトの名無しさん:2007/06/22(金) 18:33:05
実は匿名メソッドを使うポイントがよくわからん
143 :
デフォルトの名無しさん:2007/06/22(金) 18:35:26
実行時にメソッド変更できる
144 :
デフォルトの名無しさん:2007/06/22(金) 18:37:07
という馬具の温床
多態性を完全否定した
コールバックかくのに妙なメンバ関数を増やさなくて済むようになる。
147 :
デフォルトの名無しさん:2007/06/22(金) 18:47:44
イチイチクラスメソッドをオーバーライドしないでも書き換えれてしまう でOK?
わざわざメソッドを書くんだったら
内部クラスでインターフェイスを実装するのとそんなに変わらん
149 :
デフォルトの名無しさん:2007/06/22(金) 20:29:54
チーム内で、C#のツールを作ってもらっています。
その開発環境のOSは、Windows Vistaなのですが、実行ファイルをもらう時に、
いったん、WindowsXPで、再コンパイルしているので、何故か?と聞いたところ、
Vistaの環境コンパイルしたものは、WindowsXPで動かない、という話を聞きました。
こういったことはあるのでしょうか?
情報や、解決策等のwebページを見つけられませんでした。
どこかにありますでしょうか?
150 :
デフォルトの名無しさん:2007/06/22(金) 20:31:48
>>141 確かに。
イテレータが、yieldで書けるなんて、スクリプト言語かとおもたよ。
Delphiなんて、yieldないから、イテレータ書くの四苦八苦ですぜ。
イェールド
でいいの?
いーるど
どうせなら
public void DoAction(){
処理1();
yield return;
処理2();
yield return;
}
とかできるようにしてしまえばよかったのに
.NET Framework 3.0を使うとVistaとXPで変わるのかな?
入れてないから知らないけど
157 :
デフォルトの名無しさん:2007/06/22(金) 21:18:26
>>149 VB6とかならありそうだけど
フレームワークさえあればどの環境でも動くのがうりなはずなんだが・・・
一応ウチの収めてるのは動いてるっぽいけど
Vistaがx64用の場合ターゲットCPUをx64にしなければいけないと
思い込んでる人にはあったことがあるな。
よほどのことが無ければAnyCPUでOKなのだが。
> .NET FRAMWORKの違いね
>>160 そんな下らんことでいちいちつっかかるな! このフナムシ!
全部大文字って珍しいな
CLRのバージョンは同じなわけだが。
もう全員ふらっといけよ
3.0って2.0+αだろ
置き換えや削除は一切無いんじゃなかったか
そそそれが・・・
167 :
149:2007/06/23(土) 12:31:05
168 :
149:2007/06/23(土) 12:33:07
Write once, compile once, runs once.
manko once
そのおっさんが言ってるだけだろ。
無能なやつはどこにでもいる
1.1→2.0と違って3.0は2.0を完全に物理的に含んでるから気にしなくていいはず
173 :
デフォルトの名無しさん:2007/06/23(土) 17:00:36
Environment.Versionが示すCLRのバージョンはVer.2.0.50727.42のまま代わらず。
.NET 3.0で動いてるとか、WPFやWCFが使えるとかいうのはどうやって判断したらいいのだろう。
アセンブリがロードできるかチェックするとか
コピペ君って馬鹿だな、まで読んだ。
ファイル送信中にprogressbarをつかってその進渉率を表したいのですが、
ファイル送信中の情報量を受け取れるメソッドとかがあるのでしょうか?
>>178 前にも書いてあったけど送るときに分割して送って、進捗度を自分で計算して表示。
以上。
あ、書き忘れていた。
馬鹿。
馬鹿にはコピーできないって奴か。
残念ながらお前は馬鹿だ。
183 :
デフォルトの名無しさん:2007/06/24(日) 21:26:44
質問です。
.NET 2.0をターゲットにしてるんですが
メディアプレイヤーのコンポーネントでビデオ再生をしてるんですが
ここにニコニコ動画のような上から文字を入れるようにしたいんです。
メディアプレイヤーのメソッドにはそのようなものは発見出来なかったのですが、C♯で実現出来ないのでしょうか?
ない。
ちなみにC++にもない。
Direct Showで頑張れ。
メディアプレイヤーのメソッドにそのようなものが発見できるかもしれないという
発想がステキ
186 :
183:2007/06/24(日) 23:20:35
>>184 どうも。
やっぱり無いんですか。。。
DSでがんばります。
>>185 2003年ごろだったかな。
動画と字幕を扱う規格をMSがやろうとしてて
WMPに取り込まれるはずだったのよ。
実現はしなかったけど、それ絡みで残ってないかな と
ビデオ自体に字幕トラックを追加する
クイックタイムにもテキストトラックはあるな
189 :
デフォルトの名無しさん:2007/06/25(月) 04:00:17
C♯(VS2005)でWebブラウザ上でリッチアプリケーションを作る事が目的で、
ActiveXコントロールを作りたいのですが・・・
どっかのサイトで、クラスライブラリにユーザーコントロールを追加して、
プロジェクトの設定で「COM の相互運用機能に登録する」を有効にすれば作れると書いてありました。
しかし、これをHTMLに書き込んだ所、オブジェクトにそんなメソッドはないよと言われました。
色んなサイトを見ると、このActiveXモドキだと特殊なツールで登録しないといけないとか、インストーラーが必要だとか書いてましたが
実際のところ、よくあるFlashコントロールのインストールのような形で簡単にユーザーがブラウザ上で導入出来るような方法は無いのでしょうか?
>>155 voidで返したいということ?そんな致命的な話じゃないだろ。
あるクラスにエラーチェックの処理を作る場合、戻り値で成否を返すのとエラー発生させるのはどっちが一般的ですか?
例外はコスト高い
使うと便利なのかと思ったけどそうでもないのか・・・
194 :
デフォルトの名無しさん:2007/06/25(月) 10:20:22
>>191 スタックトレースや、そのたのエラー部分のメモリ情報を作成しているから時間がかかるのでナンセンス
例外はあくまで本当の例外で使うべきだと思う
195 :
90:2007/06/25(月) 11:03:26
90です。
またこちらのお世話になっても良いでしょうか?
もう勘弁してくれ
197 :
デフォルトの名無しさん:2007/06/25(月) 11:30:34
>>195 正直カンベンしてほしいが投稿するかどうかは自由だ
>>191 例外が発生しない正しい手順を用意してれば例外投げてもおk
内容によってはふらっとで
>>189 >色んなサイトを見ると、このActiveXモドキだと特殊なツールで登録しないといけないとか、インストーラーが必要だとか書いてましたが
その通り、Regasm.exeで登録するか、インストーラー使ってレジストリに書き込むしかない。
それが嫌なら、VS6.0のVBかVC++を使え。
しかしActiveXとか懐かしいな。今じゃ普通は.NETサーバーを使ったWebプログラミングにした方が良いと思うが。
あ、その場合は板違いだからWebプログラミング板で聞けよ。
201 :
90:2007/06/25(月) 11:39:16
先週の続きなのですが・・・ListBoxの中に表示された店舗をforを使い
ループで回しながらリストで選択されたデータを取得し、DataGridに表示
させようとしているのですが、上手く行きません。
private void buttom1_Click(object sender, System.EventArgs e)
{
int i;
int c;
c = Uri_detail_lstbox.Items.Count;
for(i = 0; i < c; i++)
{
if(listbox.GetSelected(i) == true)
{
OleDbDataAdapter oleda;
ataSet dataSet11 = new DataSet("SHOP_MST");
oleda = new OleDbDataAdapter("SELECT SHOP_JP_NAME FROM SHOP_MST WHERE SHOP_JP_NAME = '" + listbox.Items[i].ToString + "'",olecon);
oleda.Fill(dataSet11,"SHOP_MST");
dataGrid1.DataSource = dataSet11.Tables["SHOP_MST"];
}
}
}
という感じでやっています。
やっぱ.NET1.1だったのか?
203 :
デフォルトの名無しさん:2007/06/25(月) 11:43:54
どうせ全てのデータが表示されるんじゃなくて
最後の1つだけの情報がでてるとか言うオチなんだろ?
204 :
90:2007/06/25(月) 11:44:38
今見てみましたが、.NET1.1みたいです。
205 :
90:2007/06/25(月) 11:48:15
何一つ情報が出てこないんです。
206 :
デフォルトの名無しさん:2007/06/25(月) 11:52:24
まずループでまわすのはSelectedItemsのLengthだけにしたほうがステップ実行する時にわかりやすいかもな
あと、これでエラーは出てきていない?
エラーでてないんなら
"SELECT SHOP_JP_NAME FROM SHOP_MST WHERE SHOP_JP_NAME = '" + listbox.Items[i].ToString + "'"
まずこれを
debug.writeline "SELECT SHOP_JP_NAME FROM SHOP_MST WHERE SHOP_JP_NAME = '" + listbox.Items[i].ToString + "'"
かなんかで出力してDBで直接実行させてみて
それで出てない可能性が高いとおもうが?
ところでDBなんだったっけ?
今までのまとめ
・
>>90は外国人
・DBはoracle
・oracleだけどoledb
・素人のはずなのに環境選べず2.0を使わせてもらえない可哀想な子
・WHERE句のAND条件を知らない
208 :
デフォルトの名無しさん:2007/06/25(月) 11:53:49
とりあえずこれを実行、SQLのhogehogeはデータに存在するやつに直してからな
private void buttom1_Click(object sender, System.EventArgs e)
{
OleDbDataAdapter oleda;
DataSet dataSet11 = new DataSet("SHOP_MST");
oleda = new OleDbDataAdapter("SELECT SHOP_JP_NAME FROM SHOP_MST WHERE SHOP_JP_NAME = 'hogehoge'",olecon);
oleda.Fill(dataSet11,"SHOP_MST");
dataGrid1.DataSource = dataSet11.Tables["SHOP_MST"];
}
210 :
90:2007/06/25(月) 12:33:57
211 :
デフォルトの名無しさん:2007/06/25(月) 12:46:39
>>210 じゃぁ入ってるデータ(listbox.Items[i].ToString の結果)に問題があるんじゃ・・・?
じゃあ次はこれを実行なだ
private void buttom1_Click(object sender, System.EventArgs e)
{
MessageBox.Show(listbox.Items[listbox.SelectedIndex].ToString());
}
あのさ、ここで質問する前にlistbox.Items[i].ToStringの値がおかしいはずって気づくよね
まずそこを調べてみれば、ValueMember設定したらItemにDataRowViewが入っていることが
分かるわけで解決するよな
以前の質問もValueMemberとSelectedValueを間違えているせいで表示されなかったんだろうな
214 :
90:2007/06/25(月) 12:56:25
店舗を選択している状態でボタンを押すとだと、Sysytem.Data.DataRowViewと出てきます。
215 :
デフォルトの名無しさん:2007/06/25(月) 12:57:00
\(^o^)/お約束ktkr
216 :
212:2007/06/25(月) 13:00:43
oleda = new OleDbDataAdapter("SELECT SHOP_JP_NAME FROM SHOP_MST WHERE SHOP_JP_NAME = '" + listbox.Items[i].ToString + "'",olecon);
これを
DataRowView view = this.listbox.Items[i] as DataRowView;
oleda = new OleDbDataAdapter("SELECT SHOP_JP_NAME FROM SHOP_MST WHERE SHOP_JP_NAME = '" +
view[this.listbox.ValueMember].ToString() +
"'",olecon);
に変更すれば、「複数店舗選択したはずなのに一つだけで抽出されます><」って
次の糞質問ができるようになるので死んでください
212じゃなく213でした><
218 :
90:2007/06/25(月) 13:12:03
追加情報 : SHOP_MST.SHOP_JP_NAME は、テーブル SHOP_MST の DataColumn でも DataRelation でもありません。
っと表示されました
お 前 は 他 人 に レ ス を ち ゃ ん と 読 め
220 :
デフォルトの名無しさん:2007/06/25(月) 13:14:04
そろそろカンベンしてほしいところだな
そろそろ一撃で終わらせたい
>>220 お前が自由だなんて書き込んだからまた来たんだろうがw
ちゃんと最後まで責任取れよ
222 :
90:2007/06/25(月) 13:24:09
すいません。ちゃんと店舗名が表示されました。
223 :
90:2007/06/25(月) 13:28:43
ごめんなさい。
216の言うとおりなんですが・・・複数店舗表示させるにはどうすればいいでしょうか?
private void button3_Click(object sender, EventArgs e)
{
MessageBox.Show(((DataRowView)listbox.Items[listBox1.SelectedIndex]).Row[0].ToString());
}
225 :
デフォルトの名無しさん:2007/06/25(月) 13:29:34
>>223 ループで毎回データソース上書きしているのがおかしいってことに気づくように頭を鍛える
227 :
デフォルトの名無しさん:2007/06/25(月) 13:31:27
WHERE SHOP_JP_NAME = '" +view[this.listbox.ValueMember].ToString() +"'"
この部分を
WHERE SHOP_JP_NAME IN( '店舗名1','店舗名2' )
とかにするのはどうだ?
WHEREでガリガリくっつけるのもありだが
228 :
90:2007/06/25(月) 13:42:36
>>227 毎回選択されるものが違うのですが、INで大丈夫なんでしょうか?
お前の脳みそがまともなら大丈夫
230 :
90:2007/06/25(月) 13:52:57
すみません。どうやればいいでしょうか・・・・
まず、リストボックスで選択された店舗名をstring配列に突っ込む
次にそのstring配列使ってINの'店舗名1','店舗名2'の部分を作っていく
string.Joinあたりを使うと楽
232 :
90:2007/06/25(月) 14:07:55
本当に無知ですいません・・・・。
string配列とか使ったこと無いので分からないんですけど
具体的にどのような形にすればいいですか?
それすら分からないってのは、人に聞く以前の問題だから基礎を勉強してから来てください
234 :
90:2007/06/25(月) 14:20:05
選択された店舗名を配列にどうやって突っ込んでしょうか?
釣りはお腹いっぱい
Nyow Dow
まずはSQLを手で書けるように環境と教科書を整えて
238 :
デフォルトの名無しさん:2007/06/25(月) 14:45:42
これはやばいwww
今更だが俺の一言がこれほどの事態を呼び起こそうとは
NT○の時以来だ・・・orz
すまんみんな
俺も頑張る
239 :
90:2007/06/25(月) 14:49:38
お願いします、詳しく教えてください。
if(listbox.GetSelected(i) == true)
とか書いちゃうようなバカにDB使わせちゃう会社って凄いな
よほどデータベース管理者がしっかりしてるんだろうなぁ
241 :
デフォルトの名無しさん:2007/06/25(月) 14:51:55
Object型だと面倒くさいから
StringCollectionあたり使ってみるのはどうだろうか?
デブサイコにちょっと情けかけちゃったら
必死ですがりついてくるようになったようなもんだな。
これが最後のチャンスと思って死ぬ気で全体重かけてくる
>>242 ブサイコ、で検索したら(((((( ;゚Д゚)))))ガクガクブルブル なページがあって寒くなった
245 :
90:2007/06/25(月) 16:05:54
どうやって配列にListBoxの項目を入れるんでしょうか・・・
死ねよ^^
247 :
デフォルトの名無しさん:2007/06/25(月) 16:13:27
もはや自分で考えることすら放棄したか・・・
もう諦めて本読んで勉強しろ
一週間はコード書くな
ここまで読み飛ばした
251 :
178:2007/06/25(月) 21:08:11
>>180 ファイルをどうやって分割して送るんですか?
copyメソッドではそんなことできないですよね?
あとマルチ行為を働いたことを心のそこからお詫びします。
だから教えてください。
copyメソッドを使わない
えー回答がそれっすか?
>>178 ShellAPIになんかそういうのあったじゃん。それ使っとけ。
というか、進渉じゃなくて進捗だろうが。
C#以前に日本語の勉強して来いよ。
>>254 押入れにしまっていた漢字ドリルをとりだして勉強します。
あと大好きです。
むしろ「渉」ってなんて読むのw
進捗の方が余程易しい漢字のように思うんですが。
ああ交渉のねなるほど。
単独で使わない漢字は熟語でみないと分からないもんだな。
どうでもいいが、俺は営業でも商売人でもないんで交渉とは縁なんか当然ないよ。
君は脳内スーパーPGでヘッドハンターとの交渉に明け暮れてるのかなw
しんしょうりつ!!!
今の人間は「川を渉る」とか書かないわけ?
書いたこと無いなぁ
そういえば小学生のころの友達に渉っていたな。
∧_∧
ピュー ( ^^ ) <これからも山崎を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎――◎ 山崎渉
複数の型を取り扱えるように List<T> を継承した、Data<T> クラスを作りました。
次に Data<string> も Data<int> も同一に扱えるように、IData インターフェイスを
つくり Data<T> にかぶせました。
でも、
IData d = new Data<int>();
d.Add(hoge);
ということができませんので、IData インターフェイスに、
void Add(object item);
Data に
public void Add(object item)
{
base.Add((T)item);
}
とメソッドを実装しました。
これで、
IData d = new Data<int>();
d.Add(hoge);
ができるようになってのですが、Add の引数が object なのでキャスト時に
エラーが出ると思います。
もっとスマートな実装は考えられるでしょうか?
string と int を同一に扱いたいのならば
object の配列なりリストなりを使えばいいだけでは
List を使う処理の部分をジェネリッククラスに分離して
(Add を利用するような処理も全部)、
それをポリモーフィックに扱うんじゃだめなの?
>>267 たとえばどんなふうに?IData に Data を入れてポリモーフィックに扱ってるんじゃないの?
こんなイメージになるか?
interface IA { void Hoge(); }
class A<T> : IA { private List<T> list = new List<T>(); }
class A_int : A<int> {
public void Hoge() { list.Add(1); }
}
class A_string : A<string> {
public void Hoge() { list.Add("hoge"); }
}
>>264 interface IData<T> {
void Add(T item);
}
>>270 それはあまり意味がないのでは?
List を直接使ったのと同じ事かと。
>>269 なるほどね。用意する型の数が少なければこの方法がいいね。
多い場合は
>>264 でも良い気がする。
d.Add メソッドの中で型のチェックをすればおけ。
そもそも
>>264のやりたいことの意味がわからん。
アイテムの型として複数のを許容するリストを作りたいのかなんなのか
回答してる奴は本当に分かって回答してるか?
再考を要すると思うぞ俺は。
そもそも根本的にGenericsがどんなものかわかってないんじゃないか?
>>273 >アイテムの型として複数のを許容するリストを作りたいのかなんなのか
あんたが一番分かってないじゃん
状況に応じて int のリストを扱ったり、
string のリストを扱ったりしたいんだと思ってるけど、
それが一体どういう状況なのかはイマイチ分からないな。
みんなよく264の言ってることわかるなー。
IListで済みそうな話に見えるけど
つまり、List<T>がIList(非ジェネリック)を実装してるのと同じようなことがやりたいの?
非ジェネリックの方を明示的実装にしとけば気休めにはなる
>>273 みなさまお手を煩わせて申し訳ありません。
えーっとやりたいことは、
1. ある計算をするクラスがいろいろとある。
2. この計算は、int のときもあれば double のときもある。
3. int, double ごとに、計算クラスを作りたくない
ので、複数の型を許容するジェネリックを使いました。
>>264 の例で、string と書きましたが、string は使いません。
ジェネリッククラスを 1 つ作るんじゃないのか? 普通は。
>>279 お前Genericsとは何なのか理解してないだろ。
>>280 そうです。今は List<T> を継承した Data<T> : List<T> クラスを使っています。
これで int や double の配列として使えますので。
ジェネリックの使い方がわかっていないのかも知れません。
すいません、書籍に関して質問です。
私はC/C++、構造化/オブジェクト指向あたりは2〜3年位やっていて
プログラムの基礎の部分は抑えているつもりです。
興味の対象は web アプリ等ではなく PC で単独で動くWindowsアプリケーションで、今は
VC++&Win32API より使いやすいらしいという C#&.net framework を勉強してみようかと考えている所です。
で、よさげな本を探していたら「C#によるプログラミングWindows 上 (Charles Petzold) 」という本を見つけたのですが
・VS、あるいは.netがバージョンアップを繰り返しているけど、この本は今でも使い物になるか
・難易度は少々高くてもいいけど、中身は充実してるか(興味の対象と照らし合わせて、他に良い本がないか)
という点が気になっています。
以上、読んだ方がおられましたら参考までに教えていただけると嬉しいです。
>>284 わからんけど新しいもの買ったほうがよさそう。
本は複数買うように。
っと思ったけど、古いよそれ。
本屋にあるのは立ち読みされてべろべろの奴ばっか。
UIに関する説明がメインだと記憶する。会社にあるが誰も見ない
初めて○○を勉強する人にオライリーを勧める奴だけは信用するなよ
悪書?
292 :
デフォルトの名無しさん:2007/06/27(水) 00:29:42
>>290 初心者には難しいし、何より退屈だからな。
買うときは俺のサイトのアフィ経由で頼むぞ
オライリーを持ってるだけで知ったかぶりするヤツは確かにいるな
296 :
デフォルトの名無しさん:2007/06/27(水) 01:21:22
知り合いは表紙が好きだからオライリー買ってると言ってた
XP VC#2005を使用しています
TextBoxを継承したカスタムコントロール内で
protected override void OnEnter(System.EventArgs e) { }
を記述しフォーカス時に背景色を書いている(共通処理用)のですが、
フォームにこのカスタムテキストボックスを配置してEnterイベント(個々の処理用)
private void CustomTxt_Enter(object sender,EventArgs e) {}
を記述もEnterイベントが発生しません。ドキュメントには継承時の注意として
>派生クラスで OnEnter をオーバーライドする場合は、
>登録されているデリゲートがイベントを受け取ることができるように、
>基本クラスの OnEnter メソッドを呼び出してください。
と書いているのですが意味が良くわかりません。
base を調べれ
299 :
297:2007/06/27(水) 03:16:01
>>298 ヒントありがとうございます。ドキュメントに書いてある内容の意味がよくわかりました。
カスタムコントロールで
protected override void OnEnter(System.EventArgs e) {
base.OnEnter(e);
}
としたらできました。
DataTable.Select()を用いてLINQのように絞り込みながら検索していく
ことはできないでしょうか?例えばtableA(属性a,属性b)があって、
(1,1)(2,1)(2,2)(3,3)のインタンスがあります。
まずはa=2で絞りこむ→(2,1)(2,2)
その結果からb=max(b)を絞り込む→(2,2)
ということが目的です。
DataView の RowFilter に AND くっつけていく
>>284 ・VS、あるいは.netがバージョンアップを繰り返しているけど、この本は今でも使い物になるか
No
いい本だとは思う。Ver2の差分を他の本で補うのなら購入してもいいとは思うが。
バージョンの差分が大きいので、今は他の本を探した方がいいとおもう。
・難易度は少々高くてもいいけど、中身は充実してるか(興味の対象と照らし合わせて、他に良い本がないか)
Yes
ふらっとの方がまた新スレ立つ前に埋まったな
このスレにはZARDの坂井の葬儀に行った人はいないだろうね。
スレ違い。よそへ逝け
坂井をよく見るとC#が隠れている。
interfaceを設計するとき
Hoge GetHoge();
と
T Hoge
{
get;
}
どっちを選ぶかの指針ってありますん?
ご教示ねがいます。
Hoge GetNantoka();
と
Hoge Nantoka
{
get;
}
のまちがいでした
つ MSDN『プロパティとメソッドの選択』
そのゲッターを定義すること自体がインターフェイスの目的だったらGetNantokaにするとか
315 :
デフォルトの名無しさん:2007/06/28(木) 23:05:37
ふるいスレがあがってるのでage
316 :
デフォルトの名無しさん:2007/06/29(金) 11:54:18
VisualStudio.NET 2005 C#
なのですが、例外について質問があります。
try〜catch は、付けようと思えばすべての関数に付けることができますし、
バグを含むすべての可能性に対処するのであればすべての関数につけるべきだと思います。
しかし実際のところどうなのでしょうか?
理論上、絶対に例外が発生しないところにはtry〜catchは付けず、
プログラム使用者の使い方によって例外が発生しそうなところだけにtry〜catchを付ける、
という使用方法で良いのでしょうか?
catchする必要なトコでつけりゃいいだろ
上から呼ばれて下を呼ぶ時にそこでcatchするのがまずいこともあるべ
>>316 >バグを含むすべての可能性に対処するのであればすべての関数につけるべきだと思います。
プログラムというのは、何らかの期待する動作(仕様)の通りに動くように書くわけです。
その動作のために必要なところには try catch を書き、不要なところには書く必要がない、
と簡単に言えばこうなります。
起こりうるバグやミスへの対処はエラーチェックとロギング等で行うものであって、
try catch を入れたからといって何か良いことが起きるわけでもありません。
320 :
316:2007/06/29(金) 12:49:10
>>317-319 ありがとうございます。
例外の必要・不必要をそのつど見極めるべきで、
無条件にすべてに例外を付けるのはナンセンスのようですね。
>>320 なんらかの異常が発生したときにプログラムにどういう動作をしてほしいか考えればおのずとどこにcatchをいれるべきかわかろう。
例外をしらみつぶしにするなら、(たいていの場合)対処のしようのないOutOfMemoryExceptionや、IllegalEngineStateExceptionまでも考えないといけない
323 :
デフォルトの名無しさん:2007/06/29(金) 16:06:31
インターフェイスをユーザーが実装したときに,
VSのエディタでメソッド等が表示される順番をコントロールするAttributeってないですか?
現状アルファベット順で並んでしまうので、機能別に並べたいです
仕事でC#使ってる人、難読化とかってしてる?
仕事だけど使う人が限定してるので特には
>>323 あるのでMSDNをよく読んでください。
>>325 不特定多数に配るもんじゃないとあまり理由もないでしょうしね・・・いまいち実際に使った人とかの体験談が見つからん。
>>326 頭から読んでるんですがみつかりませんorz
ヒントでもいいので下さい。どの名前空間あたりにあるかとか……
System.ComponentModel
難読化って言葉自体、はじめて聞いた。
ググってみたけどJAVAだと重要のようだね。
俺のは事務処理だから配布はすべてバイナリだし、今はまだ関係ないぽ。
> 配布はすべてバイナリだし
意味不明
>>329 降参ですorz
ケツにAttributeってついてるの見ましたが分かりませんorzorz
ずばり教えてください
実はありません。
この前、[DisplayName("01 hogehoge")]と自分で連番付けて対処したけどこれは真似しちゃダメだぞ☆
>>333 いまいち言ってることがよく分からんが、自作のプロパティがプロパティグリッドの
適当なカテゴリに表示されるようにしたい、ということなり文字通りCategory属性でしょ。
一応自分でカテゴリを新設することも可能。
まあMSDNの解説は例によって判じ物みたいだけどね。
>>323が言ってるのは、インターフェイス実装のスタブを
VSの機能を使って一括生成したときのメンバの順番のことなんじゃないの?
自分で属性定義してマクロ書くとか
>>330-332 ちょっとワラタ
難読化でググると上のほうは.NET関連のが多いじゃないか
Reflectorは感動ものだな
難読化なんてくだらないことを考える自分がちっぽけに見える
パスワード入れると修正なしでエロ画像がみれる類のシェアウェアの
作者には難読化は死活問題。
そもそもそんなものC#でつくらない。
まあ書いた本人ですら三日後に読むと何が書いてあるかワケワカラン
お前さんのコードに難読化なんて最初から必要ないわけで。
というか、お前さんの大した技術も使われてないウンココードを
一体だれがわざわざ覗くのかと。
.NETのアセンブリを拾ってきたらまず覗いてみたくはなるな
覗いてどうしようっていうわけではないけど
パッと見はワカランが、
少し時間をかければ読めるってw
347 :
デフォルトの名無しさん:2007/06/29(金) 20:33:49
C#で、テキストボックスの監視ってどうやってやるのですか?
例えば、テキストボックスと保存ボタンがあって、テキストボックスに
何も入力されていなかったらボタンのenabledをオフにしたいのです。
javaだったらテキストボックスにドキュメントリスナーを追加して
テキストボックスを監視して何も入力されていないときは、ボタンをオフにできるのだけれど・・
>>347 デフォルトでオフにしといて、
TextBoxのValidatedイベントで値の入力を確認してオンにする
349 :
デフォルトの名無しさん:2007/06/29(金) 20:51:39
>>348 でもそうすると、もう一度テキストボックスが空になったとき
オフにならなくないですか??
private void textBox1_TextChanged(object sender, EventArgs e)
{
this.button1.Enabled = !string.IsNullOrEmpty(this.textBox1.Text);
}
こんな風にしとけばいいじゃん
351 :
デフォルトの名無しさん:2007/06/29(金) 21:30:25
今、やってみたけどダメだった・・・
this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
ValidatingかValidatedイベントに
>>350と同様のイベントハンドラでは?
public Form1()
{
InitializeComponent();
button1.Enabled = false;
textBox1.TextChanged += new EventHandler(textBox1_TextChanged);
}
void textBox1_TextChanged(object sender, EventArgs e)
{
button1.Enabled = textBox1.Text.Length > 0;
}
これで普通にできるけど・・・
354 :
デフォルトの名無しさん:2007/06/29(金) 21:56:14
いやん。できた。あ・り・が・と・
あたしのダーリン♥
↑嬉しそうにハートマーク使うところが房なんだよ
房かよ
357 :
デフォルトの名無しさん:2007/06/29(金) 22:08:57
房ってなに?ふさ?
ふさふさ?
誰がハゲやねん#
C#厨と書いてあっても「しーしゃーぷぼう」と読んじゃう厨房がいるらしいよ
たまに『○○房』ってみかけるが
『○○厨』って書いてるつもりだったのか
美容師「漢字も読めずに2ちゃんねら気取りっすかwwwwwwww」
362 :
デフォルトの名無しさん:2007/06/30(土) 01:16:28
>>361 すごくいい話しに見えるフラグ来たな
だが、俺は容赦なく「例外」を投げつける・・・!
実際ぶびから流れてくる人多いし、C#マの質は・・・
俺は自分が質問するところが一つ減るのは困るから一応言わせてもらうよ。
くだらない馴れ合いがしたい寂しい奴は他所いって気が済むまでやれよ。
TPOも弁えられない低能ならプログラマなんてやめちまえよ。
まあ、もう手遅れかもしれないけどね最近のこのスレのレベルを見てると。
ああまったくだ
とりあえず
>>364はクズだな
しんどけ
>>360 厨房の房やろ
○○厨ってなんやねんwwww
>>366 あぁマックをマクドとかいう人種か
納得。
>324
Component Oneとか商用のライブラリだけにちゃんと難読化されててReflector使ってもちょっと読みづらいよ。
DotCOEなんかはそのへん少しは警戒しなきゃいけないようなアプリだと思うが、全く難読化されてなくて激しくノーガード戦法だったよ。
自分のところのアプリは試しに難読化してみてReflector掛けてみたらあんまり意味がないと思った。
お試し版のではソースに埋まってるSQLとか難読化できないのでそのままなので全然意味がなかった。
リフレクションに依存した処理が入っていると難読化すると正常に動かなくなるので
ソース書く人が多いと誰か知らぬまにリフレクションを使ったりして動かなくなるので事実上難読化してから全部再テストとかやってられないし。
enumのToStringとenum.Parseとかやって設定ファイルとかにenumの文字列表現をはき出したりすると駄目なわけだし。
dllとか分けてるとpublicな部分は難読化するわけにはいかないし。
とりあえず、中国語化して中国向けの新しい市場を開拓したいとか言ってた人がいたけど全力で反対した。
FileStreamクラスを使ってファイルのコピーに成功しました。
ファイルを分割してコピーする方法を教えていただいた方にここで御礼申し上げといてあげます。
>中国語化して中国向けの新しい市場を開拓したいとか言ってた人がいたけど全力で反対した。
難読化とのつながりをもうちょっと説明してほしい(煽りではないよ)
enumに関してはenumを難読化の対象からはずせばいいだけの話では。
難読化をうるさく言うやつに限って、誰でも作れるようなアプリしか組んでない。
ともあれWin32APIのリプレースを狙っていてこんな大問題を放置しているMSはアホ杉だな。
まあWin32も延命されたことだし.NETはサーバ周りで細々とやっていけって判断なのかね。
373 :
368:2007/06/30(土) 12:10:56
>370
中国向けに出すからコピー対策で難読化を行うってことからとりあえず難読化を試したので。
難読化とかしても全てそのままコピーされて勝手に売られると思うので
やはり中国は市場にはならないと思ってるので難読化が使い物になってても反対したけど。
中国向け以外では別に難読化なんてしなくてもかまわないと思ってるし現状は難読化してない。
何かエラーが起きてもログなどに残ってたスタックトレースも難読化されてて追いづらいのも面倒だし。
確かに、問題が起きるenumとかだけ難読化から外せばいいんだけど、
そうするとリフレクションがある以上は確実に同じ動きをするには難読化できないってことになるから。
Reflectorでカジュアルハックされるのを防止したいなら
アセンブリをリソースに暗号化して埋め込んでそれを展開したメモリから直接にアセンブリをロードするようにして
展開処理だけ難読化しとけばいいと思うよ。
単純な難読化よりかは動作への影響は少ないだろうし、それでも解析しようとするやつ相手には.NETの範囲だけでどんなに対策してもほとんど無駄だし。
374 :
デフォルトの名無しさん:2007/06/30(土) 12:40:23
やってみてから言え
375 :
側近中の側近 ◆0351148456 :2007/06/30(土) 13:25:42
(っ´▽`)っ
しぃ三姉妹だよ☆
(*゚ー゚)
(++゚ー゚)
(#゚ー゚)
C++/CLIつかって重要なロジックはネイティブコードにしときゃいいじゃん。
重要なロジックだけ分離できるならそれでもいいけどなー
何つーかフレームワーク的に全体の構造をあんまり見せたくないなぁというものに対してはそれだと難しい。
うまく鍵使って実行時に暗号解除するほうがいろいろとまんどくさくない気がしてきた。
>>284 俺もC++を知っていて、最近(ココ2,3ヶ月)会社で自分のための道具を作るのにC#で書くようになった。
.NETもCOMも利用できるので便利だしVC++よりインテリセンスがC#は良く効くので楽。
C++をマスターしてるってことで俺の場合が参考になると思う。
Petzorldの本はWinFormを読んだ、空のプロジェクトから作るので解りやすい。英語だけどWinFormに慣れるには良い。
C#そのものは、オライリーのプログラミングC#第4版を電車の中で通読
なんかオライリーのことを悪く言いたい奴がいるみたいだけど、プログラミングC#はC++解ってるなら入門には良い
.NET2.0対応と書いてるようにGenericクラスのことなども触れていて1部を通読すれば言語として大体の感じは掴める。
後はMSDNのオンラインヘルプで問題なくできるんじゃないかな?
ものによるけどWinodwsPCの中で単独で動くだけならVC++&ATL/WTLで書いたほうがコンパクトで配布も簡単な気もする
380 :
デフォルトの名無しさん:2007/06/30(土) 18:49:55
エクセルファイルを読み込んで、
ある行の一番右端に書かれてる場所が何列目に当たるのかを取得したいんだけど
どうすればその値を取得できんの?
Rows[n].Countだと65536になってしまうので。
エクセルのファイルフォーマットが読めるクラスを自作したの?
だったらあんたの自作クラスの仕様なんか、誰も知らないだろう。
違うか?
COMだろ
Excelスレで聞いた方が良いんじゃね?
俺は右端取得なんて便利なプロパティ聞いたこと無いわ
マクロ記録でctrl+→
後ろから順にサーチすりゃいいじゃん。
>380
WorkSheet内で右端というか使ってる範囲ならUsetRangeが楽だけど
ある行のを手軽に取得する手段はよくわからん。
ま、スレ違いだが。
387 :
デフォルトの名無しさん:2007/06/30(土) 23:38:41
>>386 おぉ WorkSheet内でも構わないんですけど!
ちなみにUsetRangeで検索かけてもヒット0件だったけど。。
もうちょい詳しく教えてくだちい。
range.get_End(XlDirection.xlToRight)
で、起点から、次の空白まではいけるらしいんだけど。
スレ違いとなるとVBAスレが適当なんですかね??
VBで回答きそうな。まぁいいけど。
よかねえよボケ
>>391 去った後に回答するのもなんだけど、普通に行内のセルを一つ一つチェックするしかないし、
するだけのことでしょ。
まあベタにやるとたぶん遅いので一旦行全体のRange.ValueをObjcet[255,0]に
読み取った方がいいとは思うけど。
それと、エクセル操作するならC#よりVB.NETの方が親和性高いと思う。
NetworkStreamを使ってobjectを流す方法が上手くいかなくて困っています。
以下のようなコードを書いているのですが、
Deserialize部分でStreamにデータが流れていないとのエラーが出ます。
[送信側]
Hage hage = new Hage();
BinaryFormatter bf = new BinaryFormatter();
NetworkStream ns = tcpClient.GetStream();
bf.Serialize(ns, hage);
[受信側]
Hage hage = new Hage();
BinaryFormatter bf = new BinaryFormatter();
NetworkStream ns = tcpClient.GetStream();
hage = (Hage)bf.Deserialize(ns);
この記述じゃStreamに流れないのでしょうか。
ご助言願いたいです。
>387
すまん、綴りミスってた。
UsedRangeだ。
395 :
387:2007/07/01(日) 00:38:54
>>394 ありました!
どうもありがとうございます!
>>393 あんた、なんと言うかセンスないよ。
よく考えてみろよ。
それで出来たら送受信のタイミングとかどうやってると思うんだ?
その辺はうまくやってくれないと困ります。
勝手に困ってろ。
簡単に困ると書くな。
努力しろ。
考え直せ。
何度でもやり直せ。
試せ。
その前にこれが気になる。
>bf.Serialize(ns, hage);
コンピュータやバイナリを勉強しなおしたほうがいいぞ。
>>396-398 行き詰ってつい書き込みをしてしまいました。スレ汚しすみませんでした。
送受信のタイミングについてもう少し調べてみます。
>>399 レス有難うございます。
binary部分ももう一度勉強しなおします。
いや、その前に接続しているのか?
まさかそのコードだけじゃないよな?
>>402 TcpClientとTcpListenerで接続するようにしました
[送信側]
TcpClient tcpClient = new TcpClient(address, port);
[受信側]
TcpListener tcpListener = new TcpListener(address, port);
tcpListener.Start();
TcpClient tcpClient = tcpListener.AcceptTcpClient();
ちなみに
>>397を書いたのは別人だ。
冗談だったんだが白状しておく。
そのままでも動くんじゃないの?
回答も初心者だろうね。
ちょっと聞きたいんだが、
System.Drawing.Icon appIcon = System.Drawing.Icon.ExtractAssociatedIcon( ファイルパス );
で、ファイルに関連づけられたアイコンが取得できるけど、これをListImage経由でListViewに追加したんだ。
けど、ListViewに表示されるイメージって、アイコンに入ってる16*16とかを使うじゃなくて、32*32を拡大縮小して
使うのか?
imagelistのサイズを16*16にしたら、32*32のアイコンを縮小した奴が表示されたよ。
これどうにかならない?
>>410 サンクス。
そうかAPIしかないか。
試してみたらできたよ。ありがとう。
しかし、APIにしかできない事ってまだまだ多いな。
412 :
デフォルトの名無しさん:2007/07/01(日) 15:57:01
バイナリファイルの書き込みを行いたいのですが、
必ず4バイトずつになってしまうんです。
bwr.Write(13);
bwr.Write(10);
例えば、これで改行をさせたいのですが
00 00 00 0D 00 00 00 0A
と書き込まれてしまいます
どうすれば良いのでしょうか?
よろしくお願いします。
↑byteでキャストして Write((byte)13) とか。知らんけど。
自分に回答
416 :
414:2007/07/01(日) 16:06:36
リロ忘れて邪魔してすまんかった。
出来ました、ありがとうございます
またもやすみません、追加です。
今度は桁数のある文字列のため、
bw.Write(Convert.ToString(数字));
なのですが、桁数や内容にかかわらず、前に 04 や 05 などというのゴミが1ビット入ります。
多分String型が問題だと思うのですが、何を使えばいいのでしょうか;
>>418 ゴミじゃねえよ、MSDN読め。さもなくば、死ね
>>418 その前に、
なんでバイナリなんだ
お前レベルだとテキストのほうがお似合い。
つかStreamのままじかに書き込め、書き込みたいことをそのまま。
エンコード変えとけよ
シフトJISに。
NHKの怖いおねえさんでも見とけ。
もちろん誤爆
陸上の選手怖いいい
手拍子も要求するし…
次は文字コードについて聞かれるに1000won
なんで素直にシリアライザを使わない
シリアライザってプロパティの増減に対処できないから糞杉
INIファイルのが45687980949566倍まし
おもしろいかなあ?
回答もしないで悪口言ってる奴って回答できないけど文句言いたいだけちゃうんかと
>>432 ここ2〜3日そんな感じだな
まともな回答出てないし
C#の中級者以上が読むといいような書籍ってありますか?英語でもかまいません。
C++でいえばEffective C++のようなポジションですかね?
Effective C#っていう本があるようですが読まれた方はいますか?
>>434 『プログラミングMicrosoft .NET Framework 第2版』
436 :
434:2007/07/02(月) 04:54:47
>>435 さっそくレスどうもです。
アマゾンのレビューを見た限りでは、その本はどちらかといえばC#というより
.NET Frameworkの仕組みが主みたいですね。Frameworkに関する本は既に読んだので、
今度はプログラミングの視点から見た書籍がないかなと思った次第です。
あとやや古めなのも気になりますね。2.0の機能はぜひカバーしてほしいところです。
第2版
438 :
434:2007/07/02(月) 05:49:36
>>437 2.0の機能に関してはカバーされてたみたいですね。失礼しました。
439 :
デフォルトの名無しさん:2007/07/02(月) 11:58:25
VS.NET 2005 C# で質問があります。
以下のような列挙方で定義されているものとします。
private enum hoge {
piyo1 = 0,
piyo2,
piyo3
}
ドキュメント・コメントを以下に定義しました。
/// <summary>ホゲります。</summary>
/// <param name="p">パラメータです。hoge列挙型を使用してください。</param>
void hogering(int p)
{
:
:
}
この状態で、
hogering(
と入力すると説明文が出てきますが、これを更に発展させまして、
hogering(
と入力した時点で自動的に
hogering(hoge.
まで表示させたいと思っています。
確か他のやつで、このように自動的に列挙型が提示されるものがあったかと思います。
これを実現する場合、どのようなタグを使ったらよいでしょうか?
よろしくお願いします。
void hogering(int p)
{
:
:
}void hogering(hoge p)
{
hogering((int)hoge);
}
こうしているだけじゃないか?
マジックナンバーやめれ
hogering(hoge)だけでおk
何のための列挙型だよ。
hoge型で引数取れ。
443 :
439:2007/07/02(月) 12:12:01
フラットよりも低いな
445 :
439:2007/07/02(月) 12:13:01
質問者も回答者もスレの区別してないんだし仕方ない
WIN32APIだとDragDropするときに複数のデータタイプを登録できたように思うんだけれど、.NETだとそのままだと無理?
DragDropはじめるときに文字列とかファイルとか複数登録しておいてクライアントの都合のいいデータを取るようにしたかったんだけど・・・
C#がLispに近づいてきてるってどういうこと?
?
>>447 DataObject.SetDataでいくらでも
451 :
デフォルトの名無しさん:2007/07/02(月) 16:03:50
質問者と回答者だろ
453 :
デフォルトの名無しさん:2007/07/02(月) 16:45:13
C#.NetからExcelの表を作成しています。
文字や数値を表示させる事はできましたが、
線を引く事がまだ出来てないです。
どなたか教えてください。
455 :
デフォルトの名無しさん:2007/07/02(月) 16:57:46
VBAのマクロで線書いてそれ参考に
それで苦しむなら望むところ^^
?
質問があります。
いまダイアログAとダイアログBがあります。
今度新たにタブを使ったダイアログCとDを作ろうと思ってるんですが、
CとDの最初のタブにはダイアログAとBと同じものにしたいと思ってます。
CとDができれば、AとBはもう必要ありません。
この様な場合どのようにするのが理想的なのでしょうか?
TabControl.TabPagesでAとBのTabPageを取得して
CとDに追加すれば
普通にコピーしろ
AとBの中身をユーザコントロールにするのがいいと思うよ
AとBにTabControl追加して中身をtabPage1にドラッグドロップするだけじゃね?
芸がない。
464 :
458:2007/07/02(月) 18:47:41
ありがとうございます。
とりあえずユーザーコントロールでやってみたいとおもいます。
難しそうですが、これなら他のタブは共通で使えそうですので。
>>458 public partial class Form1 : Form
{
FormA formA = new FormA();
FormC formC = new FormC();
public Form1()
{
InitializeComponent();
Control c = formA.Controls["panel1"];
formA.Controls.Remove(c);
TabControl tabControl =(TabControl) formC.Controls["tabControl1"];
tabControl.TabPages[0].Controls.Add(c);
formC.ShowDialog();
}
}
FormAにDock=Fill したpanel1を置いて、コントロールは全てその中に配置。
panel1 を FormAから取り外して、FormCのTabPageに追加する
あとは同じようにBとDでやりゃOK
そもそも458の日本語がよくわからん。
普通に読めば、FormAをTabPageを使うように改造すれば済む話に思うんだが、
なんでわざわざ新たにFormCを作ってAを破棄する必要があるんだ?
それに質問のために書く文章としてはとりあえずFormAだけ書けば必要十分に思えるのに、
どうしてわざわざFormBまで俎上にあげて話を必要以上にややこしくするのだ?
そもそもWindows Formの話なんだろうかこれ
タブを別ウインドウとして分離できるようにしたいんじゃないの
本気でやろうとしたらかなり根本的なとこから作らないといけないけど
ああなるほどVSのIDEのドッキングウィンドウ(?)みたいなことやりたいのか。
確かにいろいろ手間がかかりそうだ。
しかし、それが正しいとしたら
>>458の文章かれその内容を読み取るって
エスパーにしか思えないすごい能力だなw
469 :
458:2007/07/02(月) 19:14:29
>>465 ありとうございます。それもかっこいいですね。
panelにおけばコントロールとして扱えるんですね。
やってみます。
470 :
デフォルトの名無しさん:2007/07/03(火) 17:55:04
質問があります。
VS 2005 C#
string s = "2007/6";
DateTime dt;
DateTime.TryParse(s, out dt);
このようにすると、dtには2007/6/1の日付が返されますが、
2007/6/0という値を返すことは可能でしょうか?
可能だとしたらどうすれば良いでしょうか?
よろしくお願いします。
そんな日付はありません、としか。
クラス自作しろ
>>470 んなもん普通は加工するにきまってんだろ
s = dt.ToString("yyyy/M") + "/0";
なんでそんな処理が必要なのか知りたいな
もうふらっとだけでいいのかな…
二つある必然性ないよね
×必然性
○必要性
google で C# って検索してもうまくいかない。"C#"でもうまくいかない。
どうすりゃgoogleでC#検索できるの?
普通に検索すればいいだけのはずなんだが
うちでは何の問題もないけど?
>>478 エンコードがShifut-JISになってない?
あっ。すみません出来ました。
unDonutの検索バー(google検索)使ったからダメだった用です。
普通にgoogleページ内の検索のところに書いたら検索できました。
お騒がせしました。
>>482 つーことはShift-JISになってたんだろ
設定を見直せ
このスレに限らずブラウザ関連で聞いてくる奴って大抵IE使って無いんだよな・・・
Shift_JISだろ?
今日会社でexcelのVBAのエディタ使わされたんだけど、なにもかもが最悪だった。
VS2005のない状況がこんなに辛いなんて…
逆に人間が退化しているのか?
たまにTeraPadでコード書くとVSの有難さがわかるな
まあbasicのコード書いたの十数年ぶりだったのもあるけど。
まさかbreakがないなんて…
GOTOも久しぶりに使った。
OpenOfficeのマクロエディタは更に酷いらしい
>>482 書き方がぶっきらぼうだった。
search.iniを開いて「Encode=3」でunDonutの検索窓でも普通に使えるようになる
>>489 break相当のステートメントは普通にあるよ。
無いのはcontinueにあたるもの。
>>493 そうなのか。
タイプミスしていたのかな?
ステートメントは入力候補にでてこないしなあ
VBスレ行けよ
VC#でオートメーション使ってexcelを操作という流れに…
497 :
デフォルトの名無しさん:2007/07/04(水) 02:42:43
MSDNフォーラムにも質問したんですが、ここでも質問さしてください。
DataGridViewにCheckBoxやButton、TextBoxを配置し
て実行時にTextBoxに入力等をして、入力値をXMLにシリアライズで保存し
次開くときに増えたRowの分を最初(フォームロード時)
にRowCountで設定して、保存したXMLを読み込んで
データを表示させ、データ自体はちゃんと読み込めて
表示もされるのですが、最終行のいわゆる未入力の行のButton列の
Buttonの背景?が透けてしまいます。
透けるというのは、DataGridView表示時のその未入力の行のButtonの
ある場所のウィンドウのzオーダー一つ奥の画像がそのままButtonの背景?
表面?に映し出されてしまいます。
何か、設定しとく必要があるんでしょうか。
すいませんが、教えてください。
マルチ乙
同期インデックス(lockステートメントで使うやつ)が各オブジェクトごとに存在するのはなぜですか?
同期インデックスを格納するための値型(参照型でもいいですが)を用意して、
その型に対してlockすれば十分のように思うのですが。
各オブジェクトごとに4バイトというのは実際どれくらいの割合に相当するのか分かりませんが、
節約できるならするに越したことはないんで何かしら理由があるんでしょうか。
C#はMacでも使用できる言語なんですか?
Macで使用できる言語ならC++(今現在)の次はC#勉強しようと思ってるんですがどう思いますか?
>>500 使えるっちゃあ使えるけど非標準的な環境がないと実行できないから勧めないよ
>>500 Macでもできる
自分で使うプログラムを作るならmonoを入れてC#を勉強してもいいと思う
でも他人のMacに実行環境が入ってる事は期待しない方がいい
Windowsなら大体のPCに実行環境が入ってるけど
IDEやWindows.FormやWPFなんてどうせ動かないんだろ。
なんか公開したところでマカに袋叩きにされるのがオチだろw
うわー
>>499 動機インデックスってなんね?
>同期インデックスを格納するための値型(参照型でもいいですが)を用意して、
>その型に対してlockすれば十分のように思うのですが。
動作が遅くなっても正常に動けばいい、というのであればそれでもOKかもしれませんね。
507 :
499:2007/07/04(水) 15:19:57
>動機インデックスってなんね?
どういう実装かは知りませんがなにやら同期(lock)のために使うメモリ領域へのインデックスだそうです。
>動作が遅くなっても正常に動けばいい、というのであればそれでもOKかもしれませんね。
「オブジェクトのデリファレンス→同期インデックスの取得」という処理のうちデリファレンスが省けるので
速くはなっても遅くはならないと思いますが。
>>499 プログラミング.NET Framework 第2版でメリット・デメリット
一通り解説されてるから読んでみたら?
509 :
499:2007/07/04(水) 16:11:59
>>508 おお、そうなんですか。
近いうちに立ち読みしてきます。
>>501-503 Macは実行環境入ってないんですか・・・
友人にMac使ってる人が多いので勉強しようと思ったんですが入れてもらう必要がありそうですね
とりあえずC#を勉強してみたいと思います
ありがとうございました
なんでわざわざ
今から勉強始めるんだったらJavaにしとけよ
>>507 たとえば、トイレ全体ではなくて個々のトイレ毎に排他制御ができないと、
誰かがどこかのトイレを使っている場合には、空いている他のトイレも使えない
ということになる。
永遠に待てるならこれは問題にはならないけど、普通は「個々のトイレ毎に排他
すればいいんじゃね?」となるわな。
>>510 Windowsで作ったものをMacで動かそうとしてるなら
フォントとかパスとかの扱いに注意しながら作ろう
>>512 排他の代わりに排泄したらどうでしょうか?
面白くないよ
516 :
デフォルトの名無しさん:2007/07/04(水) 18:41:02
次の患者さんどうぞ〜
>>512 意味分かってねーな?
例えばMutexみたいに、インスタンスとして使う同期用クラスがあればいい話だ。
そうなってないのは良くなかったと、件の本にはっきり書かれてる。
何を言ってるんだいったい?
意味がさっぱりわからんがエスパー同士の会話なのかなw
C# でCのDLLを利用したいのですがどのようにしたらいいのでしょうか・・・
C側
------------------------------------
int WINAPI Create(char* Map, int Width, int Height, char* Field, int x,int y,int x2,int y2, int r)
{
//
}
C#
------------------------------------
[DllImport("util.dll", EntryPoint = "Create", CharSet = CharSet.Auto)]
public static extern int CreateNearMap([MarshalAs(UnmanagedType.Error)] ref byte[] cr1, int cr2,
int cr3, [MarshalAs(UnmanagedType.LPArray)] ref byte[] cr4, int cr5, int cr6, int cr7, int cr8, int cr9);
-------------------------
int Ret = Win32.CreateN(ref Map[aNum], 10, 10,
ref Byte[aNum], 0, 0, 0, 0, 7);
よろしくおねがいします・・
521 :
デフォルトの名無しさん:2007/07/04(水) 19:14:58
C++でマネージドなラッパクラスかけ
>>520 何を思ってUnmanagedType.Errorなんか使ってるんだ…?
>>522 どこかでLPArrayがErrorに書き換わってたみたいです・・・・
>>499 >各オブジェクトごとに4バイトというのは実際どれくらいの割合に相当するのか分かりませんが、
オブジェクトの管理番号(ポインタというのか参照の値と呼ぶのか良くわからないけど)を
そのまま使ってると思うから、スペースは消費してないのでは?
>>518 それは思った。せっかくMonitor機能をobjectから別クラスに分離してるのになんでstaticクラスなのかと。
質問です。
マルチスレッドで、メインとは別のスレッドからフォームを操作する場合
Invoke で Delegate を呼び、Delegate の中でフォームを操作するじゃないですか。
その時 Invoke は、メインスレッドでの動作になる?と思います。
この場合マルチスレッドの恩恵は受けられないという理解でいいですか?
とりあえず一通り勉強してから不明点を質問すべき、という理解でいいよ。
冗談抜きでろくに理解せずにスレッドなんか使うと痛い目みるよ。
俺も初心者の頃、スレッド立てて痛い目にあったなぁ…ニュー速で
>>525 Invokeだと同期をとるから、delegate関数呼び出している間中は
マルチスレッドの恩恵は受けられない
lockを使うと同期されてしまうのですが、
これではマルチスレッドの恩恵は受けられないのですね!
530 :
デフォルトの名無しさん:2007/07/04(水) 21:39:01
質問が2つあります。
@アホな質問ってのは重々承知なんですけど、
foreach(…)
foreach(…)
if(…)
double_break;
2重のループを一気に抜ける方法はあるでしょうか?
A以下のようにループ判定→フラグ立てという処理の、もっとカッコイイ書き方あるでしょうか?
bool f = false;
for(…) {
if(…) {
f = true;
break;
}
}
if(f)
…
gotoは可読性が低くなるのであまり使いたくない技だなぁ
他の方法の方がよっぽどか可読性が低くなってると思うのだが。
yeild
多重ループからの脱出は使っていいとされてるけどな。
使いたくなければ、2重ループの部分をメソッドにしてreturnとbreakを使い分けるとか。
VBだとExit For とExit DoとWendが使い分けできて微妙に何とかなったりする。
関数にして return という方法もなくはない。
>530
この部分だけJavaのラベル付きのforがあったらいいかもと思うことがある。
やはりメソッドを分けてreturnかな。
途中でやめるならforeach使うんじゃないよ!
まさか21世紀のC#でgoto論争とはな・・・
foreachって途中で抜けるの嫌じゃね?
forならループ変数が明記されてるけどforeachだとぱっと見処理される順序が明確じゃないから
あ、でも何らかの条件に合うものをひとつ見つけるって使い方ならそうでもないか
goto使ったら一番綺麗だと思う。
いや、returnが一番か。
ラベルつき break ができれば一番いいのだが。
フラグ立ててラベル付き break するのと、goto found; とかするのとだと可読性はどっこいどっこいか。
switch 文の中のようにラベルは全て fall through 無し、かつ goto は後方への分岐に限定とすれば
スパゲッティにもならずにわかりやすいと思う。
>>545 全く関係ない場所へ飛ぶ心配がなくなる。
???
名前つきbreakは現在のループについているラベルにしかジャンプできない。
tryで囲って条件満たしたら適当なものなげてcatch!
551 :
デフォルトの名無しさん:2007/07/05(木) 00:02:52
たとえば?
半分冗談だけどやったら出来るはず。
オブジェクト hogeをthrowableにして、
throw hogeで投げて、catch!するだけ。
半分しか冗談じゃないの?
名前つきブロックと名前つきbreakがあれば…
普通にgotoが一番スマートでしょ
556 :
デフォルトの名無しさん:2007/07/05(木) 00:27:23
>>555 さすが GO GO GOだけあるなw
だが俺はGOTOは(゚听)イラネ
throwableってjavaなのか?
必要以上に { } 増やしたくないな
559 :
デフォルトの名無しさん:2007/07/05(木) 00:43:45
dataGridView1 の表をまるまる dataGridView2
にコピーしたいんですけどどうすればいいですか?
いいかげんgotoの低レベルな話題はくだらんな、と思いつつ自分も乗っかっちゃうんだけど、
羹に懲りて膾を吹くというか、gotoの使用そのものが害悪だと思ってる単細胞な人間って
案外いるんだよね。
それは「goto悪玉論」が本で読んだ知識でしかなく、自分の実体験に基づいてないからだろうけどさ。
dataGridView2 = dataGridView1;
562 :
デフォルトの名無しさん:2007/07/05(木) 01:01:37
for(int i=0; i<dataGridView1.Rows.Count;i++)
for (int j = 0; j < dataGridView1.Rows[i].Cells.Count; j++)
{
if (dataGridView1.Rows[i].Cells[j].Value != null)
{
if (dataGridView1.Rows[i].Cells[j].Value.ToString() == "orz") goto orz; // もういいや・・・
dataGridView2.Rows[i].Cells[j].Value = dataGridView1.Rows[i].Cells[j].Value;
}
}
orz:
MessageBox.Show("コピー終了");
gotoが悪いんじゃない、gotoをちゃんと使えない香具師が悪い
脳内で考えるたから出来るかわからんが
DataTable dt = (DataTable) dataGridView1.DataSource;
dataGridView1.DataSource = dt.Copy();
で駄目かな
566 :
デフォルトの名無しさん:2007/07/05(木) 01:38:20
バインドしてたら行けるだろうけど
問題はバインドしていない時だとおも・・・
つうか、そのくらいの定義書いとくべきだろうなぁ…
>>525 Control.BeginInvokeでどうでしょう。
ところでControl.BeginInvokeを使った場合はEndInvokeをペアで呼び出すというのは必須なのでしょうかね?
非同期デリゲートの場合は必須とMSDNに明記されていますが、
WPFのDispatcher.BeginInvokeでは不要。というよりEndInvokeがありません。
Control.BeginInvokeはどちらかと言えば後者に近いからいらない気もします。
Control.BeginInvokeにはコールバックを指定できないのでコールバックでのfire and forgetパターンも使えない。
よくわからないので今のところなるだけControl.Invokeを使うようにしてますが。
EndInvokeを呼び出すのは必須。
でないとリソースが解放されないことがある。
>>568 どこかに記述はありますか?
非同期デリゲートについては見つけましたが、
コントロールへのマーシャリングのケースでは記述が見つかりません。
Control.BeginInvokeでは実際にはいらない。
By プログラミング .NET Framework 第2版
>>570,571
ありがとう。喉のつっかえが取れました。
573 :
530:2007/07/05(木) 10:04:21
>>531-
いろいろなご意見ありがとうございます
Shell APIのSHGetImageList()に代わるシェル登録アイコンのイメージリスト取得できる関数持ってるクラスってありますか?
DllImportしなきゃだめ?
そういやぁ、XPS関連使ってる人いる?
576 :
デフォルトの名無しさん:2007/07/05(木) 22:45:51
WPFのデータバインディングで、
グループ化された複数RadioButtonのインデックスのようなものと、
データソースの整数型プロパティをバインドする手段はないでしょうか?
enumのプロパティをRadioButtonの選択で表示したいんですが…
>>574 ピンボケしろ。自分でピンボケしてイメージリスト取得したクラス作ったけど、おしえてやらねー。
578 :
デフォルトの名無しさん:2007/07/05(木) 23:12:42
comdlg32.dll をDellImportして
コモンダイアログをカスタマイズってできますか??
579 :
デフォルトの名無しさん:2007/07/05(木) 23:16:49
comdlg32.dllをDllImportの間違いでした。
はい。
581 :
デフォルトの名無しさん:2007/07/05(木) 23:19:18
ボタン増やしたりできるんですか?
582 :
559:2007/07/06(金) 01:44:25
>>563,565
どうもありがとう。
が、バインドしてない場合のでも教えてほしいです。。
現状dataGirdView1があって、
dataGridView2の方はなんもかかれてない状態で
dataGridView1をコピーしたいんですけど。
オーソドックな方法とかってのはないんですかね。
dataGridView2.Columns.Clear();
for (int i = 0; i < dataGridView1.Columns.Count; i++)
{
dataGridView2.Columns.Add((DataGridViewColumn)dataGridView1.Columns[i].Clone());
}
で列をコピーしてから行をいれるとか
closeしてもセルの内容がnullのままなんだけど。。
(コピー元は記入されてるのに)
なぜ??
closeしてるからじゃね?w
ソースアップしてみたら?
Form クラスで、現在ウィンドウが開いているかどうか取得できるプロパティかメソッドってある?
587 :
デフォルトの名無しさん:2007/07/06(金) 10:49:41
ウィンドウが開いているってのは最小化されているかどうかってこと?
それだったらある
>>587 Show() メソッドで開かれているか、ということです。
Visble
フラットすれよりもレベルが低いぞ
まあ、ふらっと逝けとかMSDN読め、と返すより
答えた方が早い場合もあるから
まぁそういうのは知ってるか知らないかだけだからその人のレベルが低いかどうかとはあまり関係もなかろう。
C#でサーバー周りばっかやってた人はFormのことなんかしらんだろうし。
だがMSDN見ればすぐにわかること。
それを言い出したらこのスレ(ry
なんか
>>594 とか見てるとMLの黎明期に
暴れてたカスどもを思い出すな・・・。
597 :
デフォルトの名無しさん:2007/07/06(金) 17:28:37
>>594 よう。それを言うためだけにこのスレにきてるのかい?
「自分はMSDNだけで全て理解した、すごいだろ」って言いたいんじゃね?
MSDNだけでは解決できない質問て滅多に無いだろ
まあ俺はむしろ
>>595-598辺りの人間がカスだと思う。
全面的に594の言うとおりだよ。
MSDNライブラリ読んでたいていの問題を解決するなんて別に当たり前のことで、
それをすごいなんて思うわけがない。
三流の俺ですらそうなんだから。
>>598なんか自分の馬鹿さ加減を晒しているだけのこと(要するに598はその
当たり前のことが出来ないからそんな風に思うんでしょ)で、非常に恥ずかしいw
少なくとも586レベルの問題を解決できない人間にプログラマの資格も資質もなしといわざるを得ない。
>>600 心配するな、今ではお前が後ろ指指されてるから。
俺も昔はそのカスな言動をよくしていた。
しかしアホゲイツKKが開発すべき方面と言語を不必要に
増やしたからな。お前は「解決出来て当たり前」程度の
仕事しかしてないし、そういう人格に見られてんだよ。
あと
>>595の言うように「MSDNみりゃ解決する問題もわからねぇのかよ」
と他人を軽蔑したいんなら、こういうQAスレは絶好の場所だろうな。
なんか本気でいってそうw
そこまでパーだとなんか哀れで突っ込む気もおこらん。
プログラマの資格(笑)
テンプレ
Q. <質問>
A. MSDN読め
>>602 そういうの防衛機制っていうんだよねw
他人を罵倒しようと相手を待ち構えている人間がいるとしても、
罵倒に値する愚劣な行動がなければ罵倒しようがないだろうw
標準的な能力のプログラマであれば調べればすぐわかるはずのことを
質問する行為は罵倒に値するから罵倒されてるんだよ。わかる?
悩んで当然と思うような問題に関する質問であれば罵倒なんてしねえよ。
すくなくとも俺はな。
常識として
>>594はこういうスレでは禁句だろ
ただそれだけのこと
>>607 馬鹿で怠惰で非常識な「質問クン」の意見だね。
むしろ594のような態度こそ常識であり、推奨されると思うが。
だったらこんなスレいらないし、わざわざ覗いている理由は何?
すくなくとも「質問クン」に回答して差し上げるためではないのであしからず
>>600 >少なくとも586レベルの問題を解決できない人間にプログラマの資格も資質もなしといわざるを得ない。
つか、このスレってプログラマ専用スレッドなのか?
俺は趣味でやってるだけなんだが・・・
てか、プログラマは少ないんじゃないのか?
ひょっとしてプログラマの「プロ」の部分がprofessionalの略だとか思ってるの?w
趣味でもプログラマには違いない
ただQ&Aスレでプログラマの資格云々を語るのはプログラマ以前の問題
と思いたいんでしょ君が。
そういう性格だから馬鹿なんだよ。
流れ的に職業という意味でのプログラマになると思うんだが・・・
どんだけ読解力ないんだ
>>615 君、中高時代いつも現代国語の成績2以下だったでしょw
人としてのレベルが低いスレ
なんか必死な奴がひとりいるみたいだね。
みなさん、スルーしていきましょう。
619 :
594:2007/07/06(金) 20:00:33
なんか叩かれててワロタ。
人の言ってることを理解できない奴って意外と多いんだな。
君の言いたい事ってなんだっけ
もう全員ふらっと逝けよ
622 :
デフォルトの名無しさん:2007/07/06(金) 20:36:53
SADでも必死に会社に行っている人[メンタルヘルス]
ふ〜ん。社会不安障害の人がいるのかぁ。
辛いんだろうなぁ。視線恐怖症だったら最強。
口先だけならなんとでも言えるよな。
そこがネットのいいところだ。
どうせ友達もいない童貞30男なんだろうけれど、哀れ。
MSDNに書いてあろうがなかろうが(無いことは無いと思うが)ここは相談室
質問無くて回答する気も無くただ文句言いたいだけの香具師はただの荒らし
■ 愚か者の法則(その1)
馬鹿は自分の振りかざす「俺様ルール」を自分に適用できない。
このスレいっつもこんな感じだよなw
そうでもないよ
なんでこんなスルーできないやつばっかなの
.NET関連のスレに対して
スレ違いだが巧妙に反論を誘うレスをして荒らす気違い来襲中!!!!!
どうせいつものヤツだろ
そんな流れの中悪いのですが質問です。
チェックボックスのenableをフォルスにした時に、テキストの文字色だけを赤にすることって出来ませんか?
>>632 CheckedChangedイベントでForeColorを変更すれば十分じゃない?
634 :
559:2007/07/07(土) 16:41:42
dataGridView1は初期化&値セット済み
dataGridView2は初期化、カラムヘッダーをセット済み。
foreach (DataGridViewRow row in dataGridView1.Rows)
{
dataGridView2.Rows.Add((DataGridViewRow)row.Clone());
}
これでdataGridView1をdataGridView2にコピーできてるつもりなんですけど出来ません。
何が間違ってるんでしょう?
636 :
634:2007/07/07(土) 19:46:10
ぶひ
1セルずつコピらなきゃいけないのか。。
ありがとう〜
637 :
458:2007/07/07(土) 23:12:50
フォームアプリに於いて自分でCtrl+Cなどのショートカットキーを実装する場合
どこに書けばよいのでしょうか?
keydownイベントだとHandled = trueしてもビープ音が鳴ったりするので
ここではないと思うんですが。
638 :
デフォルトの名無しさん:2007/07/07(土) 23:22:01
フォームのプロパティ見てみ?
ショートカットキー
いや、というかメインメニューに割り当てればいいじゃん普通に。
どうせメニューぐらいつけるんでしょ?
640 :
458:2007/07/07(土) 23:31:03
フォームにWebBrowserがあり、これがフォーカスを持っていると
メニューに割り当てたショートカットキーがきかなくなってしまうので、
これがうまく動けばメニューに付けてもいいのですが
これを解決する方法はあるのでしょうか?
ゴリゴリやりたいならProcessCmdKeyをオーバーライド。
ProcessCmdKeyでゴリゴリやってると
悪いことしてる気がしてしょうがない
FormのKeyPreviewをTrueにするだけでできそうな気もするけど違ったっけ?
644 :
458:2007/07/08(日) 00:04:54
ありがとうございます。ProcessCmdKeyでやってみようと思います。
>>643 それも試した記憶がありますが、WebBrowserには無力だった記憶があります。
>642
KeyDownやKeyPressやKeyUpでごりごりやるのに比べれば何倍もましだから。
複数の名前空間をグループ化することはできないでしょうか?
これは仮の構文ですが、namespace abc={a,b,c};でインテリセンスでa,b,cすべて列挙できて、
using abc;がusing a;using b;using c;と同じ意味になるようなもの。
もうひとつ質問ですが、
VBではインテリセンスのポップアップにフィルタ機能がついているんですが、
C#でそれを実現できないでしょうか?
お世話になっております。質問です。
タブページのTextを左よりにしたいのですが、
どうすればいいのでしょうか?
タブの幅を全部同じにしたとき、左がそろうようにしたいです。
XPのデフォルトのテーマ上で、ツールバーのメニューの色が青って
おかしくないですか?
ツールバーのメニュー
↓
ツールバーとメニュー
です。
なんかほかのアプリはこんな色じゃないし
あれはの、Visual Studioデザインなんじゃよ
VSの、というか、(名前があるのかどうか知らないけど)MSのデザインの一つなんでしょ。
一つ前のオフィスも同じようなデザインだよね。
確かにあのデザインセンスは俺にも理解できない。
まあ、配色はコンパネで変えられるし、まともな神経のユーザーなら
ルナなんか使わずクラシック表示にしてると思うけど。
くらっしくの横グラデは今見るととても古臭く感じる・・・(´・ω・`)
>>649 Main()に定番の一行。
ToolStripManager.VisualStylesEnabled = false;
>>652 ルナとは関係ない
>>654 関係あるでしょ。実際やってから物言えば?
>>654 それより、
ToolStripManager.RenderMode = ToolStripManagerRenderMode.System;
の方がよい。
ToolStripManagerRenderMode.Professionalが規定値みたいだね。
>>655 実際はOfficeがそうしてるんじゃねーの?
UserControl を作ってみましたが、枠線が表示されています。
これを表示しないようにできますか?
660 :
デフォルトの名無しさん:2007/07/08(日) 17:09:15
文字列を大量に格納したArrayListを、
全ての要素を連結させた1つの文字列を作りたいんですけど、
foreachでぶんまわして一個一個くっつける以外に効率的な方法ないですか?
661 :
デフォルトの名無しさん:2007/07/08(日) 17:09:31
空の構成ファイル(app.config)を作るメソッドってありますか?
ConfigurationManager.CreateConfigure(path);で
新規のConfigureオブジェクトを生成し、取得するようなイメージでありませんでしょうか?
662 :
660:2007/07/08(日) 17:24:06
Concatでいけました。
663 :
ファイル転送:2007/07/08(日) 18:09:45
C#を使用してネットワーク通信でファイル転送を実装していますが、
ファイル自身は正常に転送できるのですが、どうもファイルが壊れているみたいです。ファイルを再生することができません。
ファイルはAVI形式の動画ファイルです。参考に、以下にコードを掲載しますので、わかる方ご指導をお願いします。
664 :
ファイル転送:2007/07/08(日) 18:10:19
【ファイル転送コード】
private void newConnect(string filePath)
{
TcpListener newTcpL = new TcpListener(IpAddressGetter.getLocalIpAddr(), this.port + 1);
newTcpL.Start();
Socket newsock = newTcpL.AcceptSocket();
if (newsock.Connected)
{
NetworkStream netStream = new NetworkStream(newsock);
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
byte[] bb = new byte[8];
while (fs.Read(bb, 0, bb.Length) != 0)
{
netStream.Write(bb, 0, bb.Length);
netStream.Flush();
bb = new byte[8];
}
// 後処理
fs.Close();
netStream.Close();
newsock.Close();
newTcpL.Stop();
}
}
665 :
ファイル転送:2007/07/08(日) 18:13:22
【ファイル受信コード】
/// <summary>
/// ファイルを受信する
/// </summary>
private void getFile()
{
// ファイル受信用ポートを開く
int port = this.clientPort + 1;
TcpClient newtcpC = new TcpClient();
newtcpC.Connect(this.clientIp, port);
NetworkStream netStream_n = newtcpC.GetStream();
FileStream fs = new FileStream(this.downFolderPath + @"\" + downFileName,
FileMode.OpenOrCreate,
FileAccess.Write);
byte[] bb = new byte[8];
while (netStream_n.Read(bb, 0, bb.Length) != 0)
{
fs.Write(bb, 0, bb.Length);
fs.Flush();
bb = new byte[8];
}
MessageBox.Show("ダウンロード完了!");
fs.Close();
netStream_n.Close();
newtcpC.Close();
}
bb.Length
読み込んだサイズと関係なく書き込みしているような?
でも関係ないか。
667 :
ファイル転送:2007/07/08(日) 18:19:17
8バイトづつ読み込むんでファイルに書き込みをするようにしています。
ちなみに、MP3は正しく再生されます。
>>663 ネットワークのことはよくわからんが、ファイルサイズはあってるの?
コードを見る限り出力ファイルは必ず8の倍数になる気がするのだが・・・
あと
・ループごとにバッファを再確保してどうする。ものすごい勢いでガーベッジを増やしてる。
・もう少しわかりやすい変数名をつけた方がいい
・もう少し質問文を推敲したほうがいい
なんでそんな細切れに送るんだ?
かなり無駄だろ。
670 :
666:2007/07/08(日) 18:25:56
readから帰ってくるのは読み込んだバイト数だからそれを使ったら?
でも関係ないかも。
671 :
ファイル転送:2007/07/08(日) 18:26:19
やっぱり無駄ですかね?
ちなみにバイト数自体はあっています。
>>665 転送
int c = fs.Read(bb, 0, bb.Length);
netStream.Write(bb, 0, c);
受信
int c = netStream_n.Read(bb, 0, bb.Length);
fs.Write(bb, 0, c);
じゃね?
あと、while の中の
bb = new byte[8];
これいらない
っていうか元のファイルと結果のファイルとが違うってことまでわかってるんだから
少なくともどこがどう違うのかは検証したんだろうね?
まさか調べるのが面倒だから丸投げってわけじゃないよね?
>>663 まずは、ファイル内容比較して、どういう壊れ方してるか確かめろよ。
読み込んだバイト数で保存しないと駄目に決まってる。
※8バイトずつ書き込んでも、8バイトずつ届くとは限らない。
ついでに8バイトごとにフラッシュなんてあほな実装はやめとけ。
>ちなみにバイト数自体はあっています。
どこを見てあってると判断したの?
FoxBinってフリーウェアでバイナリの差分を視覚的に確認できるから、
まずはそれで確認してからだね
質問なんですがVS2005でリソースファイルをpublicする方法って無いでしょうか
679 :
デフォルトの名無しさん:2007/07/09(月) 15:31:53
>リソースファイルをpublic
長嶋を彷彿とさせるwwww
どういうことなんだろう?
FriendではなくPublicでほかのプロジェクトからも参照できるということなんだろうか?
共通処理のDLLに共通のメッセージとかをリソースで持たせられないかと思って・・・
Designer.csいじってもコンパイルすると元に戻るからなぁ・・・
FieldInfoを使ってあるインスタンスのフィールドの値を文字列から更新することってできますか?
class Hoge{
long _num;
}
のインスタンスhogeがあるとしてnumFInfoが_numフィールドのFIeldInfoだとします。
string valueStrが値を表す文字列だとして、
ここでnumFInfo.SetValue(hoge,処理ほにゃらら(valueStr))としたいのですが、処理ほにゃららにあたるものってありますか?
numFInfo.FieldTypeより各プリミティブのint.TryParse(valueStr)などに振り分けてもいいんですが、もう少しエレガントな方法がないかと。
バイト数があっていても
バイナリエディタで中身を表示したら 00 の羅列だったとか
Converter
684 :
681:2007/07/09(月) 17:20:44
Converter.ChangeTypeでいけそうです。さんくすこ。
StackやらQueueってなんでCapacityプロパティないんだろ
内部実装は配列なのに・・・
何に使うの?
入れた順に消費するプール的なもん作ろうかなと思ったんだけど。
関係ないけどList<T>.InsertRangeの実装見てみたら追加する要素ごとにInsertを呼んでる気がするんだが・・・
これってO(元の要素数*追加する要素数)かからない?
まっとうにやればO(元の要素数+追加する要素数)ですむはずだが。
> This method is an O(n + m) operation, where n is the number of elements to be added and m is Count.
>>688 実装はそうなってないと思うんだけど。
まあ一部のケースだけど
Insertの実装を見てから言ってるのか?
691 :
687:2007/07/10(火) 08:42:51
>>690 もちろんそうだよ。
つかInsertがO(元の要素数)かからないわけないじゃん
ちゃんとICollection<T>を渡すようにしてれば問題なし。
同じソリューションにEXEのプロジェクトとライブラリプロジェクトがあって、Exeのほうから参照設定をプロジェクトタブから追加したんですが、デバッグ実行しようとするとライブラリのプロジェクトはデバッグ情報ないよといわれてしまいます・・・(´・ω・`)
デバッグ構成はちゃんとあるんですが・・・つかさっきまで普通に実行できてたし。プロジェクト削除、参照削除して追加しなおしても同じ(ノД`)
ToolStripMenuItemをいわゆる選択不可の状態にするには
どうすればいいのでしょうか?
Enable = false;だと表示が変わってくれないです。
>>693 複数のプロジェクトがあってスタートアップに設定してないほうをデバッグ実行しようとすると
そのエラーがでるときあるな。
698 :
デフォルトの名無しさん:2007/07/10(火) 14:49:14
age
>>693 優先度の高いパスにデバッグ情報無しのファイルがあったりしないか
よくあるのは、EXEのプロジェクトの中にコピーした場合、とか。
700 :
172:2007/07/10(火) 15:14:07
ダイアログの戻り値を変更することって可能?
private void button1_click(object sender, EventArgs e) {
if (validation() == true) {
buttonOK.DialogResult = DialogResult.Cancel;
this.Close();
}
else {
buttonOK.DialogResult = DialogResult.Cancel;
MessageBox.Show("入力エラー");
}
}
みたいな。
701 :
172:2007/07/10(火) 15:15:04
すいません、上のソースの1行目、
private void button1_click(object sender, EventArgs e) {
↓
private void buttonOK_Click(object sender, EventArgs e) {
です
this.DialogResult = DialogResult.OK;
どうでもいいけど
>>172は俺だ
704 :
703:2007/07/10(火) 15:39:57
705 :
デフォルトの名無しさん:2007/07/10(火) 15:54:04
yes
リビルドオールとかしましたが同じ状態です(´・ω・`)
でもそのままデバッグ続行したらデバッグ情報でてるっぽい(`・ω・´)
VSのバグ?とりあえずししょうがないようなので放置します。お騒がせしました。
お尋ねします。
メインのフォームが他のフォームをShowDialogで呼び出している最中かを
知る方法がありましたら教えてください。
フラグでも立てとけば
ShowDialogしたらメインのフォームからイベントを飛ばすのが
正当なんじゃね
711 :
708:2007/07/10(火) 16:42:47
メインフォームが他のモーダルなウインドウによって操作できない状態に
なっているか知る方法はありますか?に変えさせていただきます。
すいません。
メッセージボックスも含み、自分が管理できないコードからモーダルウインドウが
出現させられることも含んでできるようにしたいです。
WS_DISABLEかな?
Enabledをfalseにしてもそのスタイルはつくけど。
713 :
708:2007/07/10(火) 17:01:39
>707
多分、デバッグ情報がないって言われたのは
ライブラリ側のアセンブリがロードされる前だったんでは?
715 :
α:2007/07/10(火) 18:31:55
C言語のプログラムでフラッシュ暗算のプログラムを作りたいのですが軽くアドバイスいて頂ければ嬉しいです。
暗算の前にタイトルをよく見よう
つかあんなもん「あのとおり」に作るだけじゃないか
君には難しいんじゃないか?
だって言葉が通じてないもの・・・
「フラッシュ暗算」でググってしまった
720 :
デフォルトの名無しさん:2007/07/10(火) 19:07:39
追加料金として10万円を頂戴いたします。
希望勸告關於使用C#語言製作閃光心算的程序
723 :
デフォルトの名無しさん:2007/07/10(火) 19:29:02
Visual StudioとWindow Form使うってんならそれこそすぐにできるから入門書でも入門サイトでも見るがよろし
電光石火キミのおねしょも止まるだろ〜
727 :
デフォルトの名無しさん:2007/07/10(火) 21:08:13
.NET Frameworkで
ファイルダイアログをカスタマイズするのは大変です。
クラスがsealed属性になっているので継承はできません。
マイクロソフトがC#でファイルダイアログのカスタマイズのソースを
公開しているみたいですが、0から作る感じです。
いつから日記スレになったのここ
不満があるなら来るなってこった
>>727がPureマネージコードで柔軟なファイルダイアログを作って公開してくれるそうだ
>>727 できればモーダレスなフォームとしても使える奴を作って欲しい。
よろしく頼んだよ。
733 :
デフォルトの名無しさん:2007/07/10(火) 22:47:07
はい
>728
スルーできないなら2ch自体見ないほうがいい
>>727 また来たの?
あなたは定期的に出てくるC++人ですね。
誰かにそのページ紹介してもらってからしばらくいませんでしたね?
c#の勉強はすんだの?
次はC#ではまともなエディタは作れないですよね?
736 :
デフォルトの名無しさん:2007/07/10(火) 22:49:37
作ってもいいけどでかくなりそうだよね。
後で使い回せるとはいえ
たかがファイルダイアログなのに本体よりでかくなったりしたら。
TabControlのタブページのタブ部分のフォーカスの設定について
この部分がクリックされたとき、フォーカスの四角を表示させない
ようにするにはどうすればいいのでしょうか?
public class SaveFileDialog2
{
}
740 :
デフォルトの名無しさん:2007/07/11(水) 10:38:19
const string[] alp = {"a","b","c"};
ということをやりたいのですができません。
どうしたらよいんでしょうか。
742 :
741:2007/07/11(水) 11:13:56
肝心のreadonly抜けてたわごめん
WindowsUpdateで.net1.0〜2.0の更新来たな。
なんだかすごいコアなファイルまで置き換わるみたいだけど
大丈夫かよコレ?
>>740 readonlyにしたところで alp[2] = "hoge"; みたいなことは防げないので注意。
これを防ぎたければインデクサにすればいい。
Array.AsReadOnly
746 :
デフォルトの名無しさん:2007/07/11(水) 16:28:20
ファイルのリストを作成するアプリケーションを作っているのですが
ローカルエリアネットワーク上の共有フォルダ上のExeを実行すると
System.IO.Directory.GetDirectoriesがセキュリティエラーを出して停止します。
ためしにローカルにコピーしてから使うと問題なく動きました。
1.0/1.1だとセキュリティ設定を変更するツールがあったようなのですが
2.0ではどうやったら、例外が出ないようにすることができるのでしょうか?
前のバージョンみたいなタブコントロールって2.0でなくなったんだっけ?
タブの部分だけをセレクタとして使いたいんだけど…
コンテナなんて要らない。
前からない。
VC#2005Expressってバックアップ機能みたいなものはないのでしょうか?
バックアップというフォルダはあるみたいなのですが…
適当なバージョン管理システムに突っ込んどけ
751 :
749:2007/07/12(木) 09:59:28
>>750 やっぱCVSかSubversion必須ですか・・・
時間がある時に導入してみます。
暫くはプロジェクトフォルダ毎にコピーします。
ありがとうございました。
自作のソフトからPDFを選んで表示できるように、
コマンドラインからAcrobat Readerを呼び出そうと思っているのですが、
Readerのインストール先を取得するのに、レジストリの設定値を読みだしても問題ないでしょうか?
一応商用で考えているので、もしレジストリの読み込みだけでも何かのミスで壊れたら。。。。と思い心配中です。
他にも他のソフトの設定値等のレジストリを読み込んでいるような商用ソフトがあれば安心なのですが…
なんで読むだけで壊れるんだよ。
阿呆か。
AcrobatReaderに限定せずに、普通にシェルの関連付けに従えばいいだろ。
関連付け無視でIE起動するアプリケーションとかホント鬱陶しい。
755 :
デフォルトの名無しさん:2007/07/12(木) 10:58:48
>>754 わかるわかる
オナニープログラムだよなw
756 :
751:2007/07/12(木) 11:54:56
>>754 シェルの関連付けに従って起動出来るのですね。
その方が全然いいです。
そのやり方もやはりレジストリ読み込みになるのでしょうか…
というのも、昔データエラーが出るCD-RWのコピーを頼まれて、
データエラーを無視してコピーしてくれるソフトでコピーしたら、
コピー元のデータが0byteになったという恐ろしいことがあったので。。。
読み込みだけでも怖いです・・・
Process.Start
つーかレジストリ読むだけで壊れるって、それなんてWindowsME?
コピー元が始めから壊れてただけじゃ
759 :
デフォルトの名無しさん:2007/07/12(木) 17:17:57
質問させてください。
story
1、アプリAを実装中である。
2、アプリAにはポップアップウィンドウと呼ばれるformが存在する。
3、ポップアップウィンドウがShow()されると、アプリAのどの窓よりも
前面に表示される。
4、ただしアプリA以外のアプリを使用するときは、
使用するアプリを最前面に表示させる。
5、アプリAにフォーカスを戻すと、必ずポップアップウィンドウが最前面に表示される。
formのbase.CreateParams プロパティをオーバーライドして色々試しているのですが、
なかなか思うような動きをしてくれません。
このstoryを解決するような実装をどなたか教えていただけないでしょうか?
よろしくお願いします。
普通に子ウィンドウにしとけば手前に表示されるだろ。
761 :
759:2007/07/12(木) 17:45:34
>760 回答ありがとうございます。
ひとつのフォームに対する親子関係ではなくて
story3にあるようにアプリAのどの窓よりも前面に表示したいのです。
SetWindowPosでごにょごにょやるしかない
>>759 はずしてるかもしれないけど、
Showの引数をAにするのではなくAの子ウインドウにする。
ShowDialog()ってオチでは・・・
765 :
764:2007/07/12(木) 18:42:13
あ、ShowDialog(this)の方が確実
様々な状態遷移を考慮して適切なイベントで何かするのもありだけど、
タイマーで適当に監視して(そのアプリの)他のウィンドウの一つ手前に
Aを持ってくるってのが簡単だと思う。
フォーカス等を奪わないように気を付けてね。
767 :
759:2007/07/12(木) 18:53:53
みなさま回答ありがとうございます。
>763
Aとはフォームではなくてアプリ全体を指します。
>764
ポップアップウィンドウを消さないとその他のフォームが操作できないので
ShowDialogは却下です。
>765
アプリAの全てのフォームの最前面に表示したいのです
>766
簡単ではありますが、常にtimerのイベントプロシジャーが実行されるので
わがままですが個人的にはその実装はしたくありません。
A で WM_WINPOSCHANGED を監視して・・・
>>759 なんか言ってる意味がよくわからないので勘違いしてるかも知れないけど。
(1) アプリの全てのフォームのDeactivateイベントを次のようなメソッドに紐付けする。
void anyForm_Deactivate(object sender, EventArgs e)
{
if (Form.ActiveForm == null)
{
formA.TopMost = false;
}
}
(2) アプリの全てのフォームのActivatedイベントを次のようなメソッドに紐付けする。
void anyForm_Activated(object sender, EventArgs e)
{
formA.TopMost = true;
}
こういう動作のことでいいの?
770 :
759:2007/07/12(木) 20:29:08
>>769 TopMost= true にしたときに ポップアップウィンドウにフォーカスが移るので
で駄目でした。
>>770 少しは頭使おうよ。
それならたとえば、
void anyForm_Activated(object sender, EventArgs e)
{
if (!formA.TopMost)
{
Form activeForm = Form.ActiveForm;
formA.TopMost = true;
activeForm.Focus();
}
}
とかすればいいじゃん。
772 :
759:2007/07/12(木) 21:47:14
>>771 そんなに簡単じゃないです・・・
やってみるとわかります・・・。
実際やってみて言ってるってのw
>>771 そんなアクティブが言ったりきたりする実装(゚听)イラネ
SWP_NOACTIVATEつきでSetWindowPos呼べばいいよ
>ポップアップウィンドウを消さないとその他のフォームが操作できないので
>ShowDialogは却下です。
先に飼い解けや
いまだに意味が分からない。
ただ単にアプリAで常に最前面に表示するフォームと何が違うの?
778 :
デフォルトの名無しさん:2007/07/13(金) 01:29:59
ウザ・・・
対象のフォームの
Enterイベントで this.TopMost = true;
Leaveイベントで this.TopMost = false;
で駄目かな
ShowDialog(this)とかは趣味でやってくれ
↑何で趣味なん?
つか趣味だとどうなんだ?
俺もわかんね。
何が趣味なんだろ。
趣味はShowDialog(this)です
treeviewのツールチップが98系で文字化けしますが、これは
ばくでしょうか?
treeView1.Nodes.Add("LLLLLLLLLLLLSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS");
treeView1.Nodes.Add("LLLLLLLLLLLLSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS");
786 :
デフォルトの名無しさん:2007/07/13(金) 11:49:29
現在、DataGridに値を追加していき、その値の合計をDataGrid2に表示させています。
表示させることはうまくいったのですが、その合計の値を取得しとうとすると失敗してしまいます。
int sum = 0;
foreach(DataRow dataRow in dt.Rows)
{
sum +=(int)dataRow["数量"];
}
int sum1 = 0;
foreach(DataRow dataRow in dt.Rows)
{
sum1 +=(int)dataRow["金額"];
}
double Goukei = (sum*sum1*(1+0.05));
Goukeiには常に0.0しか入ってくれません。
ためしに
double Goukei = (2*2000*(1+0.05));
としてみてもやはり0.0のままです。何が原因でいけないのでしょうか?
いみわかんね。
ステップ実行で追えよ。
Goukei を0.0と判断したのはどれよ
790 :
786:2007/07/13(金) 12:28:49
わかりにくくてすいません。
順序的には
private
DataSet ds = new DataSet("明細");
DataTable dt;
DataSet ds2 = new DataSet("合計金額");
DataTable dt2;
public Form1
{
dt = ds.Tables.Add("明細");
dt.Columns.Add("数量",typeof(int));
dt.Columns.Add("金額"typeof(int));
dataGrid1.DataSource = ds.Tables["明細"];
dt2 =ds2.Tables.Add("合計金額");
dt2Columns.Add("数量",typeof(int));
dt2Columns.Add("金額",typeof(int));
dataGrid2.DataSource = ds2.Tables["合計金額"];
}
791 :
786:2007/07/13(金) 12:30:15
private void button_Cick(object sender, System.EventArgs e)
{
DataRow dr2;
dr2 = dt2.NewRow();
dt2.Rows.Clear();
int sum = 0;
int sum1 = 0;
foreach(DataRow dataRow in dt.Rows)
{
sum -=(int)dataRow["数量"];
}
dr2["数量"] = sum;
foreach(DataRow dataRow in dt.Rows)
{
sum1 +=(int)dataRow["金額"];
}
dr2["金額"] = sum1
dt2.Rows.Add(dr2);
double Goukei = (sum*sum1*(1+0.05));
}
上記のようにコーティングしています。
コーティング……
1.数量をマイナスする意図が不明
2.二度DataRowCollectionループする必要性が不明
3.ちゃんと変数名つけろと会社で怒られないのか不明
4.Goukei使ってないのが不明
5.コーティング
6.ふらっとに帰れ
>>789 のスレでもコーティングだよ(;´Д`)
と、とにかくチョコレートで頼むわ。。
マジレスすると、foreachの中にブレークポイントしかけて
値がとれてるか確かめることから始めよう
>>786 これだけのコードじゃ、dtには、データが存在しないのでは?
まさか、ホントにこれだけで、合計が 0 なのはどうして?って、質問じゃぁないよね…
>>793 でいわれてるような なんで2回ループすんの?
どころか、このループは処理されないんだから
int sum = 0; int sum1 = 0; のままジャン?
オレとしては、
>double Goukei = (2*2000*(1+0.05));
これが0.0になるのが非常に気なるんだが。
どうやって確かめたのだ?
Cのマクロで、コンパイル時に定数になっているものがあります。
#define func( a,b,c ) ( (a << b) | c )
#define CONST_VALUE_A func( 1,2,3 )
これをC#で実装しようとするとfuncという関数を作って代入すればよいのですが
そうすると、const変数にできません。
staticクラスでこういうコンパイル時には定数になるものを
定義することはできるのでしょうか?
readonlyメンバ
無理だろ
べた書きかstatic readonly
あとは、役割毎でクラスをきっておけば
スッキリ
場合によってはあとから再利用可能
そういうこと考えるんだったら定数なんか外に出さずにちゃんとラップするよ
C#というより.NETの質問なんですが、
一般に中間言語っていうとバイトコードのことですよね?
.NETの場合アセンブリ言語っぽい表現のことも指すと思うんですが(拡張子.ilだし)、
両者を区別する用語みたいなものはあるんでしょうか?
exeやdllはアセンブリと呼ぶよ
いやそのアセンブリは意味が違…
つまりバイトコードの方をアセンブリといい、アセンブリの方を中間言語というんですか。
なんかややこしいですね・・・
と思ったんですが.NETでアセンブリっていえばコードの集合のことですよね。
コードそのものはなんていうんだろ・・・
>>805 それは違う。
MSILはテキスト状態のものもバイナリ状態のものもIL(中間言語)と呼ぶ。
アセンブリは複数(または単数)のILモジュールをまとめたもの。
private void button_Cick(object sender, System.EventArgs e)
{
DataRow dr2;
dr2 = dt2.NewRow();
dt2.Rows.Clear();
int sum = 0;
int sum1 = 0;
double Goukei = 0;
foreach(DataRow dataRow in dt.Rows)
{
sum -=(int)dataRow["数量"];
sum1 +=(int)dataRow["金額"];
Goukei -=(int)dataRow["数量"]*(int)dataRow["金額"];
}
dr2["数量"] = sum;
dr2["金額"] = sum1
dt2.Rows.Add(dr2);
Goukei *= 1.05;
}
C#で一時的に描画をやめさせたい場合どうやるのでしょうか?
おねがいします。
>>811 時と場合による、普通は出来ないので
目を閉じるのがよい
OnPaintをオーバーライドして何もせずreturnすればよか
わかりました。ありがとうございます
>>813
やってみます。ありがとうございます
すみません、C# .Net 2005で通知領域内に表示したアイコンを右クリックした場合と左クリックした場合で
異なるコンテキストメニューを表示させたいのですが、どのように行えば良いでしょうか。
いくらか検索して、notifyIconをMouseClickで押したマウスのボタンで判別してcontextMenuStripをShowすればいいのだと思ったのですが、
右クリックのみ有効のままでうまくいきませんでした。
ご教授お願いします。
private void notifyIcon_MouseClick(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
this.contextMenuStrip_Left.Show(this, PointToClient(Cursor.Position));
}
else if (e.Buton == MouseButtons.Right)
{
this.contextMenuStrip_Right.Show(this, PointToClient(Cursor.Position));
}
}
>右クリックのみ有効のまま
どういう意味?
>>817 左に割り当てたメニューが表示できなかったってことなんじゃね?
819 :
816:2007/07/14(土) 16:52:12
>>817 わかりづらくてすみません、
>>818さんの言うとおりです。
右クリックではcontextMenuStrip_Rightのメニューが出るのですが、
左クリックではまったく反応なしのまま。という意味です。
どこかでデザインフォームからのnutifyIconのContextMenuStripプロパティに直接設定すると
左クリックが有効にならないというのがあり、ContextMenuStripプロパティの指定をなくして
コード上で指定するようにもしてみましたが、この場合だと右左ともメニューが表示できなくなってしまいました。。
たぶん問題とあまり関係ないとは思うけど、なんでわざわざクライアント座標で
Showするんだろう。
>>819 なんかやってみたら普通に問題なく出来たけど。
ひょっとしてその"notifyIcon_MouseClick"にイベントがヒモ付けされてない、
なんてオチだったりしないか?
だったら右クリックも出ないんじゃね?
treeView1.Nodes.Add(new TreeNode("AAA"));
で追加したノードを削除するために
treeView1.Nodes.RemoveByKey("AAA");
を実行したのですが、削除されません。
何がいけないのでしょうか?
TreeNode( string ) はTextプロパティしか設定しないから。
>>822 ContextMenuStripプロパティは設定してるんだろ。
テストしたけどContextMenuStrip設定して手もMouseClick普通に発生する。
>>821に一票
826 :
816:2007/07/14(土) 23:09:07
>>821-822,825
>>821さんの通りでしたorz
初歩的なミスにずっと気づいてなかったとは・・・。
無事解決できました。ありがとうございました。
こういうときって普通、本当に表示メソッドが呼ばれてるかどうか調べないか?
ここで質問するほうがよっぽど面倒な気がするが…
ブレークポイントって知ってる?
829 :
デフォルトの名無しさん:2007/07/15(日) 03:00:35
Concat()
で、連結する間にいれる文字を指定する方法orそれにかわるうまい方法はないですか?
string[] tmp = new string("a", "b", "c");
の配列をforeachなどで一回一回くっつけて文字列を作るのじゃなくて、
string after = "a任意の文字b任意の文字c";
のように一発で合成させたいんですけど。
string.Join
831 :
829:2007/07/15(日) 03:14:33
でもそれ「ふらっと」でも恥ずかしくて聞けない類の質問だと思うよw
まぁ最低限よく使うクラスくらいはMSDNライブラリを読んでおいたほうがいいね
>>833 それは流石に無理があると思うが・・・
「よく使うクラス」って意外に多いよ。
むしろインテリセンスを活用するべき。メソッドの説明まで出るんだし。
んーそうかな
1日や2日で済むくらいじゃない?
想像してる範囲が違うのかな
Formのメンバとか全部読むのか?
ある程度知識がないと何が大事な情報かなんてわからないからキリがない
全てのメンバの詳細な説明までは読んでないよ
まあ水掛け論になりそうだねw
俺は834こそ「無理がある」と思うけど。
スペルとかオーバーロードの全てとかを一語一句覚える必要はもちろんないが、
基本的なクラスが持つ機能ぐらい頭に入ってないと効率悪くて死ぬでしょ。
まあそういうわけで俺はStringみたいな基本中の基本のクラスの機能が頭に入ってないって
そもそもどうなの、と思うわけだけど、そういう個人的な感覚は横においておくとしても、
少なくとも文字列を操作しようと思ったときに真っ先にStringについて調べようと思う発想がないのは
かなり恥ずかしいことでしょ。
ほんとに初心者のうちはTips回った方が早い
Concatでできないってんだから、
見落とした(見つけられなかった)だけじゃねーの?
842 :
841:2007/07/15(日) 13:11:06
馬鹿っていうのはどうして自分の言葉を自分に適用できないんだろうねえ
c の プログラムをjava風にvoid main()って書くのはいけないこと?
失礼、スレ違い
C#の場合はpublicもprivateも付けずに
static void Mainとするのが普通?
VSで自動生成されるコードを見てると、privateだけど外部から呼ばれる可能性があるものは
アクセスレベルを書かない習慣になってるように見えるんだが
どっちでもいい。
いろいろとConcurrentなコレクション実装ってないかいな。
外部から呼ばれるものは基本publicだろふつう。
外部から呼ばれるとは限らないものは基本なし(=internal)になってるが。
っていうか、特に理由がなければつかないのがデフォルトになってるな。
「なし」 = privateまたはインターフェイスの明示的実装 だぞ
メンバの話とトップレベルのタイプの話をごっちゃにするな
いやん勘違いん
>>842 あれ?841は俺なんだがw
まぁでも実際にリロードしてから書き込めばよかったと思っていたんでちょうどよかったw
>>833のようなやつがプロジェクトで一番使えない。
お前もしつこい性格だな
どうしても言いたかったんだろう。
ジェネリッククラスについて質問です。
@ジェネリッククラスA<T>でIEquatable<A<T>>を実装したときのbool A<T>.Equals(A<T>)に
ついてなんですが、T型のメンバの比較を、Tが値型だった時でもボックス化しないように
書くことは可能ですか?
Aジェネリッククラスの静的フィールドはTの型ごとに個別に確保されるのですか?
BT var = ...; if (var == null) ...; という文がTが値型であっても許容されるんですが、
この比較では一体何が行われてるんですか?
(デバッガの逆アセンブルによるとcallを含む何かしらの
処理が行われているようです。)
@そのbool A<T>.Equals(A<T>)は何を比較するわけ?
もしメンバ等にTを持っててそのTを比較するとかなら、
Tの制約にIEquatable<T>を指定して、IEquatable<T>.Equalsを呼べばいい。
Aそう
B何も行われない。
値型に対してインスタンスかされた場合、
nullとの比較およびそのときに処理される内容は削除される。
※絶対に実行されることはないとわかっているため。
自分は
>>859 じゃないけど補足。
Tの制約にIEquatable<T>が含まれているとするとする。
このとき次のコードはボックス化を起こさない。
T a, b;
bool b1 = a.Equals(b);
bool b2 = System.Collections.Generic.Comparer<T>.Compare(a, b);
ただしこう書くとボックス化が起きる。
T a, b;
IEquatable<T> ia = a; //ボックス化
IEquatable<T> ib = b; //ボックス化
bool b1 = ia.Equals(b);
861 :
860:2007/07/16(月) 20:44:11
ミスったごめん。
上のボックス化を起こさない版、正しくはこう。
b2 = System.Collections.Generic.EqualityComparer.Default.Equals(a, b);
862 :
860:2007/07/16(月) 20:45:26
gdgdまくる。
b2 = System.Collections.Generic.EqualityComparer<T>.Default.Equals(a, b);
863 :
858:2007/07/16(月) 20:54:43
>>859 @Tには制約を課したくないのですが、そしたらやっぱりボックス化するしかないんでしょうか。
Aありがとうございます。
B「コードを最適化する」にチェックを入れても値型のTに対して7個程度の命令が
出力されてるみたいなんですが、この設定はJIT最適化とは無関係ってことなんですかね?
>>860-862 参考になりました。
無関係です。
>>863 b2 = System.Collections.Generic.EqualityComparer<T>.Default.Equals(a, b);
は、TがIEquatable<T>を実装している場合にはボックス化は起きず、
実装していない場合はボックス化は起きるけどエラー無しに比較だけはしてくれる。
それでよければ利用するメソッド側にIEquatable<T>制約を付ける必要はない。
TがIEquatable<T>を実装していない場合は、
ValueType.Equals以外に一般的な比較方法が無いんだけどどうしたいわけ?
せいぜいできて、Equalsが型付けされたバージョンでオーバーロードされているか
Reflectionで調べて、あったらそれ呼ぶぐらいだと思うけど。
>値型のTに対して7個程度の命令
命令ってのがILのことを言ってるなら、冗長な比較はJITコンパイルの段階で除去される。
>>864 すみません、無関係なのは当たり前でした。
VisualStudioでデバッガの出力する逆アセンブリコード(ILではなく)において
値型とnullの比較に7個程度の命令が含まれていたんですが、VisualStudioでホストすると
JIT最適化が行われないとかそういったことがあるんでしょうか?
>>865 IEquatable<T>を実装していなければ値型は規定の比較、参照型は参照の比較で十分かなと
思ってます。制約によるデメリットの方が大きいので。
EqualityComparer<T>.Defaultの方法がよさそうですね。
>>866 >JIT最適化が行われないとかそういったことがあるんでしょうか?
いろんな要因でいろんなレベルの最適化が無効になりうるので
そういうのは自分で確かめてくれ。
最適化が無効になるのが嫌な場合は、
該当部分でDebugger.Break()を呼んだりDebugBreak APIを呼んだりして
その後にデバッガをアタッチするのが定石。
F5実行でインライン展開といった一部の最適化は確実に無効になる。
あとは言語のスコープにオブジェクトの寿命をあわせるために
ローカル変数を延命させたりといった副作用がある。
868 :
859:2007/07/16(月) 21:57:07
ごめ
>>865 の書いてるのでいいわ。
そのためだけに制約を増やす「必要」はなかった。
870 :
858:2007/07/16(月) 22:18:47
>>867 Debugger.Break()を使ったところnull比較のコードが省かれていることを確認しました。
どんな最適化が実際に行われているか自分の目で確認できるので便利ですね。
どうもありがとうございます。
>>869 読んでおきます。
public Form1()
{
InitializeComponent();
ContextMenuStrip menu = new ContextMenuStrip();
ToolStripMenuItem item = new ToolStripMenuItem("item1");
item.DropDown.Items.Add("item1_1");
menu.Items.Add(item);
item.DropDown.MouseDown += new MouseEventHandler(DropDown_MouseDown);
this.ContextMenuStrip = menu;
}
void DropDown_MouseDown(object sender, MouseEventArgs e)
{
MessageBox.Show("MouseDown");
}
コンテキストメニューのドロップダウンにマウスイベントを割り当てても実行されないのですが
どうすればいいのでしょうか?
DropDownItemClickedではなくどうしてもMouseDownを割り当てたいのです。
???
TabPageとTreeViewのツールチップが98系で化けるです。
獏ですか(怒)?
98で使う方が悪い
>item.DropDown.Items.Add("item1_1");
>item.DropDown.MouseDown += new MouseEventHandler(DropDown_MouseDown);
わからんけどここが問題では?
バグかどうか聞いてるんですが(怒)?
何だこれw
FIX: Treeview を制御するのには、 勝ち 98 での負の座標で失敗します。
FIX: Treeview Control Fails with Negative Coordinates on Win 98
→FIX: Treeview 制御 失敗 で 負 座標 での 勝ち 98
→FIX: Treeview を制御するのには、 勝ち 98 での負の座標で失敗します。
機械翻訳するのはいいけど Win を勝ちはひどいなwww
まあ、ある意味あっているw
>>871 どうしてもMouseDown使いたいってのは、
右クリックとかもとりたいのではないかと想像するけど
ContextMenuStrip使わずにToolStripDropDownMenuとかから継承してって
OnMouseUpとかで自前のイベント起こした方が近道っぽいよ
バグじゃないよ(怒)
そうなんですか
ありがとうございました(怒)
どういたしまして(怒)
>>881 レスサンクスです。
でも大変そうなので、結局、DropDownに追加したToolStripMenuItem一つ一つにMouseDownを割り当てました。
>>858 どうでもいいけど今からvarっていう識別子を使うのはやめとけよ
@varでいいよ。
MSは平気で予約語増やすね
だがそれがいい
デフォルトでなぜかusing System.Text;がソースコードの先頭に入るんですが、
これってカスタマイズできないですか?
System.Collections.GenericはともかくSystem.Textはさほど使用頻度は高くないと思うんですが・・・
そういうテンプレートを作れば?
うん。System.DataとかSystem.Xmlとかも……
895 :
デフォルトの名無しさん:2007/07/18(水) 08:19:57
ASP.NETでホストされているかどうかを調べる方法はどうするのがよいのでしょうか?
ホストされていたらweb.configを読み込んで、そうでなければapp.configを読み込む。
という処理とかを書きたいんですけど。
読むってどう読みたいの?
単に普通にセクションを読むだけなら
区別しなくても大丈夫だよ?
相変わらず言語障害者ばっかりだな
相変わらず口の悪いやつばっかりだな
相変わらず声優ヲタばっかりだな
メインのメニューのサブメニュー上で右クリックしたとき
あたらしくコンテキストメニューを出したいんですが、
コンテキストメニューのshow()を呼ぶと元のメニューが消えてしまいます。
元のメニューを消さずにコンテキストメニューを表示させるには
どうすればいいのでしょうか?
お願いします。
またUIの常識に根本から挑戦するようなことをw
なぜ今まで見たこともないUIにしたいのだろう…
自分のアプローチが間違っているかも?って少しぐらい考えないのかと。
>>900 質問に対する答えは「不可能」
そうしたい理由があるならそれも書けば?
いままで見たことないってなに?IEやスタートメニュー見たことないの?
あれはコンテキストメニューとは言わないだろ
>メインのメニューのサブメニュー上で右クリックしたとき
>IEやスタートメニュー見たことないの?
イミワカラン;;
IEでもコンテキストからコンテキストは出ないだろ
もしかして進むボタンとか戻るボタンのことを言ってるのか?
あと、スタート押して出てくるのはどう見てもウィンドウだろ
サブメニューのサブメニューでがまんするお
秀丸のファイルヒストリやフォルダヒストリのメニューは
右クリックするとコンテキストメニューが出るよ
もしかしてIEのお気に入りメニューやスタートメニューのプログラムメニューが
D&Dで並べ替えたり、右クリックでメニューが出せるのを知らない人が多いの?
もちろんあれは普通のメニューじゃなくてMSオリジナルなんだけど、
今回.netでメニューがオリジナルになったからできると思って
質問したわけです。
>>907 多分
メニュー→お気に入り→フォルダまたはお気に入りファイルの上で右クリック
の奴のことを言ってるんだと思う。
toolStripMenuItemを右クリックしてコンテキストメニューを出すっていってんだろ!
分かれやボケ共
>>912 じゃぁおまえはすっこんでろカス!
別れやチンカス
>>900 ここかフラットでずっと前に出てたから探してみな。
QTTabBarみたいなやつかな
ToolStripMenu上でToolStripじゃないメニューでるよ
>>915 ありがとう。
System.Windows.Forms.ContextMenuを使ってできました。
ワロタw
ToolStrip系のコントロールってEnabled = falseにしてもツールチップが
表示されるのがデフォみたいだけど、この仕様はPublicなプロパティとメソッドを
いじるだけではやはり変えられない?
しかし、ToolStrip系のコントロールって全体的に設計が糞だね。
Controlから派生して作られてない上に、継承して動作変更しようと思っても
制約が非常に多い。
>>918 自分の書いた内容をよく読むんだ!
変だと思わなかったらふらっとへ池。
くだらない奴。
まあ君が変だということはよくわかった。
変なのはいいことだと思う。
ほめ言葉に聞こえるんだ。
C#を選んだ時点で変だという話も…
それを言うならプログラムを組もうとする時点で変だよ!
言えてる。
昔はパソコン=プログラムだったんだが。
俺たちは異端児…
もう何が変かわからないよ
変じゃない人間なんていないよ!
そんな奴がいたら変だ!
928 :
デフォルトの名無しさん:2007/07/19(木) 02:09:35
C#スレも随分レベル下がったな
Expressとか出すからこうなるんだ
>>928 お前みたいなのはこのスレに必要ないから
もう来なくていいよ
>>928-929 わざわざ自分に言わなくてもwwww
何自演やってんだよカス
お前がいらないよ
いいわけいいからさっさと消えろ
煽りのレベルも下がったな
気に入らないなら見なければいいのにwwwwwwwwwwwwwwwwwwwwwwwwwww
935 :
デフォルトの名無しさん:2007/07/19(木) 02:47:02
お前らレス無駄遣いするなよ
煽りながらも質問するとか答えるとかしろ
あ、丸いボタンってどうやって作るんですか?
みたいな
フナムシども、黙れ!
やなこった
938 :
デフォルトの名無しさん:2007/07/19(木) 02:50:02
だらだら消費しようぜ
次スレたてればいいことだし
もうフナムシネタはいいよ
942 :
デフォルトの名無しさん:2007/07/19(木) 05:42:18
C#とVBとどっちがカンタンなの?
943 :
デフォルトの名無しさん:2007/07/19(木) 05:46:17
C#からRuby 使うライブラリってないですか?
C#のRuby bindingsというか。
検索してもやり方がまずいのか見つからなくて
945 :
デフォルトの名無しさん:2007/07/19(木) 08:56:11
C#って体験版ダウンロードできないの?
946 :
デフォルトの名無しさん:2007/07/19(木) 08:59:06
C#ってパスカルなの?
948 :
デフォルトの名無しさん:2007/07/19(木) 09:03:09
なんだよー
public static void Main()とかあるじゃん
VBのがかんたん!
949 :
デフォルトの名無しさん:2007/07/19(木) 09:04:03
なんだよー
ウインドウのサイズも指定しないとだめなんじゃん
死ねよ
>>948,949
そこはデザイナがやってくれるから気にせずForm1にVBのようにゴリゴリ書けばいい
951 :
デフォルトの名無しさん:2007/07/19(木) 09:27:40
952 :
デフォルトの名無しさん:2007/07/19(木) 09:28:18
何こいつ
ふらっと以下だな
Macのタスクバー?みたいな与えられたRectangleの中でマウスの位置に応じたアイテムが拡大表示されながら左右に動くことで全体を表示できるコントロールあるじゃないですか。
名前付けるとしたらなんと言ったらいいのかね?
957 :
895:2007/07/19(木) 10:33:53
セクション名を指定して読むのではなく、app.config/web.configをConfigureオブジェクトとして読み込みたいです。
>>955 こことか
>>956 で聞くよりも、Mac 関係の板に行って
「あれってみんななんて呼んでる?」って聞くほうがはやくね?
>>951 賢いレイアウトしてもらいたければ WPF 使え。
そのサイトに WPF の説明もある。
Window.SizeToContent で、中身にあわせた自動 sizing してくれる。
>>958 んーなんつうかDocそのもののことじゃなくて、ああいう感じのスクロールバーとかなしでマウス位置に応じてぐりぐりって動くものを一般的になんと言うかなんだけど・・・
どうしよう。
>>951 using System.Windows.Forms;
class Program
{
public static void Main()
{
Application.Run(new Form());
}
}
何を持って必須といいたいんだろう。
初期値くらい持ってるけど。
それとも週の真ん中で釣り糸垂らし中?
>>962 実際使いもせずにサイトの情報だけ見て判断しているんじゃね?
zoomSliderとか
965 :
デフォルトの名無しさん:2007/07/19(木) 18:22:52
VBを詳しく知らないのだが、確か、実画面のドットじゃなくて、
比率でサイズ指定できるんじゃなかったか?
フォームのサイズを変更しても、大丈夫というか
まっ!
>>966 過去ログの番号の整合性が無くなるからそこは止めようということになった