さっそく質問なんですが VC♯で画面を作っていて、 ListBoxを二つ用意して、ListBox1の項目を選択した場合に、ListBox2に表示されている項目もListBox1の項目に対応したフォーカスが自動でセットされる仕組みにしたいのですがうまくいきません。 例えば、ListBox1に名前を表示させて、ListBox2に誕生日を表示させた場合、名前を選んだら自動的にその名前に対応した誕生日にフォーカスがあたる仕組みを作りたいのです。 それぞれのListBoxに表示するものはXMLファイルから読み取って表示させています。 一応、名前と誕生日はXMLファイルの中で関連付けもしています
Ajax的なものをWinFormでしたいのな。 ListBoxが変化したときにイベント起こせばいけそう。
バインディングで ListBoxだとDataSourceか
>>6 「うまくいかない」という質問は、ありえないほど酷い。
PCが煙吐いて空の果てに飛び立ったまま戻ってこなくなりました、だって「うまく
いかない」のうちだ。
どううまくいかないのかを書け。
リストボックスの項目選択をプログラム的に行うだけならListBox#SelectedIndex
プロパティに値をセットすれば動くが。
>>6 汚いソースでごめんよ。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private const string xmldoc =
@"<?xml version='1.0'?>
<names>
<person name='satou'>2009/01/01</person>
<person name='saitou'>2009/02/01</person>
<person name='sakata'>2009/03/01</person>
</names> ";
private void Form1_Load(object sender, EventArgs e)
{
var doc = XElement.Parse(xmldoc);
var q = from n in doc.Descendants("person")
select n.Attribute("name").Value;
this.lstName.DataSource = q.ToList();
}
private void lstName_SelectedIndexChanged(object sender, EventArgs e)
{
var item = (sender as ListBox).SelectedItem.ToString();
var doc = XElement.Parse(xmldoc);
var q = from n in doc.Descendants("person")
where n.Attribute("name").Value == item
select n.Value;
this.lstBirthday.DataSource = q.ToList();
}
}
おお、皆さんありがとうございます とりあえず今から試してみます
その DLL が解放するための関数を提供してないなら、 DLL 自体をアンロードするしかないんじゃね?
>>13 mecab_destroy よんでないんじゃないのか?
相互参照は開放するように指示は出せるけど、いつ開放するかは決まらないんじゃなかったけ
>14-16 返信どうもです mecab_destroyは呼んでます それでも駄目なので困ってたところ ロード アンロードは時間がかかるので あまりやりたくないのですが,それしか方法なさそうですか...
どうせ目的の処理自体が重いんだからどうでもいいだろ 別プロセスにして標準出力で受けるとかでもよくね
>>13 リンク先、PtrToStringAnsi呼ぶ位置がおかしいな
それはともかく手元のVistaでmecab0.98pre2のlibmecabを4000文字10000回ほど
mecab_new2〜mecab_sparse_tostr〜mecab.destroyしてみたが
とくに問題なかった 非プライベートなワーキングセットも含めて
>>19 0.97->0.98pre3
バージョン上げることでメモリ問題解決しました
気づかせてくれてありがとうございます
わざわざサンプルまで作っていただいてすみません
アンカー後先逆ですが
>>18 以前までそういう風に組んでたんですが
アンマネージのDLL読み込めることを知ったのでやってみたらこうなった感じです
System.Net.Socketsが見つからないため TcpListenerクラスが使えません。 System.Netはありました。 どうすればいいですか? VC#2008です
必要なアセンブリを参照設定して、必要な名前空間を using する。 それだけ。
じゃあアンドレカンドレの「夢の中へ」でも歌っとけ
じゃあ、あきらめろよ。
>>23 具体的にどんな環境でどんなことやって見つからなかったの?
昨日の
>>6 で質問した者なんですが
>>10 さんが書いてくださったソースを基に試してるのですが
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
var doc = XElement.Parse(xmldoc);
var q = from n in doc.Descendants("person")
select n.Attribute("name").Value;
var lll = from a in doc.Descendants("aaa")
select a.Attribute("name").Value;
this.listBox1.DataSource = q.ToList();
this.listBox2.DataSource = lll.ToList();
}
private const string xmldoc =
@"<?xml version='1.0'?>
<names>
<person name='satou'>2009/01/01</person>
<person name='saitou'>2009/02/01</person>
<person name='sakata'>2009/03/01</person>
<person name='sakamoto'>2009/01/01</person>
<aaa name='2009/01/01'></aaa>
<aaa name='2009/02/01'></aaa>
<aaa name='2009/03/01'></aaa>
<aaa name='2009/04/01'></aaa>
</names> ";
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
}
このようしてにXMLから表示させる時にpersonの名前と関連させた誕生日だけを表示させるのではなく、まず初めに名前一覧と誕生日一覧をそれぞれのListBoxに表示させてから名前を選ぶとそれに関連する誕生日にフォーカスが移るようにしたいのですが、
この場合personの誕生日をみてaaaの誕生日と関連付けをしてフォーカスを移させることは可能なのでしょうか?
無理無理。なにせpersonとaaaを関連づける情報が無いじゃないか。 エスパーするとaaaのnameが参照キーでテキストノードが関連するデータのつもりかもしれないけど。 名前ならいざしらず誕生日をキーにする気?(名前も同じ名前があったらどうする) あくまで一例だけど、こんなのはどう? 1.DataSet 配置して、その中に persons テーブル作る。 2.persons の中に name と birthday 項目を作る。 3.二個のリストボックスの DataSource に配置した DataSet を設定。 4.二個のリストボックスのそれぞれの DisplayMember に "persons.name" と "persons.birthday" を設定。 5.DataSet に以下のようにデータを食わせる。 string data = @"<?xml version='1.0' standalone='yes'?> <data> <persons><name>satou</name><birthday>2009/01/01</birthday></persons> <persons><name>saitou</name><birthday>2009/02/01</birthday></persons> <persons><name>sakata</name><birthday>2009/03/01</birthday></persons> <persons><name>sakamoto</name><birthday>2009/04/01</birthday></persons> </data>"; public Form3() { InitializeComponent(); dataSet1.ReadXml(new StringReader(data)); } これで名前を選択すると誕生日、誕生日を選択すると名前が自動にセレクトされる。 他の関連付けたい情報は、誕生日と同じようにpersonsテーブルに入れて誕生日と同じように関連付け。 ラベルとかに選択されてるデータを連動表示させたいなら label1.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.dataSet1, "persons.birthday", true)); という感じ。
なぜHSP・・・
つーかIPアドレス直でやるなよ。 ちょっとDDNS登録すりゃ済む話じゃないか
そんなスレがム板にあったのか。 ゲ制作板でやるべきじゃね?
これ誰得・・・? 豪華商品にふいたw
リアル中学生だな……
中古w
37 :
デフォルトの名無しさん :2009/08/25(火) 23:23:56
treeview(4階層)を最初はエクスパンドしていない状態にし、 検索ボックスで該当した4レベル目のノードとその親ノードと祖父ノードのみを表示させたいときはどうやるのでしょうか?
気合い
ふらっとの方でレスもらってたろw
40 :
デフォルトの名無しさん :2009/08/28(金) 11:19:41
カスタムコントロール作るのは大変???????????
そんな質問をするレベルなら大変
42 :
デフォルトの名無しさん :2009/08/28(金) 13:21:36
ツリービューを開いたのを、一度完全に折り畳むには、どういうメソッドを設けたらよいですか?
WinForm? CollapseAll 呼び出すだけだが
44 :
デフォルトの名無しさん :2009/08/28(金) 14:39:49
>>43 A
B1
C1
B2
C2
C3
というツリーがあり、これが全て畳んだ状態でC3ノードを検索したとき、
A1
B2
C3
のみを表示させることはできますか?
45 :
デフォルトの名無しさん :2009/08/28(金) 14:42:50
>>43 A
B1
C1
B2
C2
C3
というツリーがあり、これが全て畳んだ状態でC3ノードを検索したとき、
A1
B2
C3
のみを表示させることはできますか?
Aが開かれてる時その子ノードのB1が表示されてなかったらおかしいだろ
表示するようにすればいいじゃん
元のツリーを変更してもいいけど、検索結果閉じた時に面倒なんで 新しいツリー用意してA1->B2->C3だけ表示すればいいじゃん
49 :
デフォルトの名無しさん :2009/08/28(金) 15:54:04
同じレベルのノードは、常に表示されてしまうわけか…。
50 :
デフォルトの名無しさん :2009/08/28(金) 17:18:31
データセットの特定のレコードを削除するには、どう記述すればいいですか?
dataSet.Tables[0].Rows.Remove
52 :
デフォルトの名無しさん :2009/08/28(金) 20:09:18
53 :
デフォルトの名無しさん :2009/08/28(金) 21:30:07
( object sender , EventArgs e )という形の引数が取られる形をよく見るのですが この引数に何かが代入(参照)するコードはどこにあるのでしょうか。 senderには
54 :
デフォルトの名無しさん :2009/08/28(金) 21:30:58
ごめんなさい、途中送信してしまいました。
senderにはそのなのとおり呼び出し元が渡されます キャストでもして使えばいいじゃないんでしょうか
56 :
デフォルトの名無しさん :2009/08/28(金) 21:49:55
>>55 お答えありがとうございます。
sender = オブジェクト名 ;のようなコードを書かなくても
呼び出し元が自動で渡されるという理解でいいのでしょうか?
自動も何も引数って呼び出す側が渡すものだから。 誰が呼び出してるかというと,イベントの発生源が呼び出してる。 つまりイベントの発生源がそのイベントを呼び出すときにはsenderにthisを渡してるわけ。
一度終了したスレッドをもう一回再開するにはどうすればいいですか?
できないよ
62 :
デフォルトの名無しさん :2009/08/29(土) 00:41:20
コンソールって何ですか。
メンソールみたいなもんだ。
64 :
デフォルトの名無しさん :2009/08/29(土) 01:02:14
チェックボックスの外観をラジオボタンと同じ丸型にできると聞いたことがあります。 どのようにすればできるのでしょうか。 appealanceプロパティだと、コマンドボタンの形状になってしまいます。
>>64 もうこれと同じ質問を今週だけで3回見たが、
どっかの学校の夏休みの宿題か何かなのかね。
それとも同じ奴が粘着してるのか?
>>64 やめろ。チェックボックスは四角のままにしとけ。
こんな宿題を出す学校は存在しないと思いたい… UIデザインとしては最悪じゃん。
68 :
デフォルトの名無しさん :2009/08/29(土) 01:43:48
ラジオボタンは複数の選択肢から選らばせるとき… チェックボックスは単純に有無を示すとき… という典型的な使用方法があるのだから。 チェックボックスを丸にすると逆に不気味。
普通に丸にするやり方を調べて来た生徒は落第 「丸にする理由が無くまた機能を視覚化するデザインとして最悪でうんぬん」 と課題をやらない理由をレポートしてきた生徒は合格
70 :
デフォルトの名無しさん :2009/08/29(土) 01:58:33
C#をマスターするために読むべき、すばらしい本を教えてください。 入門書は読み終えました。
ぐぐれ
入門書読み終わったのなら、理解度を確認するためにも小規模なアプリケーション作っとけ 本読んで理解したつもりになりたいだけなら作んなくてもいいけど
73 :
デフォルトの名無しさん :2009/08/29(土) 02:40:29
>>69 そこまで頭が働く奴は、独立SEとして食べていけるだろうね。
74 :
デフォルトの名無しさん :2009/08/29(土) 02:44:08
>>70 俺のお勧めは、
作って覚えるV…C#2008
秀和システム
だね。Express向きだけど、家計簿を作りながらイメージを掴める。
他の本でアプリケーション作成の一連の作業を例示してくれている本は知らない。
75 :
56 :2009/08/29(土) 02:44:14
>>57 さん
つまり例えばpaintイベントなどにも見えてはいないけれども、senderに実引数(となるオブジェクト)を渡すような
コードが書かれているとことなのですね。
>>58 さん
>>59 さん
参考になりました。
みなさんありがとうございました。
76 :
デフォルトの名無しさん :2009/08/29(土) 10:05:47
教えてください。 propertyGridで表示しているプロパティの名称一覧は取得できますか? できるのであれば、どのようにすればよいのでしょうか?
TypeDescriptor.GetProperties なんだってそんな面妖なことを
78 :
デフォルトの名無しさん :2009/08/29(土) 10:13:26
>>77 ありがとうございます
プロパティウィンドウに表示されている順番にすべてを取得したくて
propertyGridに表示させれば簡単に取得できるのかな?と調べてました
おまえらいくつ?
80 :
デフォルトの名無しさん :2009/08/29(土) 13:34:41
>>79 33歳独身。現在、社内SE。
4月入社だがついていけなくて、毎日が地獄。
81 :
デフォルトの名無しさん :2009/08/29(土) 15:38:05
82 :
デフォルトの名無しさん :2009/08/29(土) 16:06:20
C#は実行ファイル(中間コード)が見えると聞きました。 結構簡単に見えてしまうんですか?
83 :
デフォルトの名無しさん :2009/08/29(土) 16:10:20
↑すいません日本語が変でした。 C#は実行ファイル(中間コード)からソースコードが容易に解析できると聞きました。
うん、.NetでもJavaでも、中間コードを見るツールは標準で入ってる。
難読かすればだいぶ見にくくなる。 それかましとけば十分。
87 :
デフォルトの名無しさん :2009/08/29(土) 17:18:09
88
89
僕3さい!
91 :
デフォルトの名無しさん :2009/08/29(土) 18:39:04
前に、デリケートに関する質問があったが、 結局デリケートは、サブルーチンを呼ぶサブルーチンを呼ぶサブルーチンを1オブジェクトのように見立てるようなもの?
ふらっとの方で質問した方がいいんじゃね?
それから delegate な
サブルーチンなんて言葉を聞いたのはドクター宮永以来だ
デリケートゾーン?
覚えたての頃、得意げにサルブーチンって言ってたの思い出して赤面した
97 :
デフォルトの名無しさん :2009/08/29(土) 20:08:25
サブルーチンって死後?????? 私は34歳。COBOL歴5年ののち、金融機関の内勤5年…のブランクがあるからか。。。
昔のFORTRANなら「サブルーチン副プログラム」というのが正しい。
99 :
デフォルトの名無しさん :2009/08/29(土) 20:13:30
>>94 今は、なんて言っているの?
共通プログラムとか?
100 :
デフォルトの名無しさん :2009/08/29(土) 20:16:41
「C#の初心者や修行者あつまれ!!!!!」in 大阪城公園 なんてイベントを企画したら、みんな来てくれるかな? 私は関西在住なので関西でしか企画できないですが (+_+;)。
行く分けねーだろ馬鹿
102 :
デフォルトの名無しさん :2009/08/29(土) 20:20:16
>>101 そんな言い方ないだろ。てめえの面が見てみたいよ。
104 :
デフォルトの名無しさん :2009/08/29(土) 20:32:49
>>103 どんだけひねくれているんだよ。
大手でプロジェクトリーダーでもやってるのか?
何でひねくれてると大手でプロジェクトリーダーやってることになるんだよw
それが彼の常識だから
107 :
デフォルトの名無しさん :2009/08/29(土) 21:34:50
ひねくれている奴がリーダーだったりするけどね…。 ○○○データとか。
108 :
デフォルトの名無しさん :2009/08/29(土) 22:11:16
>>107 ひねくれているのはお前だろうが。
風呂屋でひとっ風呂浴びて頭を温めてこい。
dataはいい評判聞かないね N,F,Hのほうがまだまし
メーカーとSI一緒にすんなハゲ
ひねくれよばわりする前に、下請けに甘んじている自分の人生を省みろよ。
そのアホ話、いつまで続けるつもりだよ。 しかし、無能な奴ほど被害妄想が激しいのはこの業界もう鉄板といっていい法則だな。
マ板でやれ!だな
おいおい大学生の俺にも住処をあたえてくれよ
就職板でやれガキ
ニートの俺にも(ry
117 :
83 :2009/08/30(日) 20:07:28
.Net2.0で開発してるんだけども、DictionaryのValuesをIListを受け入れるメソッドに使いたい。 Listに代入してしまうのが楽だけど、Valuesの変更が即反映させるようにしたい場合、 IListを継承した独自クラスを作ってそれに入れるしかない?
変更が即反映する,ってどういう感じ?
Dictionary<int,char> dic = new Dictionary<int,char>() { { 0, 'a' }, { 1, 'b' }, }; ***List<char> lis = new ***List<char>(dic.Values); dic.Add( 2, 'c'); こんな処理の時、lis[2]に'c'が入ってて欲しいのですよ。 とりあえずIListを継承したクラスを用意して実現はできたけど、 あまりにも汎用的なので何かクラスが既にあるような気がしてならない。
Dictionary<TKey, TValue>.ValueCollectionが ICollection<T>しか実装せずIList<T>を実装しないのには理由があるわけで、 IList<T>はICollection<T>より限定的なリストなので そんなの汎用的に作れと言われても無理。
FUNC<DIC,ILIST>とかで毎回作るのだめ?
IListを実装するってことは要素の順番に意味があるってこと だから要素の順番を全く保証しないDictionaryがIListを実装するのは不適切
Javaには標準でLikedHashMapがあるのに・・ C#まじ使えねーな
>>120 の例ではSortedList<TKey, TValue>が使える
SortedList<TKey, TValue>.ValuesはIList<TValue>型
>>124 ばかだろあんた。
そりゃList違いだ。
(・∀・)クスクス
キャスト不要のenumみたいなのってありますか? 全部int型みたいな
こんなふうにする struct MyEnum : IEquatable<MyEnum>, IComparable<MyEnum> { public static readonly MyEnum One = 1; public static readonly MyEnum Two = 2; private int value; private MyEnum(int value) { this.value = value; } public static operator int(MyEnum value) { return value.value; } public static operator MyEnum(int value) { return new MyEnum(value; }; } //以下略(インターフェイスメンバや演算子などを実装) }
130 :
129 :2009/09/01(火) 16:17:15
訂正 public static implicit operator int(MyEnum value) { return value.value; } public static implicit operator MyEnum(int value) { return new MyEnum(value; }; }
全部定数でいいじゃん
ワロタ
そもそも:intなenumは普通にキャストなんかせずにintとして扱えると思うんだが
扱えません
ん?と思ったが、そうかキャスト要らないのはenumな型の変数に整数を入れる場合であって 逆ではなかったのか。 冷静に考えるとこれって本来逆であるべきじゃないのかね。 まあ深くは考えてないんでいろいろ何か事情があるんだろうが。
試してから言えよ どっちもキャストが必要
>>137 すまん確かに試さずに言ってた。
そもそもenumを数値的に扱うことをほとんどしないのと、
あとVBも触るんでそっちの知識がゴッチャになってた。
0からのみ暗黙に変換できるのはcharも同じだな 変換というよりは0は数値じゃなくて特別な記号みたいなものとして扱われてるんだろうな
しかし、逆はともかくenumを基になってる整数型として暗黙的に扱えても そんなに害にも落とし穴になるとも思えないけど、なんで明示的キャストが 強制されるルールになってるんだろう。
特に必要もないのにenumを数値として意識したり明示的に型指定することは 非推奨とされてるからなあ
>>63 土曜日からずっとメンソールに関して調べましたがタバコ関係の情報しか得られませんでした。
もっとヒントください
コンソメみたいなもんじゃね
めんそーれー
麺魂
おまいらスピン付数値入力コントロール作るとしたらテキストボックスから派生させる?それともcompositionつかう?
作らない
コンポジション
NumericUpDownが使えない環境でってこと?
コンポジションっていうか、この場合は普通にユーザーコントロールでしょ。
コンポジションが使いやすい
>151 いや、一般的な設計の話で。 コンポジションの方が作る分には良いんだが、使う側としてはテキストボックスでもあった方がプロパティ設定出来て良いものか。 んでも余計なものない方がよい気もする。
スピン付数値入力コントロールならキャレット関連はあんまり意味無いだろ それ以外でTextBox固有の機能で特に必要なものなんてあるか?
主に外環の設定だな。
テキストボックスのように使うのなら継承だ
んでテキストボックスとして使うことがそれほどあるのかって問題だな。 用途としては違うとも思うけれどかぶってるところもある。
だからこういう場合はユーザーコントロールにするんだよ。 本当にコントロールを自分で作ったり拡張したことがある奴が 経験に基づいて継承だのコンポジションだの言ってるのか? やってみろよ実際。 そんな方法じゃめんどくさくてやってられないから。
ネタで言ってるんだと思ってた
ユーザーコントロールとカスタムコントロールの違い
>>159 ユーザーコントロールにコントロールを乗せて行くという方法をコンポジションと
言うんだと思っていたが?普通に合成という意味だから。
拡張して作るカスタムコントロールはどう考えてもコンポジットではない。
それならユーザーコントロールって言おうよ。 ユーザーコントロールはオブジェクトコンポジションより意味が狭いのだから。 ユーザーコントロールはコンポジョションだが、逆は違うよ。 普通は前提条件なしで「コンポジション」と言えば、NativeWindow的なものを想像するぞ。
俺はオブジェクト指向的な包含の事かと思ってた
同じだよ 数値入力コントロールを作るためにユーザーコントロールにテキストボックス置いたら それはオブジェクト指向的な包含
166 :
デフォルトの名無しさん :2009/09/05(土) 22:10:20
未経験でC#アプリの製作をしているが、 汎用系の開発しかしたことがなかったから、GUI設計をしたことがない (-_-;)。 どういう点に心がけたらいいんだろ。 もう50回くらいやり直しをしまくって、 フォームを分けてみてはやはりパネルにしてみたり、 縦スクロールにしてみては横にしたり…。 未だに使いやすいフォームができない。 担当者は俺だけ。 どうすりゃいいんだよ…。先が見えない。
諦めちゃえばいいじゃん
馬鹿でも簡単に使えるように気をつけてるな
169 :
デフォルトの名無しさん :2009/09/05(土) 22:19:55
・選択肢を少なくする。 →1画面内にあるコントロールを少なくする。 ・クリック回数を少なくする →処理を完了するまでのステップ数を少なくする。 この相反する2つの調度良いバランスを求める。 後は既存の似た処理をするツールのUIをオマージュ。 開発経験者か、UIを発注した事ある人に意見を聞くのがいいんだろうけど。
c#上からpingして疎通確認するアプリ作って xp上からは動いたんですが 2003にいれたら他のマシンへのping完了しないのはどこらへんがまずいんでしょうか ちなみにcmd.exe起動してping打つと普通に他のマシンへも通ります。 なんかファイアウォールとかいわれたけど windosのファイアウォールってなにもいわないからなどこで止められてるのかわかんないし もうつかれたよ・・・。
ファイアウォールの例外に追加したら?
>>166 作るのは初めてでも、使ったことくらいはあるだろ。
そこから何か学ばなかったか?
GUIデザインの草案は紙とペンで作るのがいいとおもうまう
はじめまして、ちょっと質問させてください。 DataGridViewで列ヘッダをクリックして並び替える際に、行を選択していたりするとこの選択状態の位置がそのまま維持されてしまい、 並び替えられた(選択されていた)行へ追従しません。 これを、並び替えたときに行とともに選択状態の位置が移動するようにするにはどうしたらよいでしょうか?
176 :
デフォルトの名無しさん :2009/09/06(日) 08:43:02
今まで見てきたGUIで、感動したものを教えてください。 サイトでも何かのコントロールでもいいです。
ユーザーインターフェイスデザイン―Windows95時代のソフトウェアデザインを考える でも買え。って、About Face の 3 が出てるのな。ぽちっとしておこう。
>>176 Windows Vista 版 Explorer のアドレスバー。
パンくず型リストの理想型だと思う。
ただし、1 つのコントロールが複数の機能を兼ねているので、
賛否が分かれそうだが。
あと FL Studio の GUI 全般。
複雑になりがちな DAW というジャンルで、画面遷移や
ウィンドウ数の増大を上手く回避してる点に感心してる。
EclipseのPerspectiveの機能はVSにもほしい
不景気で6月末でMSDNサブスクリプション更新しなかったのにWindows7製品板が落とせるんだけど。 後から請求きたりするの? 問い合わせてみて「手続き上のミス」とか言われて終わっちゃうのも残念なんで問い合わせしてないんだけど。
Pro は落とせるみたい。 5年以上前に Expire したアカウントでも落とせた。
>>179 Eclipseのパースペクティブと、VSのソリューションがあると自分的には完璧だなぁ。
ソリューションは機能であってUIじゃないけど。
GUIで最も感動したのはポップアップメニューというかコンテキストメニュー。
オブジェクト選択して右クリックで動詞選ぶなんて最高だ。
VSのソリューションがEclipseのWorkspaceに相当するんじゃないのかな?
だってワークスペース切り替えは-dataで起動時指定だしなぁ。 いいとこProjectsレベル。
solutionはライブラリ作りつつアプリ作ってる時とか便利
186 :
デフォルトの名無しさん :2009/09/06(日) 18:46:36
年配向けの顧客データ管理ソフトを作るよう特命を受けた。 顧客データや商品データなど100項目以上あり、1画面に入りきらない。 タブコントロールを使いたいけど相手は年寄り。 急にパネルが見えなくなれば、疲れるだろう。 スクロールを多様すればいくらでも画面内に情報が入れられるが、 相手は年寄り。 スクロールによって見えなくなった情報が気になって疲れるだろう。 マウスを当てたら新しいウインドウが立ち上がり、隠れた情報を知ることができても、相手は年寄り。 消えたときに疲れるだろう。 どうしたら年寄りから満足してもらえるかなぁ。 やはりスクロールをするしかないかな。
「誰か他の若者に仕事をさせる」機能が無いぞ
考えすぎ。 俺なら操作手順の少ないタブで押し通す。 新しいウィンドウなんて視線があちこち飛んで疲れるだけ。それならタブでいいし。 スクロールするにしても目次のリスト出しておいてクリックするとその位置まで 自動的にスクロールとか、タブとほとんど同じにして操作の手数にこだわる。
ボタン一発でリモートアシスタンスを実行できるようにすればいいと思う
>>186 何回も同じ質問するな。少しは自分で考えろよ。
その程度で疲れる相手に管理ソフトなんか作ってもすぐに使われなくなるのがオチ 「ええのう、わしの若い頃を思い出すのう みwなwぎwっwてwきwたwww」 って思わせるような画面でも考えてろ
タッチパネルにしてウィザード方式。大丈夫、たぶん ATM とかで お年寄りでも慣れてる
195 :
デフォルトの名無しさん :2009/09/06(日) 20:50:29
>>186 ウィザード方式に俺も一票。最初に目的を押させた後は
質問に答えてもらうとあら不思議、登録が終わってるみたいな。
>>181 そんなもんなんだ。
たしかにプロだったなぁ。
なぜに放置なんだろ
でもアクティベーションキーの取得はさすがにダメなんでしょ? それじゃほぼ無意味じゃないかn。
>>186 100項目もあるのがおかしい。
20項目まで削れ。
>>186 年寄りに一度に100項目も見せて殺す気かよw
>>186 てか何故に100項目も出来るのかが知りたい
だって正規化してないDBなんだもんっ♪ みたいな
WinFormのWYSIWYGなHTMLエディタコントロール探してるんだけど、 ASPとか有料のしか見つからないんだがフリーでないんだろうか。 文字サイズと色変えれるくらいでいいんだが、何か知らない?
JavaScriptのやつが山ほどあるから、WebBrowserでホストして使うのが楽。 文字サイズとか色変えるぐらいなら自分で実装してもいい。
209 :
デフォルトの名無しさん :2009/09/07(月) 20:14:06
>>203 なんで202を笑う?
普通の意見だろうが。
211 :
デフォルトの名無しさん :2009/09/07(月) 20:27:48
UIの項目数とテーブルの正規化になんの関係があるんだよハゲ
例えばPCの諸元で言うなら、CPU : Core2 Duo T5600 という項目と動作周波数・ コア数・FSB・・・の項目があるような。普通ならCore2 Duo T5600だけでいいのに。 キー項目以外の項目を表示するということはあるかもしれないけど、全項目に 渡って表示しているなら第二正規化していない可能性高いヨネーという話かと。
214 :
デフォルトの名無しさん :2009/09/07(月) 22:44:12
月末、大阪城公園か淀川河川敷でオフ会をやりませんか? 参加費は1人100円いただきます(ビニールシートを買うため)。 C♯を語りつくしましょう。
ビニールシートくらいだれか一人が持っていけよ
じゃ1メートル四方の一枚もっていく
ビニールシートなら大阪城にたくさんあるじゃん
そういうの好きだけど大阪在住でないのが残念
219 :
デフォルトの名無しさん :2009/09/08(火) 20:04:24
まじで企画しようかな。 大阪城公園、または本町の居酒屋でもいいね。 参加していい人は、書き込みしてください。 ミクシイに似たようなコミュニティがあれば、そちらでもできるので教えてください。
九州ならいったのに・・・
河川敷よりネット環境のあるところのほうが良くね?
オーストラリアならいったのに。。。
太宰府市なら行く
224 :
デフォルトの名無しさん :2009/09/08(火) 20:58:15
第一回は大阪で… (理由:私が関西におりますので…。) 達人から初心者まで、C#に日々打ち込む人たちが集うコミュニティがあればなぁ…。 関西でうまくいけば、九州でも集まりたいですね。 一度きりの人生、こういうきっかけであっても、先に楽しみが生まれるならば こういう集まりでもいいじゃないですか。
普通のコミュニティで充分。
わんくまとか各都市でやってるじゃん 俺は行ったことないけど
わんくまは・・・いいやw
228 :
デフォルトの名無しさん :2009/09/08(火) 22:29:20
わんくまってなに?
幼稚園のクラスの名前。
わんくまかw
マルチポストを忌み嫌うヤカラの集団。
>>231 いやむしろあそこの掲示板はそうでもないよ。
dobon氏の掲示板にいるようなキチガイ監視員はいないと思う。
っていうか、ひょっとして
>>231 まマルチポスタークンなのかなw
インフルエンザで勉強会中止だぜー
プロしかいないのけ?
236 :
デフォルトの名無しさん :2009/09/08(火) 23:10:28
どうせお前らは、友人もおらず同僚からも距離を開けられ、家族からも怪訝な目で見られ、親戚からも寡黙に思われている孤独男児だろ。 集まろうよ。俺と会って話そうよ。ネットができる喫茶店にでも集まるか。
行きたいけどニートなのが恥ずかしいのでそこら辺には触れないでくれると嬉しいです
オフ板でやれ
ここでいいよ
初心者スレで聞いてみたんですが、誰も相手してくれなかったのでお願いします。 VS2005、C#なんですが 大きな画像、というか地図を格子状に区切って分割して保存してある画像があり、 任意の場所を中心として周囲8近傍結合、pictureBoxに表示するソースを書いてます。 pictureBoxの画像をマウスドラッグでgoogleMapのように滑らかにスクロールさせたく思い その際表示領域より少し大きめの画像に結合したあと表示領域分切り出しているんですが 動作がもっさりであんまり満足できていません。 上手くやる方法ないでしょうか? またはpictureBox以外でもこのような実装を行う方法ってありますか?
241 :
デフォルトの名無しさん :2009/09/09(水) 02:19:20
>>240 > 動作がもっさりであんまり満足できていません。
この原因をくわしく
>>241 Graphics g = g.DrawImage(〜〜〜〜);
という感じで大き目の画像を結合した上で
さらに同じ方法で切り出しを行ってるためだと思うんですが・・・
で?
244 :
デフォルトの名無しさん :2009/09/09(水) 02:33:44
>>242 原因調査が不十分って感じなんだが
とりあえず,どの部分でどれだけ時間がかかっているか実測してみて
245 :
デフォルトの名無しさん :2009/09/09(水) 09:15:33
あれ、カスタム書式指定文字列で整数部はカンマ区切り、小数部は有れば全部表示とかしたかったんだが、整数部と小数部分けてごにょごにょやらないと出来ない? #とか使うと小数部が指定した桁数分に丸められてしまふ…
#を310個ほど並べたらいいよ
全部表示は無茶だろ とんでもない桁になる
?
小数部を全部出すという要件が思いつかんが。
仮に全部出したところで桁数なんてしれてるだろう。
1/3
表示は上の数桁だけに制限して,コピーしたら全部取得されるみたいな工夫をするべき
要するに普通にdoubleなりdecimalなりで扱えばいいってことだな
なんか分かって無さげなのいるから横から。
System.Double.Epsilon 見てみれば分かるが、
指数部が e-324 とかになる。
「有効桁数」ならまぁ高々15桁としても小数部とかみた
いな表現すりゃ 300 文字オーバーみたいになりうるよと
いう話。
ちなみに Epsilon で . 以下 # を 339 個並べてみたら全部
出たので
>>249 の方法論でいいんじゃね(310 では足り
ないみたいだが)
ちなみに整数部も同じ。e308 かな。
ああごめん、確かにぼけてたわ。
>248 すまん、数値入力の部分の表示だったので小数部がえらいことになるとか考えてなかったw 桁数制限、ごもっともです。
WebBrowserコントロールで表示してるWebページを、コントロールの大きさ(横幅)に合わせて拡大縮小しだいのたけど どんな属性やメソッドを使えば良いのか全く分からない…… MSDNのフォーラムに似たような質問があったけど、そもそもその解決したと言われるプロパティが見つからない 環境は学生用のVS2008なんだけど、誰か突破方法に心当たりありません?
属性とかスタイルシートとかでやってんじゃねーの そのプロパティとやらを書いてみろよ
JavaScriptっつーか、HTML DOMな StyleプロパティまではWinFormでもサポートしてるから そこにzoomの設定つけたしゃいい
だって
>>260 はコントロールの話じゃなくてHTMLのビジビリティの話なんだもんっほしみ
さすが学生^^
俺はそのWebBrowserコントロールのClientSizeをいじればいいだけの話に思えたんだけど、違うんだろうなあ。
よくわからんがOperaの拡大縮小みたいなかんじ?
ディスプレイが2台ある状態でdualviewかcloneか片方のディスプレイのみ利用の切り替えと それぞれのディスプレイの解像度を変更したいのですが、どうしてもやりかたがわかりません。 とりあえず解像度だけでも変更してみようと調べました。 DirectXのSDKをインストールしてDirectDrawを使って以下のコードを実行したところメインディスプレイの解像度が変わりましたが DualViewになっている場合セカンダリディスプレイはNo signalになってしまいます・・・ セカンダリディスプレイの解像度を変更する方法がわかりません。 Microsoft.DirectX.DirectDraw.Device device; device = new Microsoft.DirectX.DirectDraw.Device(); device.SetCooperativeLevel(this, Microsoft.DirectX.DirectDraw.CooperativeLevelFlags.Normal); device.SetDisplayMode(800, 600, 32, 0, false); どなたか助言お願いします。
解像度は ChangeDisplaySettingsEx() でいけるだろ。
型名とかに日本語使ってますか?
別の言語だったかで文字コードの違うソースコード作っちゃって、リンクで エラー起こして以降、多バイトコードで識別子は書かないと心に決めてる。 あと、タイプミスが思いのほか多いんだアレ。てにおはとか。
すっごい関係ないが てにをは だよ
手爾遠波
277 :
271 :2009/09/12(土) 14:49:37
>>272 いけました!!ありがとうございます。
後はデュアルディスプレイ・クローン・一つのディスプレイのみの設定の変更です・・・
なにか方法ありますか?
>>273 IMEの変換とインテリセンスの親和性が最悪じゃない?
Migemoのアドインとかあればましかもしれんが
初歩的なことですがサブクラスaをメンバとして持つAからA1というオブジェクトインスタンスを作成しました aで定義したメソッドやプロパティにA1からアクセスできません aの内部でもAでもpulicは設定したんですが・・・ なんか勘違いしてますか?
>>279 日本語で書け、と言われる前に質問を推敲したほうがいいんじゃないの?
しかし、そんな日本語で他人に通じると思ってる神経が理解できん。
言葉の使い方に自信がないのなら、同じ事を複数の別の言い方で表現しておくとか、
馬鹿は馬鹿なりに少しは工夫しようよ。
>>279 Dotfuscatorを通したようなクラスでも作っているんだろうか。
public class A
{
public a a1 = new a();
public class a
{
public void f() { }
}
static void Main(string[] args)
{
A A1 = new A();
A1.a1.f();
}
}
>>281 こんな感じですまさに
A1.a1.f();
これができないんです。
できないわけがないですよね?
そもそもできないのがあたりまえかと思ってしまって
もういちどチェックしてみます。
>>282 コンパイルエラーならメッセージをよく確認する。
質問するときはエラーメッセージもアップ。
内部クラスをpublicにしてないという話だと思うけど、
他にはstaticなメンバーを参照経由で呼び出そうとしているなど他の可能性はある。
どれかはエラーメッセージを見れば分かる。
>>282 public class Outer
{
public class Inner
{
public static void f() { }
public void g() { }
}
public Inner innerObj = new Inner();
static void Main(string[] args)
{
Outer outerObj = new Outer();
outerObj.innerObj.g();
Outer.Inner.f();
}
}
ふらっとでやれ。
>>283 エラーメッセージはアセンブリに対する参照を設定しろと言われました
今チェックしています
>>284 ごもっともでした
内部クラスをpublicにしたらガイドライン違反だよ
http://support.microsoft.com/default.aspx/kb/308216/ja ここのソースの中に
ChangeDisplaySettingsEx((LPSTR)DisplayDevice.DeviceName,
&defaultMode, NULL, CDS_NORESET|CDS_UPDATEREGISTRY, NULL);
// A second call to ChangeDisplaySettings updates the monitor.
ChangeDisplaySettings(NULL, 0);
とあるのですが、C#ではChangeDisplaySettingsの第一引数に
通常DEVMODEの構造体を受け渡すところを上記のようにnullにすると
エラー1'ConsoleApplication1.Program.ChangeDisplaySettings
(ref ConsoleApplication1.Program.DEVMODE, int)' に最も適している
オーバーロード メソッドには無効な引数がいくつか含まれています。
というエラーが出てしまいます・・・ nullを受け渡したいのですがどうしたらいいですか?
適当なnull渡せるオーバーロードを書く
IntPtrとして宣言してIntPtr.Zeroを渡す
DEVMODEをクラスで定義して値渡しすりゃいいんじゃないの?
エスパーすると多分、自力で定義して渡したら? と言っていると思うけど、リセットのためのNULLを渡したいという話なので的外れだね。
>>295 エスパーってチミが無知なだけだと思うけど。
頭大丈夫かよ。
あ、こっちが的外れだったか、すまん。
フリーソフトで出回っているYouTubeのダウンローダが使い辛いので 自分専用のダウンローダを作ろうとしています。 やりたい事は、検索キーワードを入力してヒットする動画のうち 埋め込みタグが禁止されていない物は全て丸ごとダウンロードできるものを 作りたいと思っています。 そこで質問なのですがYouTubeから動画をダウンロードするにはどうすればよいでしょか? 参考になるサイトがあれば教えてください。
>>298 来年1月1日以降に作って発表するといいと思うよ
300 :
デフォルトの名無しさん :2009/09/13(日) 18:34:40
(1)のtreeview から(2)のように stringの配列を受け取るにはどう処理すれば良いでしょうか? 階層の深さは何段になるかわからない環境です。 (1) foo ├─bar │ └─hoge ├─bar2 └─bar3 ├─hoge2 └─hoge3 (2) foo\bar\hoge foo\bar2 foo\bar3\ foo\bar3\hoge2 foo\bar3\hoge3
再帰的な処理にすれば簡単だろうが
barは取らないのにbar3は取るとか謎仕様だな
>>302 すいません、bar3も取らない形で作りたいです。
再帰的処理で葉が無ければ上に受け渡す 受け取ったものがあればそれを\で連結 超簡単じゃないか
TreeNode.FullPath使えば連結する必要すらない
>>301 >>305 >>306 レスありがとうございます。
結局string[]で返すのは自分には書けませんでしたので
配列を引数にしてそれを再帰で変更するようにすれば
希望通りの動作にできました。
308 :
298 :2009/09/13(日) 20:03:03
>>299 なぜに来年1月1日以降なのでしょうか?
まぁ、作っても自分が欲しい動画を出回っているソフトだと色々と制限があって
使い辛いので自分用に使おうと思ってます。
ってかYouTubeからC#(つか .Net) を使用して動画をダウンロードする方法はありますか?
FLV ⇒ mpg( or AVI)形式に自動変換した上でDLしたいと思っています。
来年1月1日から特許出願したらいいとおもうよ
他の言語でできるならC#でもできる やり方はスレ違い それくらい自分で調べられないなら無理
>>309 もう既に色々あるしwネタだろうけどw
つかマジで出回ってるYouTubeのダウンローダー宣伝が入ってたり
遅かったりマジで使い辛いんだよね〜
教えて頂戴
そういったの開発しているところがオープンソースだったらもらってくればいいんじゃないの
>FLV ⇒ mpg( or AVI)形式に自動変換した上でDLしたい えっ
>>312 だから教えて頂戴と。
出回ってるフリーソフトよりも遥かに使い勝手のいいものを作るから
やり方を教えろって、ソースまで出せって事なんだろうな
ヒントを教えて頂戴 例えばSystem.IO.FileStreem とかね
System.IO.FileStreem System.IO.FileStreem
Streemワロタw
Streeeeeeeeeeem
【利用環境】 .net3.5、WinXPPro、VS2008Proの環境で開発しています。 利用環境は主に、.net3.5、Win2008 or WinVistaを想定しています。 【質問内容】 C#で、以下の機能を実現するには、どうしたらいいでしょうか? tp://www.bohyoh.com/CandCPP/FAQ/FAQ00108.html 順列組み合わせを出力する機能です。これ関連の、クラスがあれば教えてください。
>>323 VC/CRTのalgorithm読んでpermutation関係を移植する。
326 :
323 :2009/09/14(月) 00:08:49
実はすでに自分でコーディングしたものはあるんですよ。 問題なく動いていますが、新しいプログラムを作成する際に、既存のものがあれば、活用したいと思ったのです。 その方が何かと助かると思っていたので…… しかし、なさそうでしたら、今まで通り、自作の物を使用します。 どうもありがとうございました。
順列生成はわりかし単純だで、俺も昔アルゴリズム辞典とかを読んで理解できた でも組み合わせの効率的生成はnext_combination.cのソース見ても理解できなかった なにが言いたいかというと、やっぱそういうのは標準ライブラリに入れといてほしいよね
>>327 順列生成なんて簡単でしょ?と思って見てきたけど、んー…こりゃ難しい。
直感だけど再帰っぽくなりそう
勉強がてら作ってみた class Permutation { public static IEnumerable<int[]> GetPermutationSet(int[] array) { return GetPermutationSet(new List<int>(array), new List<int>()); } //とりあえず何も考えずにListに private static IEnumerable<int[]> GetPermutationSet(List<int> left, List<int> permutation) { if (left.Count == 0) yield return permutation.ToArray(); for (int i = 0; i < left.Count; i++) { int element = left[i]; left.RemoveAt(i); permutation.Add(element); foreach (var tItem in GetPermutationSet(left, permutation)) yield return tItem; left.Insert(i, element); permutation.RemoveAt(permutation.Count - 1); } } }
順列って俺もしらんかったが、とりあえずすべての組み合わせのことを言うのか? すべてのデータが違うというのを前提として、文字列でやると private void func() { List<string> ret = new List<string>(); junretsu("あいうえお", "", ret); foreach (string s in ret) { Console.WriteLine(s); } } private void junretsu(string str, string junretsustr, List<string> ret) { if (str.Length == 1) ret.Add(junretsustr + str); else foreach (char c in str) { junretsu(string.Join("", str.Split(c)), junretsustr + c, ret); } } こんな感じのこと?
>>331 全てのデータが違う前提だとそうだけど、同じデータが含まれる場合も考慮するのが普通。
例えば {1,1,2} に対する並び替えで、「組み合わせ」と言ったら {1,1,2}, {1,2,1}, {2,1,1} の3通りだけど
「順列」と言ったら {1,1,2}, {1,2,1}, {1,1,2}, {1,2,1}, {2,1,1}, {2,1,1} の6通り(2つの1をそれぞれ別ものとみなす)。
組み合わせは{1,1,2}なら {1}{2} {1,1}{1,2} {1,1,2} じゃないか? で、順列なら3!/1!2!=6/2=3コあって {1,1,2}{1,2,1}{2,1,1} だよ
順列・組み合わせって中三の内容だったぞ俺の時代はw 今は高校でもやらんの? 知らないってことはないはずだと思うが。
こういう発言から学歴論争に発展する
義務教育レベルの話に学歴も糞もないだろ真面目な話。 俺だって中学なんて田舎の公立校だよ。
今は数学I・A(高校)なのかな? 多分文系でもやってると思うけど、高校数学は10年以上縁がないので違ってるかもしれん
オレの時台は高校で選択だったから同年代の半数は順列組み合わせを知らない
340 :
334 :2009/09/14(月) 21:45:00
え、俺が間違ってた?
うん
342 :
334 :2009/09/14(月) 22:03:07
うそーん 一応現役なのにorz でも332はあからさまに間違ってるよね??
うん
>>334 それは組み合わせじゃなくて
{∅} と合わせて冪集合。
俺の知る限り高校じゃ習わん。
順列はあってる
1個選ぶ組合せ 2個選ぶ組合せ 3個選ぶ組合せ っていうつもりで書いたんだがそれでも間違ってる? てか、激しく論点がずれてしまった この辺で自重します
348 :
347 :2009/09/15(火) 08:07:33
arimasen
GetSystem…
SystemInformation..::.Border3DSize
それは違うだろう
幅のことだろう。 (form.Width - form.ClientSize.Width) / 2 でいいんじゃね。
組み合わせは、3C2=3通りだろ。 高校の時にやったぞ。 ちなみに年齢は30のおっさんだ。 たぶん1つ上の年代までは教育課程が違ってやってないかもしれない。 数T、U、V、A、B、C世代な。
それも組み合わせの一つ
さすがに普通科の理系コースで高校卒業までに確率統計を一度も習わない、 なんてことはありえんと思うが(ありえるなら日本終わってるだろ) 俺の時代も何故か確率統計ってあまり重要視はされてなかったね。 何だろうね。 個人的には微積はともかく線形代数より役に立つ場面が多いと思うけど。
じゃあフォームのleftとクライアントのleftで左枠の幅を求めてから引けばいい
>>359 ClientRectangleの座標値はクライアント座標だから左端は常に0
>>357 30代の俺の代ですら、受験で稼げない確統なんざ理系選抜クラスでも選択科目扱いだった
今なんてなおさらでしょ
>>360 PointToScreen使えばクライアント座標をデスクトップ座標に変換できる
>>357 ありえるし、すでに終わってる
それが授業のカリキュラムを大幅に削減したゆとり教育の結果
学力が下がって企業の開発力が落ちてこのザマ
工業製品が台湾や韓国にどんどん追い越されてる
>>357 確率は数Aでやるけど統計は習わないはず。
もちろん進学校は別。
来年以降高校の教育課程で統計を本格的に入れるという話を聞いた。
数字カードの組み合わせ問題はゆとり教育時代でも小学校で習うし中学入試にも出る。
確率統計が後回しにされるのは、文系で統計学をやる時に積分を沢山使うから
それを先に学ばせないと授業にならないからだそうだ。
俺理系で文系の人から聞いた話だから、嘘ついてたらすまん。
初心者以下の質問のような気がしますが C#3.0って、VisualStudio2008以上でないと開発に使えないのですか? あと.NET以外でC#を使うことはできないのですか?
C#のバージョン(1.x,2.0,3.0とか)と、 VisualStudio(VisualC#)のバージョン(VisualStudio2005とか、VisualC#2008とか)と、 .NET Frameworkのバージョン(2.0とか3.0とか)の違いがいまいちわかりません。 どなたかわかりやすく説明していただけませんか? たとえば、C#3.0から追加になったLINQの機能を、VisualStudio2005でソースを書くとどうなりますか? C#3.0はVisualStudio2008がサポートしていると聞いたのですが、動かなかったりコンパイルエラーになったりするのでしょうか?
VSのバージョンと使用可能言語・開発可能ターゲットは以下の通り VS2002: C#1.0 .NET1.0 VS2003: C#1.1 .NET1.1 VS2005: C#2.0 .NET2.0 ※.NET3.0用の拡張があったけど今はもうないはず VS2008: C#3.0 .NET2.0/.NET3.0/NET3.5 LINQはC#3.0の機能なのでVS2008でしか使えない ただし、LINQは基本的に.NET3.5のライブラリを使ってるので 開発ターゲットが.NET2.0/.NET3.0の場合は普通には使えない 違いと一口に言われても困るな
>>367 VS2005 - C# 2.0
VS2008 - C# 3.0
VS2010 - C# 4.0
といった感じでいいんでないかな。
.NET Frameworkのバージョンは0.5とかSP1とか出てきて面倒くさいので考えない方向で。
VS2005でLinqのコードを書くとコンパイルエラーになります。
VS2002 -> 1.0 VS2003 -> 1.1 VS2005 -> 2.0 VS2005 + Extention -> 3.0(2.0) VS2008 -> 2.0、3.0(2.0)、3.5(2.0、3.0)
>>368 >>369 ありがとうございます。
もうひとつ質問なのですが、
1つのパソコンに異なるバージョンのVisualStudioを共存させるのはよくないのでしょうか?
会社で使うのが主に旧バージョンなので、
自宅PCには会社と同じ環境用の旧バージョンと自己学習用の新バージョンを入れたいと思っているのですが
問題ない。
複数の環境を作るためにVirtualPCを無料で配布しているんです
いあ普通に共存できるし。
そういう問題じゃないんだよ
どういう問題だよ。
趣味グラマにゃ関係ねえわなwww
いや仮想環境はいいぞ
むしろパソヲタ的な趣味グラマの方が意味なく(おまけにライセンス的にヤバい方法で) VMで遊んでる気もしますが。
趣味グラマ(初心者)で意味なくVMで遊んでるけど ライセンス的にやばいことはしないぞw win7(RC)入れて見たり、linuxで遊んでるだけだ
仮想環境って、2台としてカウントされるのだろうか…
職業グラマ(上級者)だけどVMはLinux・BSD開発に使ってる Win開発は実機
HDDイメージをDVDに焼いておけば簡単に初期状態に戻せるから重宝してるよ クリーンな状態でテストしたいからね
>>384 そういう突っ込みを入れさせるために書いといた
まあちょっとした遊び心
涙目。
後釣り宣言ほど恥ずかしいものはないな
まあちょっとした遊び心
釣れた釣れた
MSDNで開発用のライセンス貰ってVMで動かしてる。
俺はDreamSparkでもらったやつをホストOSにして それで余ったやつをゲストOSにしてる
大学生羨ましい
ちなみに専門学校です しかも情報系ではありません
なら私は高専生低学年です しかも情報系ではありません
そうですか。
いいから寝ろ
仕事中
いいから仕事しろ
おはよう、おまいら
いいから眠らせろ
2005と2008を共存させるのビビッて仮想環境で 開発しようとか、典型的なおっさんプログラマーだろうなw
えっ
2005のupdateがきて関連付けを2005にされたときは、ふざけるなと思った
エスケープ文字についての質問です。 \nは改行、\rは復帰だそうですが、復帰とはどういう意味ですか? また、サンプルソースで改行を\r\nとしていたのですが、ただの\nと何が違うのですか?
C#とは関係ない 「改行コード」でぐぐれ
放送大学の学籍番号キター
>>405 「\r 復帰」で検索すればすぐにわかるのに
まあ、別に非難するつもりはないけど
>>405 みたいな話でいちいち人に聞いてたら学習効率悪すぎるな。
>>405 は自分で自分の首を絞めてることに気づいた方がいいね。
無理強いはしないけど。
ゆとり
TransportBindingElement.MaxReceivedMessageSizeで WCFで受信する最大のメッセージサイズを指定しているのですが、 最大値より大きなメッセージを受信した時に 「最大値を増やすことを検討して下さい」 といった感じのログを残したいと考えています。 メッセージを受信する側で 「最大値より大きいメッセージを受信し、リクエストを拒否した」 という事を検出するにはどうすれば良いのでしょうか?
Visual C# 2008 Express Editionを使っています。 スタートアップ時、前回終了時のプロジェクトがそのまま開けるようにできる設定方法はないでしょうか?
>>414 ありがとうございます。見逃していました。
「ツール」→「オプション」→【全ての設定を表示】→『スタートアップ』の手順で、
【全ての設定を表示】のチェックを見逃していたため、気づきませんでした。
全ての設定を表示って邪魔くさいよな。
Expressのその機能はかえって初心者を混乱させてるよな 何度それに起因する質問を見たことか
そう? 「まず落ち着いて状況をよく見る」という、プログラマに不可欠な能力の欠如を 初心者に思い知らせる、いい薬になってると思うけど。 個人的には、そんな「よく見れば誰でもわかる」プログラムの設定程度で 躓く人間にまともなプログラムなんて書けっこないと思う。
不明瞭な機能をスキルに対するリトマス試験紙とか言う馬鹿がまだいるとは
一通りオプションを眺めるとかHELPを読むとかしろよ ど素人じゃないんだからさ
ど素人なんだろ。
あのオプションはチェックが入った状態が逆ならまだましな気がする。 すべて表示、じゃなくて一部隠す、にするということね。
Express以外は、チェック自体がないのか?
項目大杉! って文句付けた奴がいるんだろうな。
>>423 無い。
つーかそもそもExpressEdition以外はC#専用ってわけじゃないしね。
同じExpressEditionでもC++もこのオプション無い。
チェックボックスは上位エディションでも設定で出せるよ
427 :
デフォルトの名無しさん :2009/09/20(日) 18:49:32
テキストボックスに日付を入力させて、 もし、値がおかしければ、Leave時にそのテキストボックスの背景色を赤にしたいと思っています。 しかし、Leave時のactiveコントロールは次のタブオーダーのコントロールに変わってしまっていますし、 どうやって、Leaveされたコントロールを取得したらいいのか分かりません。 ご存知の方、教えてください。
Validateとかねーの?
テキストボックスのイベントハンドラじゃダメなの
TextBox.Validatedイベントを使う 見た目も任せていいならErrorProviderを使うのが楽
432 :
デフォルトの名無しさん :2009/09/20(日) 21:09:13
>>427 です。
お返事ありがとうございます。
Validatedのイベントに記述します。
このチェックを共通サブルーチンのようにし、
複数の日付項目のValidatedイベントから呼ぶようにしたいと思っています。
もしエラーなら、その該当のコントロールの背景色を変えたいのですが、
どのコントロールから呼ばれたかを取り出して、
そのコントロールの背景色を変えるにはどうしたらいいでしょうか。
senderの中身を見ても、コントロールの種類だけしか見つかりません。
たびたびで申し訳ないですが
よろしくお願いします。
キャストしろ
>>432 いやいやValidatedイベントハンドラ(ってかデリゲータ)を一つ用意すればいいだけだから
無駄に分ける必要ないから
ヘルプの EventHandler デリゲートより 「このメソッドの最初のパラメータの型は Object であり、イベントを発生させるインスタンスを参照します。」
>>431 へえ。ErrorProviderなんてあるんだな。
俺ならユーザコントロールでコードを分離してイベントを書くな。
>senderの中身を見ても、コントロールの種類だけしか見つかりません。 ワロタ
438 :
デフォルトの名無しさん :2009/09/21(月) 02:09:39
テキストボックスのマルチラインをtrueにした状態で、 改行をさせないようにするにはどうすればいいですか? マルチラインをtrueにしているのは、テキストボックスの高さを少し上げたかったからであり、 複数行入れたいわけではありません。 何かテクニックがあれば教えてください・・・!
テキストボックスの高さを普通に上げればいいじゃない
そういうスタイルもあるけどコピペに対応できないから 入力時にチェックしてはじいたら?
RichTextBox使ってMultiLine=falseにしたら?
443 :
デフォルトの名無しさん :2009/09/22(火) 08:42:11
>>441 リッチテキストボックスとテキストボックスは外観がちがうんだね。同じフィックスド3Dでも。
同じならいいのに。
C# .NETアプリケーション開発 徹底攻略 て本に、LOADイベントはInitializeComponent完了前、 正確にはResumeLayout直後に発生する事があるって書いてあるんだが そんなことホントにあるのか? ちょっと考えられないってかありえない気がするんだが。 Newするだけで表示しなかったらどうなるの?とか疑問だらけだ。 どうもこの本は、正しく理解してない開発者が多いなんて書きながら、 あちこちに間違いとか思い込みとか極端な例を元にしてる話がある感じで 今ひとつ信用できない。 本自体の方向性は好きなんだが。
イマイチ信用できなくなったきっかけは、非同期処理絡みでいろんなこと書きながら、 実は正しい非同期処理のルールすら理解せずに書いてるから。 思い込みでおかしな動作すると言ってんじゃないかと思ってしまう。
非同期処理では例外は握りつぶされるとか スレッドプールのスレッドでも同様とか 各種Timerクラスとスレッドプールの関係で勘違いしてるとか 文字列連結パフォーマンス関連の不適切な例と説明とか(ここは言いたいことは理解は出来るが) ngenの勘違いした記述とか
C#はパラダイム詰め込みすぎでパラダイム間の共認知が薄れてるきがす
444も447も大体.NETの問題でC#とは直接関係はなさそうだが
>>446 サンクス。
読んでみたけど、うーん、そりゃそんなことしたら呼ばれることはあるわな。
これは当たり前の話だよねー。
気になるのは、そんなおかしなことしてる場合じゃなくて、
普通にあり得るのか?ってことなんだよなー。
例え話としては、
「Loadイベントではまだフォームは表示されていない」に対して、
「そんなことはない、Load内でShowを呼び出したら表示される」
「だからLoad中はまだフォームが表示されていないというのは間違い」
とか言ってるみたいな感じ。
※MDIとかだとまたややこしいは話があったかも知れんがそれはそれ
本を見ると、InitializeComponent完了前にLoadが発生するのは
Vistaで起こりやすい?らしいんだが、どうなんだろう…
>>450 普通にはありえないんじゃない?
OnLoadで初期化をするとか割とありふれたことだから、
そんな現象がありうるのならもっと大騒ぎされてると思う。
俺が検索した限りでは、そんな現象を指摘する情報は見つからない。
個人的にもそんな現象にあたったことはないね。
要するに「可能性があるからできる限りそれに依存しないコードにしましょう」ってことでしょ その本は読んでないから文脈分からんけど
外部 DLL の null 終端されていない文字列を string に変換するにはどうすればいいですか。 以下の方法だとうまくいきませんでした。 struct Hoge { // 文字列(null terminate されてない) IntPtr str; // const char* // 文字列のバイト数 int length; // int } [DllImport("hoge.dll", CharSet = CharSet.Ansi)] extern static IntPtr get_struct(); // 構造体 Hoge のポインタを返す IntPtr p = get_struct(); Hoge hoge = (Hoge)Marshal.PtrToStructure(p, typeof(Hoge)); string s = Marshal.PtrToStringAnsi(hoge.str, (int)hoge.length); // ここで変換がうまくいっていない ちなみに length が正しく文字列のバイト数を格納していることは確認しています。
RtlMoveMemory() で文字数分切り取ればOK。
「うまくいかない」の具体的な事象は?
>>454 試してみます。
>>455 文字がシングルバイトかマルチバイトかにかかわらず文字化けします。
一部だけ?全部? char*はANSI(ASCII/Shift_JIS)の文字列で良いの? たまに違う文字セット使う場合もあるけど 取り敢えずMarshal.CopyでIntPtrをbyte[]に転写して中身調べたらどんな感じ?
>>457 全部です。
Copy すると byte 配列が明らかにおかしいですね。
char* は ANSI で間違っていないのですが、
byte[] に格納されたバイトは ANSI でも Unicode でもなさそうです。
期待する文字列: 太郎
Marshal.Copy(hoge.str, bytes, 0, hoge.length) の結果: {8, 0, 0, 0}
もしかしたら
>>453 とは関係ない部分かもしれないので API 等見直します。
ありがとうございました。
>>452 可能性でいやなんでも可能性はあるぜ?
大体NewしただけでLoadイベントが発生する作りのFormなんて明らかにおかしいわけで。
----引用開始
またLoadイベントは、コンストラクタの完了を待って同期的に呼ばれるのでは、
といったイメージをもたれがちですが、これも間違っています。
Loadイベントは、コンストラクタで実行されるInitializeComponentメソッドが
完了した後に呼ばれます(正確にはデザイナコードのResumeLayoutメソッドで
レイアウト描画が開始された時)。
つまり、InitializeComponentの直後に記述したロジックと、Loadイベントに
記述したロジックは、どちらが先に実行されてもおかしくありません。
この現象は、マルチスレッド、マルチコアCPUの実行パフォーマンスが最適化
されたWindows Vistaでよく起こるようです。
…
どちらの現象も開発者に正しく理解されてないことが多く
…
----引用終了
いややっぱりおかしいって。
多分作りのおかしなアプリ動かして、普通に起こる現象だと勘違いしてる。
>>453 C#側の構造体に[StructLayout(LayoutKind.Sequential)]とか書いてある?
あー、確かにその記述はフォローできないな WinFormなんだからシングルスレッドで同期的に動かされるのは当然だもの
>>459 明らかにおかしいとは思えんね。
Loadの意味的な定義は「ShowまたはShowDialogが呼ばれた」なんだから、
InitializeComponentの中だろうがなんだろうが、それが起これば発生してくれなきゃ
逆にそっちの方が「オカシイ」よ。
発生することがおかしいと言ってるんじゃないよ。 本の記述というか、説明がおかしいと言ってる。 どこかでShowしたらそりゃそのタイミングで発生するのは当たり前。
ついでに言うと、マルチスレッドでの例外はこんな感じだ。 デリゲートの非同期実行での例外に関する記述で、EndInvokeを使用してないコードを書いてて、 ----引用開始 このマルチスレッド例外のしくみは、ほとんどの開発者に正しく理解されていません … つまり別スレッドで起こった例外は、メインスレッドから検知できません。 これはマルチスレッドにおける重要な仕様です。 別スレッドで起こった例外は、何事もなかったかのように例外の起こったスレッドを 終了しています。 … たとえばSocketを使用した非同期通信のしくみを利用した場合、非同期処理の部分は 別スレッドで実行される場合があります。 … 通信エラーが起こっても正しく検知できません。 通常のスレッド処理や、スレッドプールが暗黙的に使われるタイマー処理、デリゲート でも同じことが言えます。 ----引用終了 そりゃEndInvokeとか使ってないんだから当たり前。 それにBegin〜系以外ならちゃんとハンドルされてない例外になるから タイマーとか普通のスレッドとか普通のスレッドプール利用とかでは当てはまらない。 この人のコードは基本的に非同期処理でEnd〜を使ってない。 非同期処理は不安定とか結構文句が書いてあるんだが、 それってちゃんとEnd〜してないからってのと、他にもなんか ぽかやってんじゃないかと思ってしまう。
これに対する対処として書かれてる方法が、 非同期実行する対象のメソッドの先頭で、 InvokeRequired調べてコントロールにInvoke。 いくらなんでも例として不適切だ。
MSの記事のどこかでMS社員が FormsのFormの内部実装でスレッドの見落としがあってバグ採りしたってあったなー コントロールのメソッド一つ一つにInvokeRequiredをガードに入れるという作業
質問です。 Set xls = CreateObject("Excel.Application") xls.Visible = True Set book = xls.Workbooks.Add これをC#で書くと、どんな感じになりますか?
・ExcelをCOM参照すればまあ似たような感じに書ける ・レイトバインドじゃないと嫌なら、C#で記述するのは諦めてVBで書く ・Excelの相手はVBScriptにやらせて、C#からはProcess.StartでそのVBSを起動するだけにする お勧めは3つめ
レイトバインドもできないわけじゃないけど、かなり面倒だわな。
C#4.0待ち
お勧めは、Excel Web Service。
473 :
デフォルトの名無しさん :2009/09/22(火) 22:38:16
Visual Studio 2008 で開発してます。 DataGridViewの一行のデータDataRowに、画面には表示しないバイナリデータや、 ArrayListなどを紐付けたいのですが、 DataRowあるいはDataGridViewに、そういう画面非表示のデータを紐付けて管理するメソッド等ありますか? MFCのCComboBoxのSetItemDataPtr()のようなメソッドです。
そういうのは"バインディング"といって,メソッドとかそんなレベルじゃなくてちゃんとした仕組みがあります
Dictionary<DataRow, T>辺りで別管理した方が楽じゃね?
476 :
473 :2009/09/22(火) 22:57:02
ありがとう。 今はSQLの結果のDataTableをDataGridViewのDataSourceに設定してから、 その1行のデータの一部からバイナリデータやArrayListを作ってDataTableに付加してたが 付加してからBindするようにしてみる。 Dictionaryもちょっと検索してみます。ありがとう
477 :
468 :2009/09/22(火) 23:09:02
ありがとうございます。 COM参照が(自分の中で)一番わかりやすいです。 Excel Web Serviceとやらは初めて聞きました。勉強してみます。
COM参照は正直お勧めできない ReleaseComObject&Missing地獄
>>469 アーリーバインディングが抜けてると思う。
Excelのtlbからアセンブリ作って参照に追加。
お手軽だけどExcelのバージョンアップ時には再ビルド。
まあ、余程の事情(Wordのスペルチェックを呼び出して結果を取りたいとか)
じゃなければ俺も3がお勧め。
>>480 COM使ってレイトバインディングと同じ事をやる技がある。
その場合は、固定の参照設定は使わない。
しかし、生でCOMを使うわけだから自分でマーシャリングとかCOMオブジェクト
の始末とかをやらないとならない。
そんなこと聞いてないんだけど。 > アーリーバインディングが抜けてると思う。 > Excelのtlbからアセンブリ作って参照に追加。 これと、COM 参照の違いは何?
あ、COM参照==アーリーバインディングを意味して書かれてたか。 すまん、読み違えた。
さすがに違うだろ。
487 :
デフォルトの名無しさん :2009/09/23(水) 01:29:34
まじキチ…ユダヤが人工地震を起こすぞ
【緊急情報カクサンよろしく】
ついに来ました。
大きい動きです。250nT超えてきました。ほぼ間違いありません。もう一度言います。
友人、知人、親類縁者、あらゆるつながりを駆使して巨大地震がくることを教えて下さい。
四川地震より大きいのが来る可能性があります。
http://g ★olde★ntam★atama.b★lo★g84.fc2.c★om/
★★★★★危険度MAX★★★★★
★★★★★★★★★★★★★★★★
★千葉、静岡、東京、関東で大地震が起きる可能性が非常に高くなっています★★★
★千葉、静岡、東京、関東で大地震が起きる可能性が非常に高くなっています★★★
★千葉、静岡、東京、関東で大地震が起きる可能性が非常に高くなっています★★★
★千葉、静岡、東京、関東で大地震が起きる可能性が非常に高くなっています★★★
★★★★★★★★★★★★★★★★
★★★★★危険度MAX★★★★★
警告!連休中の21、22、23日が危ない!かも2
http://live24.2ch.net/test/read.cgi/eq/1 ★253494015/
【大気イオン】e-PISCO Part11【また延長】
http://live24.2ch.net/test/read.cgi/eq/1 ★252991726/
本当に地震が来たら、犯人は特権階級全員だということ2
Windows Form 上に ラジオボタン、TextBox(MultiLine)にあるとします。 そしてTextBox上の文字列を選択し、その上の部分にあるラジオボタンの選択を 切り替えた場合にも、TextBox上の選択文字(背景色黒)が解除されない様にするには どうすれば良いでしょうか? TestWindowsForm ●トマト ○きゅうり ○りんご AA【AA】AAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAA ※この【**】の部分を選択した状態で上のラジオボタンの選択を切り替えても 選択状態が解除され無い様にしたいです。
しつこいな
プロパティが上手く使えないんだが… どうしてもメソッドでやってしまう。
>>488 TextBox.HideSelection = false
でOK
495 :
デフォルトの名無しさん :2009/09/24(木) 23:57:07
C# ネイティブ化ツールでお勧めはどっち? (処理速度など) Xenocode Postbuild 2009 for .NET Salamander .NET
なんか期待してるモノと違くね?
C#使っている時点で処理速度はあきらめるしかない
498 :
デフォルトの名無しさん :2009/09/25(金) 00:13:12
速度はやっぱりあきらめるしかないですか・・ 説明に Compile .NET to native executables. eliminating .NET Framework installs って書いてあるから期待したんだけど ildasmとかの難読化がメインかな? このツール
つーか、それなりのハードなら、それほど遅くない。
難読化とインストール時のNgenで十分だろ
GCや型システムのようなものをそのまま残している以上 ネイディブにコンパイルできても速度は代わらない。 GC無くし型システムを変更してしまうともうC#ではない。 javaに対するgcjと同じ流れだよね。 .NETはIOが無い部分のコードを局所的に測定すると分かるけど、 ネイティブと比べてほとんど遜色ないスピードが出ている。 起動から終了まで全体測ると遅くなるけどね。
言語とライブラリの区別はつけような
その突っ込みもズレてね?
そういやそんな気がしてきた
C#ってCなんかに比べてメソッドコール遅くない?
気になるならアセンブリ言語にしとけば?
気になるならC言語にしとけば?
.Netで作ったアプリを Adobe の Flash8 みたくアクティベーション形式にするには どうすれば良いでしょうか? コピーして作ったソフトを使われるのを防ぎたいです。
スレ違い
>>505 Cって・・・当たり前やんけ。
何が言いたいの?
メソッドコールは条件によってだいぶ変わるな。 だが特に遅いことはない。 むしろCとかと比べて遅いのはstatic変数へのアクセスとか、特に参照型メンバなんかへの書き込み。
Directory.GetFilesで得られるstring[]の中に入るファイル名は、 ちゃんと昇順で並んでいるっぽいんですけれど、保障はあるんですかね? 自分でソートする必要があるんでしょうか?
>>513 ドキュメント読めよ。
「返されるファイル名の順序は保証されません。」って書いてある。
なんの保証もないって明記されてなかったか? ファイル作りなおしたりして見てみろ
ううぅ、MSDN見たつもりだったんですが‥‥。 書いてありましたか、どうもすみませんでした。
ファイル名順になっている理由は、NTFSのMFTにはファイル名順で 格納されているからじゃなかったかな?
518 :
デフォルトの名無しさん :2009/09/25(金) 19:16:38
トライアル版でネイティブにコンパイルにしたら .NET Framework入れてない環境でも動いたよ。 欲しいけど高い...
WinPEで動くexeをC#で作りたいけど・・・高い。 htaでいいや。と感じてしまう。
>>511 アプリの起動時にどこかの鯖にアクセスするイメージで大丈夫?
私が思いついたのはそれ位です。
ネットがつながらないと起動もできないアプリ
質問です、すいませんがお願いいたします。 C#については、最近使い始めたところで、正直なところ理解が浅いレベルです。 1.やりたいこと プログラムを実行するとWindowsフォームが起動して、自動的に処理を開始。 処理に問題が無ければ、自動的にWindowsフォームを終了させたいです。 2.問題現象 「ObjectDisposedExceptionはハンドルされませんでした。破棄されたオブジェクトに アクセスできません。オブジェクト名'Form1'です。」というエラーが発生します。 3.やってみたこと 切り分けというか、試行錯誤として下記のことを試してみました。 ・Windowsフォームにボタンを追加し、ボタンが押された場合にCloseメソッドを呼び出し。 ⇒正常に終了できるが、ただ、ボタンをクリックする必要があるため要件を満たさず。 ・this.Close()の代わりにthis.Dispose()を使用 ⇒エラー内容の変化なし。 ・Main関数の中で、Application.Exitを実行。 ⇒Application.Run以降の行が実行されない。 ・Main関数の中で、例外処理を入れ、try-finallyで終了処理を入れてみた。 ⇒エラー内容の変化なし。finally節まで行かない。 4.分からない点/お聞きしたい点 ・エラーを出さずに、自動的にWindowsフォームを終了させる方法が分かりません。 ・サンプルコード等、例になるようなサイトはありますか?「どぼん!の .NET Tips」の サイトを参考に、Closeメソッド等を試してみてました。 ・自動的に処理を実施させたかったので、コンストラクタ内に処理を書いたのですが、 あまり良い書き方ではないのでしょうか?作法などありますか?
523 :
522 :2009/09/26(土) 03:33:04
5.環境 OS: Windows XP SP3 Visual C# 2008 Express Edition 9.0.2 .NET Framework 3.5 SP1 6.コード static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); ←★ここでエラーが出ます。 } namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); //ここに将来的に自動化処理を入れたい this.Close(); } } }
Environment.Exitなら一応終了できる しかしコンストラクタでやったらフォーム表示される前に終わるんだが Shownイベントでやってみたら? 最後呼ぶのはCloseでおk
>>522 フォーム起動後に処理を行うのでフォームのロード後に処理を始める必要がある。
フォームのロード完了時に処理を行う方法は以下の 3 通り。
1. Form1 で OnLoad をオーバーライドする
public Form1() {
InitializeComponent();
}
protected override void OnLoad(EventArgs e) {
base.OnLoad(e);
// 自動化処理
this.Close();
}
2. Form1 のコンストラクタで Load イベントにイベントハンドラを追加する
public Form1() {
InitializeComponent();
this.Load += new EventHandler(Form1_Load);
}
private void Form1_Load(object sender, EventArgs e) {
// 自動化処理
this.Close();
}
3. Form1 のインスタンスの Load イベントにイベントハンドラを追加する
static void Main() {
Form1 form = new Form1();
form.Load += new EventHandler(form_Load);
Application.Run(form);
}
private static void form_Load(object sender, EventArgs e) {
// 自動化処理
((Form1)sender).Close();
}
>>522 実行中にフォームを表示させておきたいなら、
Loadイベントでタイマーで1回だけキックかけるのが一番楽かな。
フォームにキャンセルボタンを付けたいならスレッドがスマート。
表示は最初にApplication.DoEventsでいいよ
それはないわ。
あーごめんLoadでやったら無理だったわ、忘れて
530 :
522 :2009/09/26(土) 08:38:49
皆さんレスありがとうございます。非常に助かりました。
幾つか解法を頂きましたが、スキル不足のため、どれが一番
合っているか判断がつけづらいため、頂いたレスを参考にして、
少し色々と試してみることにします。
>>524 Shownイベント、ぐぐって見ました。なるほど楽に実装できるかも
しれませんね。
>>525 ソースコードまで書いていただきありがとうございます。
正直なところ、イベントハンドラやオーバーロード自体の扱いに
あまり慣れていないので、これを機に、頂いたソースを元にして
色々と試してみたいと思います。
>>526 すいません、526さん=529さんですか?そうであれば、実際に
試していただくところまでやっていただきありがとうございました。
>>527 Application.DoEventsというのは、イベントが溜まった際に、意識的に
実行させたい時に使うことくらいしか出来ないかと思っていました。
ちょっとどうやって処理するか分からないので参考にさせていただきたいと
思います。
つうかよ、そもそもそれForm作成表示する必要あんのか? コンソールアプリにするかか、 Windowsアプリで単にMainで必要な処理書くだけでいいんじゃないのか?
もし表示する必要あるなら、 BackgroundWorkerを貼り付けてForm_Loadで実行開始 完了イベントでClose
これならキャンセルにも対応させられる
Form1が必要無いように思える Main内で処理してApplication.Runを使わずに自動的に終わることもできる
>>531 、534
正直おっしゃるとおりと思います。実は、作成開始時点で、コンソールアプリにすることも考えました。
ただ、下記の様な理由で、コンソールアプリではなくGUIアプリとして作成することにしました。
開発動機が自身の勉強目的でGUIアプリが作りたい!というところから来ているのかもしれません。
・C#/Windows GUIプログラムの勉強ができる。
・ユーザ毎に入力すべきパラメータが異なり、その部分はGUIにしてユービリティを向上したかった。
・既にコーディング済みのソースを再利用したい。
また、冗長になり、焦点がぼけてしまうかとかと思い、
>>522 では省いたのですが以下の様な
完成品を目指しています。「下記3の項目以外」は既にコーディング/動作確認も完了しているため、
>>522 では下記3の項目のみ質問させて頂きました。省かずに記述した方が良かったですかね・・・。
1.アプリを起動するとWEBページに自動的にアクセス
2.ID/パスワードなど幾つかの設定済みパラメータを自動送信し、処理を行う(実行状況をフォーム上で表示)
3.処理が正常に完了した場合はユーザがOKボタンを押すことなく自動的に終了する
4.パラメータが間違っているなど異常な場合のみ、フォーム上でパラメータ設定変更/保存をユーザにさせる
5.2を手動で実行することも可能
皆さんのレスを頂いてから、Main内の処理(特にフォームの扱い)について勉強が必要かなと思いました。
完了イベントを自動で行う機能追加をプラスすると
>>532 さんの実装が一番理想に近いのかもしれません。
こうした方が、よりよい実装じゃないかとアドバイス頂けるのは正直参考になり有りがたいです。
Shown でやればいいだけだな。
もしくはロードでControl.BeginInvokeとかな
設定用のとプロセス分けることを考える
539 :
522 :2009/09/26(土) 11:08:52
結局幾つか試してみて下記のようにShownイベントを追加する事にしました。 みなさん、レスありがとうございました、本当に助かりました。 static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Shown(object sender, EventArgs e) { // 自動化処理を記述 if(//自動化処理結果がOK){ this.Close(); } } } }
ListViewを2つ用意して、同じContextMenuStripを起動していろいろ処理をしたいのですが、 1)listView1.ContextMenuStrip = contextMenuStrip1; listView2.ContextMenuStrip = contextMenuStrip1; 2)contextMenuStrip1にはtoolStripMenuItem1があり 3)toolStripMenuItem1_Click()で ListView parentListView = (ListView)((ContextMenuStrip)(((ToolStripMenuItem)sender).Owner)).SourceControl; としてメニューがクリックされたときのListViewを識別します。 4)普通にtoolStripMenuItem1をクリックすると3)のparentListViewはlistView1またはlistView2が正しくセットされていますが 5)listView1、listView2のダブルクリックイベントでtoolStripMenuItem1.PerformClick()をすると 3)ではparentListViewはNULLになってしまいます。 デバッグするとcontextMenuStrip1_Openingイベントも通らないので当然の気がしますが、 なんとかダブルクリックしたListViewを知る方法は無いでしょうか?
Click か DoubleClick イベントでどこかに設定しとけばいいんじゃね?
最近初心者級の質問が増えたな
>>541 さんくす
ダブルクリック時にprivate変数に退避しておくことにしました。
せっかくSourceControlなんていうプロパティがあるのでなんとかだませないかなと思ったのですが。
今更ながらPropertyGridって便利だねする 初期処理の重いアプリの外観の細かいところを見ながら調節したり プロパティがどういう動作するのか試したいときに なんでもアプリ起動させなくていいから助かる
Shownイベントで記述する人が多いんだな。 通常はLoadイベントでやってたよ。
プログレスバーとかラベル表示出すために Shown 使ってる。 Load では出せないと思い込んでいるが、試したことないな。
表示前と表示後で使い分けるだけでしょ 普通はこっちとかじゃなくて処理に応じて考える
だね
コンストラクタとLoadの使い分けがよくわからない
コントロールを触るようなコードはLoadに書くのが確実 他は全部コンストラクタ
WindowsForm上で右クリックをした時に メニューを表示させるにはどういうコントロールを使った方がいいのでしょうか?
ContextMenuStrip
ContextMenuStrip クラス
ちょっと調べりゃわかるようなことを聞く奴って精神分析の対象にしか思えん。 ひょっとしてMって奴? 叩かれたいのかな。
ちょっと調べれば分かるようなことだから聞かれるんでそ
え?
ちょっと調べる=2chで聞く
調べずに聞くw
ネットで情報収集=2chで聞く
職場とかでコミュニケーションの一環としてどうでもいいこと軽く聞いただけで キレる人っているよね。 そうだね、俺嫌われてるね。
そーかそーか、1+1は?とコーヒーブレイクにでも聞いてみろ。 ついに頭イッたかと病院行くことを薦められることうけあい。
ちょっと調べれば分かるだろうが 調べなければ分からない奴はそもそも来ない
お前ら、マ板でやれ
「明日晴れるかねぇ〜?」 「ググれカス」
ググレかすとか自分で調べろとか言う奴はそもそも何でこのスレをみているの?
知識の劣る者を見下すためでしょう
リアルで怒鳴られる前にそれぐらいのマナーは知っとけ
ググったらすぐ分かるようなものを掲示板を使って質問することに合理性を見出せない。 誰かがレスしてくれるまでその問題はお預けになるじゃない。 っていうかそのくらい調べられないでプログラムの道を進んでいくことに不安を覚えてしまう。 そういった優しさからググレカスと言ってるのではないだろうか。
どういう質問をしたらウザがられるかとか、そういう周辺知識を学ぶのもプログラミングの勉強のうちだよ。 一番最初はね。 コードが書けるだけじゃプログラマーにはなれない。対人コミュニケーションが重要。
あんたがウザいよ 人の事を言う前に自分をどうにかしろ
574 :
デフォルトの名無しさん :2009/09/28(月) 12:50:34
しかし伸びないな
ググれカスって書きこむとアドレナリンが出るんだよな
例外処理で catch(AException){ A(); B(); } catch(BException){ A(); C(); } catch(CException){ A(); D(); } 例外時に(DExceptionが加わったとしても)Aは必ず実行するのですが全ての例外にAを書くしかないんですか?
ちなみに例外が無い場合Aは実行しません
全てに書くしかありません ILレベルでは何らかの例外が発生した場合に実行されるfaultブロックというのがありますが C#ではサポートされていません ちなみに,いくら面倒だからって一つのException型を受け取るcatchで受けて その中で型で振り分けたりするのはガイドライン違反になるのでダメです
一つ下のブロックに落として再スローした例外をキャッチしたところでA()を呼ぶとか。 try { try { } catch (AException ex) { B(); throw new Exception(ex); } catch (BException ex) { C(); throw new Exception(ex); } } catch (Exception) { A(); }
なんだそのデタラメコードは。 せめて内側でExceptionでうけてA実行した後 throw; だろ
それもおかしい。
CCRって.NET4.0で統合されるんだったよね? ググってもうまく見つけられん・・・ .NETとか検索しずらいよ(´д`)ママン…
>>576 AとBCDが順不同なら、
try {
// do something
return;
} catch(AException) {
B();
}
A();
そうでなければ、
Actoin handler = A;
try {
// do something
} catch(AException) {
handler += B;
}
handler();
ただし、前者はともかfく、後者はお勧めしない
後者にするくらいなら
>>578 の禁じ手の方が遥かにマシ
ひとつのExceptionにして何が悪い。 困ることなんてないだろう。
困らない人はそりゃ困らないだろうね
catch(Exception ex) { A(); if (ex is AException) { … } else if (ex is BException) { … } else throw ex; } ありそうだけど,これは再スローにならん スタックトレースがクリアされてしまう
throw ex; → throw;
>>581 いいかどうかは別としておかしくはないんじゃないの?
Exceptionでホントにいいかにはよるけれども
もともと
>>579 に対して書いてるんだし。
try
{
try
{
}
catch(Exception)
{
A();
throw;
}
}
catch(AException)
{
B();
}
catch(BException)
{
C();
}
catch(CException)
{
D();
}
な感じだろ。
って思ったけどやっぱりおかしいなってか
>>579 を読み違えてたわ。
591 :
デフォルトの名無しさん :2009/09/28(月) 23:49:23
C#のコンソールのほうで質問です。 名前、年齢を入力して 20歳以上なら〜以下なら〜で作ったのですが 入力が両方から文字の場合エラーを報告するにはどうしたらいいのでしょうか 今はif(name == "" && toshi == "") { Console.W〜えらーだよ } な感じなんですが 空文字で進めるとコンソールのほうからエラーをだしてきます どのように対処したらいいでしょうか・・・
日本語でおk
何のエラーか書け
コンソール「のほう」って何だよ コンソールじゃねえのかよ
消防署のほうから来ました
消防署の方から来ました
ご結婚おめでとうございます。
末永くよろしく
ttp://xy.yu.to/ 寂しい人向け
混む時間帯は人気ありすぎて定員オーバーで入れん
24時間荒れ放題の超カオスな絵チャット
本当の本当に完全無法地帯の絵チャット
(2ちゃんとは比較にならない)
荒しとプログラマーと防衛プログラマーの攻防戦
防衛側が強し、求む強力荒しプログラマー
しかも外国サーバー(イギリス)で管理人は荒し容認
殺人予告すらOKっぽい。ログなんて当然取ってないし
見てないけど絵チャット関係なくね
602 :
601 :2009/09/29(火) 06:33:25
ウイルス仕込まれた
ってそれ
>>509 の犯罪じゃねーか?
はいはい、コピペ乙っと
自作アプリ起動時にlog.txtの作成日時を確認して、当日で無い場合は その古くなったlog.txtを作成日時にリネームして退避し、 新たにlog.txtを生成してそこにログを書きこみたいと思いました。 起動時しか確認しない理由は、処理コストを考えて。 一般的なファイルの更新日時を確認するやり方で無く、作成日時で行うのは、 24時間以上、アプリが再起動されなかった場合を考慮してです。 さて、本題ですが、例えば作成日時が25日のlog.txtをlog_25.txtにリネームして、 新たにlog.txtを作成した場合に、新しいlog.txtの作成日時も25日のままです。 File.GetCreationTime(filePath).Dateで取得しています。 ファイルのタイムスタンプってファイルじゃ無くファイル名に紐付くという そういう性質のものなんでしょうか?
>>604 はじめからlogyyyymmdd.txtってファイル名じゃだめな理由は?
あとlog4netでぐぐると幸せになれるかもしれない。
>>605 ログファイルは、別の運用監視ツールで状況をチェックされる可能性があるので、
一般的にアクティブログのファイル名は一定にするのです。
CF3.5で作っているので、log4netは古すぎてちょっと怖いのです。
CF1.0になんとなく対応しているサンプルは入っていましたが。
log4netは毎回日時をチェックするタイプで、更新日付でチェックするタイプですよね。
今の.NETってDiagnostics.Traceがリリースビルドでも使えるように出来るので、
これをうまく使うと、良い感じでログクラスが使えるかと思ったんですが。
どうやらファイルシステムによっても違うのかも。VistaのNTFSなんですけれど。
毎日0:00にlog.txtが存在するかを確認する。 log.txtがあればリネーム退避する。 ファイルを作る時にlog.txtがあれば書き込み、なければ新規作成して書き込む。 これでいけそうだが。 24時間に1回の処理をコスト高というなら何も言わない。
log4net嫌い。 NLOGだったか、忘れたけどそっちの方がまだいい。 でまあ俺も最初から日付で作りゃいいと思うぞ。
あ悪い読んでなかったわ
う〜ん、でも毎日0:00にアプリが起動しているか分からないし、 0時1分に起動することだってあり得るし。 タスクスケジューラで別処理するほどのことじゃないし。 まぁ、作成日時では無く最終更新日時では上手くいくみたいなので、 最終更新日時でお茶を濁してみます。 毎日、0時をまたいで起動されていたら、ローテーションしなくなっちゃいますけれど。 ログ自体に各行に日付が入っているので、 先頭行を読んで処理したりしても良いんですけれど‥‥
レジストリなど他媒体を使うってのもあり。
ヘッダ行付けるか1行目のログの日付読むのがまあ無難ちゃ無難なんじゃない?
ファイル作る時にヘッダにその日時かいておけば?
みなさん、有難うございます。
レジストリは盲点でした。
他でレジストリ使うなら、ちょこっとローテ履歴を書いちゃいますか。
そうですよね、やっぱりログファイルの中身を読めば済むことですよね。
>>604 のようなファイル生成日時の怪異が疑問だったのです。
まぁ、ファイル本体とジャーナル情報が別だと考えれば、
>>604 も起こりそうですよね。
syshup とばしたらログ切りかえとか 基本日付で作って現在のファイルに対して ln -s logyyyymmdd.txt log.txt とか
はじめまして エラーorz 内容: イントーラの下のほうに、ダウンロードが完了しました。インターネットを切断できます。 って表示されてから数秒後・・・ セットアップ中にエラーが発生しました。 セットアップは以下のコンポーネントをインストールできませんでした: ×Microsoft Visual C# 2008 Express Edition with SP1 - JPN □これらのコンポーネントを後でインストールするために、セットアップへのショートカットをデスクトップに追加します。 と表示されます。 何回も試しましたが、まったく同じ結果です。。。 visual studio c# は前(今より空き容量が少なかったとき)インストールに成功したことが あるので(その後誤ってアンインストール・・・)空き容量の問題ではないと思います。 現在の空き容量は2.8GB どうか解決策などあればお願いします。
OS再インストール
using System; using System.Drawing; using System.Windows.Forms; class MyClass : Form { public static void Main() { MyClass mf = new MyClass(); Application.Run(mf); } MyClass(){ ListBox lb = new ListBox(); lb.Parent = this; lb.Location = new Point(10,10); lb.AllowDrop = true; } } ドラッグ&ドロップ可能なリストボックスを作ろうとしてます。 これだと実行した直後に、「DragDrop登録は成功しませんでした」と 例外エラーが表示されてうまくいきません。 AllowDropをtrueにする以外に何か必要なのでしょうか? どなたか助けてください 初歩的な質問ですみません
プログラムを実行した時 他のプロセスの窓を隠したい(this.Hide())のですが どのように書けばいいんでしょう。調べるにもワードが分からなくて・・・。 他のプロセスに介入するのは始めてです。基本だけでもいいので教えて下さい。 よろしくお願いします。
>>620 ShowWindow() API とかだな。
>>621 調べてみます。ありがとうございました。
>>622 見事に解決しました
ありがとうございます
どういたしまして
C#初心者だけど、コンパイルしたらEXEファイルが出てきました。 EXEってWindowsネイティブでしょ? これでマルチプラットフォームが実現できてるの?
初級レベルのコードならLinux&Monoでもそのままコンパイルできると思うが
Javaなんかjarとかそんなファイルなのにマルチプラットフォームできてるぜ?
Windowsネイティブじゃないよ
その.exeをLinuxに持っていってMonoで動かしてごらん
EXE だけど実体は IL なのよ。 で、実行時にコンパイルされる。
Silverlightなんかdllなどをzipで固めただけのパッケージがmacで動くぜ
そもそも.NETをそういうこともできるように設計しましたってだけで MS自身はクロスプラットフォームなんて目指してねぇぞ。 アセンブリがexeやdllになってるのもWindows上での利便性を考慮してのことだし。
ハードの環境に応じた対応ができるし, そのうち今と全く構造の違うWindowsが出るかもしれないし
windowsで動けば何の問題もないし
636 :
626 :2009/10/01(木) 23:57:09
レス感謝です。
環境がWinしか無くて他は試せませんが、多分動くんですよね。
気になっているのが
>>631 の[EXEだけどIL]ってフレーズ。
EXEはWinが直接開いちゃうからIL読めないはず。
だからEXEを叩いた時、何らかの仕組みによって先にCLRを起動しEXEを読ませるんですよね。
それがどんな仕組み(関連付け?)なのか知りたいんです。
あと、クロスプラットフォームは建前だから
どっか設定変えなきゃWinネイティブなEXEになっちゃうのかな〜と思ったんです。
まぁさすがにそれは無いですよね
ネイティブになれるもんならなってほしいなあ
>>636 .NET Frameworkの初期化処理を呼び出すだけのネイティブコードがEXEに入っていた。
それで、WindowsではEXEファイルとして実行できた。
もっとも、それは過去の話。
そのネイティブコード部分を書き換えるウィルスが流行ったせいで、
(あるいはそれ以前から計画されていたのかも)
今では、Winodwsローダに手が加えられていて、EXEのヘッダを見て.NETアセンブリなら
EXE内のコードを実行せずに直接.NET Frameworkの初期化処理を実行するようになっている。
ちなみに、.NET Frameworkの初期化処理 = mscoree.dllの_CorExeMain。
http://msdn.microsoft.com/ja-jp/library/xh0859k0.aspx
>あるいはそれ以前から計画されていたのかも そのはず。 win2000などでは今でもCLRのブートコードが使用されるが、 XP以降は実行されない。 /platform:x64などでコンパイルするとブートコード自体生成されない。
641 :
626 :2009/10/02(金) 01:58:44
ありがとうございます! まさにこんなのが知りたかったんです! いや〜MS製品って難しいですね。 ちょっとした便利機能の一つ一つが魔法に見えます。 自分でももうちょっと調べてみます。
IEquatable<T>を実装したクラスを==で比較しても Equals(T other)メソッドを実行してくれません。 CodeとNameが同じでもfalseとなってしまいます。 何がおかしいのでしょうか・・・? public override bool Equals(object obj) { if (obj == null) { return false; } return this.Equals(obj as Foo); } public bool Equals(Foo other) { if (other == null) //ここにブレイク張っても止まらない。 { return false; } return this.Code == other.Code && this.Name == other.Name; }
>>643 すみませんが、なぜおかしいのか教えていただけませんか?
いや==演算子オーバーロードしないと自動でそんなことしてくれないから。
>>645 今まで作成したクラスではブレイク張るときちんと止まってくれてました。==はオーバーライドしてません。今も別のプロジェクトのクラスはブレイクします。
まったく同じソースで別のマシンでは止まりました。よくわからなくなってきた。 既にリリース済のプロジェクトも複数ありますがなぜ動いているんでしょ…
EqualsをoverrideするならGetHashCodeもoverrideしよう。 詳細はコードスニペットのequalsで。
動いてるは引数がFooクラスじゃないんだろ。 誰かがMSにバグだって報告してたな。 結果は仕様どおりだったけど。
ありえない。ブレークするのがおかしい。 ==とIEquatable<T>は全く関係ない。 ==演算子をオーバーライドしないと呼ばれるはずがない。どこかで勘違いしてる。
再現可能な状態のシンプルなソースを貼った方がはやそう
不変でないクラスでEqualsやGetHashCodeを実装するのはお勧めしない 辻褄が合わなくなって正しく動かない場合がある
以下のサンプルを見ながら画像を返すWCFサービスを作っています。
http://msdn.microsoft.com/ja-jp/library/cc681221.aspx 画像を返すには戻り値をStreamにするのですが、このStreamは
Closeはしなくても大丈夫なんでしょうか?
クライアントでStreamをCloseしたらサーバ側でもCloseされる?
そもそもMemoryStreamだからCloseしなくても大丈夫?
APIを繰り返し呼んでみてもメモリリークしている様子はないので大丈夫そうなんですが、
いまいち確証が得られず心配です。
ファイルIOなのだからdispose()しなくてはならない。
実際MemoryStreamのDisposeって何もしてないからなw
>>653 動きを勘違いしてるんじゃないか?
これは明らかに、バインディングがビヘイビアか知らんがストリームをバイト列として送信する機能が入ってる。
クライアント側がどうしようが関係ない。
サーバ側では受け取ったストリームを読みだして最後にCloseしてることだろう。
気になるならStreamのラッパー作って返すようにしてブレイクさせてみりゃ多分分かる。
って遅かった
ところでおまえら、スレタイの最初と三番目はシャープじゃ無いのは知ってたかい?
何度繰り返せば気が済むの?その話題
59回
しってるよ あなたがバカなこともしってるよ
Window Formのデザイナって、何を目印にコンテナコントロールをコンテナコントロールと 認識しているの? 聞きたいことは、要するにControlから派生してコンテナを作るには どうしたらいいのかということなんですが。 MSDNのGroupBoxの項を読んでも、特別な属性がついてるわけでも 特別なインターフェイスを実装しているわけでもないようだけど。
ControlStyles.ContainerControl 辺りじゃね
>>665 なるほど、気がつかなかった。
ありがとう。
拡張メソッドの引数で、this T @thisというのが指定してあったのですが、この@thisは 何を表すのでしょうか? @について調べたいのですが検索できない状態です。
>>667 キーワードをエスケープするための表現。
"this"という名前の変数を使いたいときは@thisと書く。
質問なのですが AとBと言う2つのComboBoxを作って Aにアイテム1とアイテム2を入れる、Bにグループ1とグループ2を入れる Aでアイテム1が選択された時は、Bにグループ1だけが表示される様にする 同様にアイテム2が選択された時は、Bにグループ2だけが表示される様にする としたい場合、どうしたらいいのでしょうか?
VC#です、すみません
全く理解できてないな
>>670 むしろそこまで具体的なのに何がどう行えないのかわからない
解決しました、意味不明ですみませんでした
.NETはそんな仕組みになってたのか。知らんかった
677 :
デフォルトの名無しさん :2009/10/06(火) 00:50:53
.asfファイルのプロパティをC#で取得できないでしょうか? エクスプローラで.asfファイルのプロパティを見て概要タブをクリックすると タイトルや画像サイズ等が表示されます。この情報です。 Java等、別の言語でも良いので何か良い方法があれば教えてください。
.asfってなんだっけ
動画
Shell32.dll使えばFolder::DetailsOfで色々取れる
ぷ
MEFのrecompositionってどういう風にして動いてるの?
お世話になってます。 少し前に質問したものです。 いまだに分からないものがあり質問させてください。 @RC2CryptoServiceProvider と AICryptoTransform っていうのは何をしているものなのでしょうか・・・・ 調べても正直わからないのです。 // データ ストリームを暗号変換にリンクするストリームを生成 変数名 変数名 ストリームのモード(書き込み) CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write); これも分からずリンクするというのはどういうことなんでしょうか。
ICryptoTransform ったら、暗号変換を実行するためのインタフェースで、 xxCryptoServiceProvider は、それぞれの ICryptoTransform を得るファクトリ。 ってところまではヘルプ読めるなら分かるとおもうが、読み込みが足りていないんじゃない? んでCryptoStreamのコンストラクタだけど、 暗号化の対象とするストリーム、実行する変換、およびストリームのモードを指定して、 CryptoStream クラスの新しいインスタンスを初期化します。 public CryptoStream( Stream stream, ICryptoTransform transform, CryptoStreamMode mode ) つまりencryptorが暗号変換のオブジェクトで、これを使ってストリームをラップしているだけ。 人様のコメント頼っちゃだめよ。
ファイナライザ内でインスタンスメンバがGCの対象になっているかどうかを知る安全な方法はありますか? class Hoge { object member; ~Hoge() { /* ここでmemberがGC対象になっているかどうかを知りたい */ }
memberを弱参照に入れてmember自身はnull突っ込んで、 GC.WaitForPendingFinalizers してから解放されたか調べる。 というのは駄目かなぁ?
それをファイナライザでやるの?
というか普通にファイナライザで他のオブジェクト触っちゃ駄目
691 :
686 :2009/10/07(水) 00:30:16
static List<WeakReference> weakRefList; class Hoge { public object member; public WeakReference weakRef; ~Hoge() { Console.WriteLine(weakRef.IsAlive); weakRefList.Remove(weakRef); } } static void Test(){ var hoge = new Hoge(); hoge.member = new object(); hoge.weakRef = new WeakReference(hoge.member); weakRefList.Add(hoge.weakRef); } 正しいのかはわかりませんが,それっぽい動作にはなりました。 weakRefはどこかで強参照を確保しておかないとそれ自身がGC対象になってしまってうまくいかないようです。
GCHandleを使うのはどうなの?
693 :
686 :2009/10/07(水) 12:58:30
GCHandleを割り当てると強参照のrootができて常にGCの対象外になってしまう
694 :
686 :2009/10/07(水) 13:06:19
訂正
GCHandleって弱参照にもできたんですね。知りませんでした。
GCHandleなら
>>691 のように参照を確保しておく必要はなさそうです。ありがとうございます。
つかウィーク〜もGCHandleのラッパーだよ。
ようやくユーザーコントロール貼り付けられた MSDNに書いてないことが大杉www
今までC# expressを使っていたんですが、先日C++ expressも入れてみたところ 何故かC#とC++の関数, メソッドのヒントが英語で表示されるようになってしまいました ツール→オプション→国際対応の設定は日本語に設定してあります 元に戻す方法を教えて下さい
それはまずい OSを再インストールするしかない 早く窓から投げ捨てろ
>>697 名前忘れたけどパッチが出てるから探すヨロし
戻りました 迅速なレスありがとうございました
>>702 一応。バグっつーかたぶん翻訳が終わる前に SP を出した
のだと思う。
実際このパッチが出るまで結構かかったからこの判断は
ありがたかったとは思う
704 :
デフォルトの名無しさん :2009/10/08(木) 02:09:10
指定した列挙型のToStringをoverrideするにはどうしたらよいのでしょうか? 目的は public enum test {test1,test2} test.test1.ToString() とした場合、結果をTEST1という風にしたいのです (最初からTEST1,TEST2にしておけといわれればそれまでなんですが コードの書式のポリシーに反するからオーバーライドで解決したいのです)
>>704 無理。
属性を使うとかして、全く別のものを定義してやる必要がある。
>>705 ありがとうございます
むむむ、やはり無理ですか…
属性について色々みてみたのですが
新しいメソッドやクラスの属性化は何となくわかったのですが
既存のクラス、System.Enum.ToStringの属性化が今ひとつわからず…
規約破って実装するかswitch等で判別して一つ一つ置き換えるしかなさそうですね…
ILで無理やりToStringのoverrideを突っ込もうとしたが、 Enumにメソッドは駄目とILレベルでエラーにされた。
たとえば以下のようなクラスがあったとして、 class Person { public string Name; public Person[] Children; } person.Children[i].Children[j].Children[k] … 一番最初の Name == "太郎" な Person を Linq で検索するにはどうしたらよいでしょうか? 世代が一段であれば person.Children.Where(p => p.Name == "太郎").FirstOrDefault() でよいのですが、無限に世代が続く場合がわかりません。 そもそも Linq では無理でしょうか・・
Linqじゃ無理だな 素直に探索メソッド作った方がいいんじゃないの?
まあ再帰的に検索する拡張メソッドを用意すればいいだけだ
自分自身と子孫を連結して返す拡張メソッドを作って、 その結果に対してFirstOrDefaultするしかないな
全子孫のEnumerator返すメソッドでいいんじゃね
俺ならこうするかな IEnumerable<T> TraverseDepthFirst<T>(T node, Func<T, IEnumerable<T>> childrenSelector) IEnumerable<T> TraverseBreadthFirst<T>(T node, Func<T, IEnumerable<T>> childrenSelector) ライセンス気にしなくてもいいなら、探せば見つかるからコピペでも あと、TraverseじゃなくてSelectDescendentsとかでもいいかも
TreeViewの兄弟ノードと子ノードの区別、追加のサンプルありませんか? ググってみても子ノード追加のみでどこにもみあたりません・・・
何を言いたいのか分からん 兄弟なら親ノードのNodesを参照すればいいだけだろ
>>716 言葉足らずですみせん
正確にはDragAndDropでの区別、追加のサンプルです
区別、追加の意味がわからんのだが
いろいろ書いてくれてるけど、全然わかんねーよ。 「何」の「何」が知りたいの? >区別は兄弟ノードの上下 上下の区別って何?位置が知りたいのじゃなくて? >孫ノードの区別になります 意味不明
意訳) ちょっと図解しろよ
そのノードに子ノードがあるかどうかでで判断すればいいんじゃね?
>>723 ユーザにはDrag先のノードの子にするか兄弟にするか選択させたいのです
兄弟のみ子のみなのであれば簡単に実装できるのですが
両方となると判定方法がよくわかりません
- 間もなくVCが新種のDarkBASICに追い抜かれますが 確かにC言語の衰退は避けられない事実です。 - それはどうしてですか 趣味でC言語を体得しようとするプログラマがいないからでしょうね。 - 会社で使ってるのに趣味で使いたくない? そうでしょうね。 そもそもC言語は生産効率向上には寄与しなかったと言う事実があります。 仕様書を噛み砕くだけの、馬耳東風な感覚では愛着が湧かないでしょう。 - 将来的にCプログラマは切り捨てられる? すでに旧来のCプログラマは他の言語に移管してると思います。 職業的にもCでは使えない状況ですし。 - 加速するIT化に対応できないと言うことですか。 他の言語群がCを包括的に上回っています。 - BASIC言語の台頭の可能性はあると思いますか。 あるでしょうね。 言語仕様が簡素化されて生産効率が上がれば可能性はあると思います。 - かつてCはBASICより速い実行コードを生成すると自慢していましたが。 それは過去の幻想でしょうね。
>>724 それってつまり、自分がどういうUIをデザインしたいか分からない
ってことでは?
TreeViewの処理は難しいよ C#でも簡単じゃない その手の処理は海外のコントロールを使用した方が無難 TreeViewとGridのコントロールは金になるからね ググっても出てこないのはその為
うむ、自前フレームワークでTreeViewとGrid作ったがかなり手こずった。 リファクタも2,3回やってやっときれいでまともなものになったな。
くれくれ
>>722 CodeProjectでダウンロードできるぞ。
>>726 ?
>>727 なる程…
そう言った理由があるんですね…
>>730 たしかVBでかかれてるものですよね?
昨日、ダウンロードしてみましたが望みの物と違いました
732 :
デフォルトの名無しさん :2009/10/09(金) 12:42:29
C#で、自分でクラスをつくり、その中にスレッドを走らせます。 そのクラスのなかにイベントを作り、スレッドのなかからそのイベントを発生させるようにしました。 メインフォームからこのクラスのインスタンスを作り、メインフォームの中に、 イベントハンドラを書き、登録、そしれスレッドを走らせます。 このときスレッドのなかからイベントが起こり、メインフォームのイベントハンドラに きて、スレッドで計算したものをメインフォームで表示させています。 このとき、イベントハンドラの処理が重くて、イベントハンドラ中の処理が終わる前に、 スレッドからまたイベントが起きた場合どうなるのでしょうか? ハンドラの処理がおわっていなくてもスレッドがとまるとか、そういうことはありますか? 初歩的質問で申し訳ありませんが、よろしくご教授おねがいいたします。
Control.Invoke/BeginInvokeしたりしない限り、 イベントハンドラが走るスレッドはイベントを起こしたスレッドと同じ。
>>734 おお!目的の物はこれだ〜
わざわざありがとうございます
助かりました
736 :
デフォルトの名無しさん :2009/10/09(金) 15:21:33
csc.exe をコマンドラインから使っています。 このとき、ライブラリパスを指定するオプションは何になりますか?(Javaの -classpath 相当です) やりたいのはライブラリの検索パスにカレントディレクトリを追加することです。 csc /lib:. hello.cs を試したのですが、効果がなさそうでした。
cscはデフォルトでカレントディレクトリのアセンブリも探す つか肝心の参照アセンブリ未指定じゃんかそのコマンドライン
自己レスです。
>>736 csc /r:FooBar.dll helo.cs
でいけました。おさわがせしました。
まあコマンドラインから使うほうが頭どうかしてると言われるとその通りなんですが。
739 :
デフォルトの名無しさん :2009/10/09(金) 19:05:38
>>733 さん
ということは、そのスレッドがイベントを発生した場合、
そのイベントハンドラ中の処理がおわるまで、スレッドは進まないということですね・・・
勉強不測ですいません。ありがとうございます。
実はそのスレッドは、他アプリケーションが出すデータを取得しつづけていて、
あるデータが取得したときにイベントを起こしていたわけですが、
イベントハンドラの処理が重い場合、次のデータと取りこぼしてしまう可能性があるわけですねぇ・・
ということはスレッド内では目的のデータを取得したらQueにつめるとかして、
別スレッドでQueからみていたほうがいいのかな・・・
一般にはキューを使うかな。 イベントを非同期で発行する方法もあるけど、 まあ止めといた方が無難だね。
timerを使わず特定のプロセス開始を知ることは出来ませんか?
なんでタイマーを使わないの?
それより timerを使って特定のプロセス開始を知る というのがどういうことか理解できる人間はエスパーだと思うよ。
そちらさんから俺様のプログラムに知らせるのが筋ってもんでしょう?
>>743 10秒も待てば始まってるんじゃないの?ってことでは?
>732 ぶっちゃけいうと、スレッドを使ったプログラムを作れる段階にいません。 もう少し精進してから本番に取りかからないと死ねます。
>等の文字を>等に変換する関数はありませんか?
748 :
747 :2009/10/10(土) 01:29:10
変換されてしましました &gt;を>に変換する関数を探してます
えいちてぃーてぃーぴーゆーてぃりてぃ
751 :
デフォルトの名無しさん :2009/10/10(土) 06:36:43
delphiからこしてきて不思議に思ったのですが 抽象クラスからしか抽象メソッドは作れないのでしょうか? 継承元Formで抽象メソッドを定義したいのですがコンパイラに怒られてしまいます
>>752 隠蔽というとprivateかな?
以前の作り方として継承元Formを作って
それを継承したFormで実装し忘れ等を無くす為にabstractを使用してました
メソッドの定義を忘れるとコンパイラが教えてくれるので重宝していたのですが…
継承元のメソッドをvirtualで定義するとなると実装し忘れが防げないですよね…
かといって継承元Formを抽象化する事も出来ないし
うーむ…
やりたいことが良く見えないけど。 継承元のフォームは単独でnew出来るようにしたい。 継承先のフォームでは特定のメソッドのoverrideを強制したい。 つうこと??
>>754 > 継承先のフォームでは特定のメソッドのoverrideを強制したい。
そうです
ただ最初の”継承元のフォームは単独でnew出来るようにしたい。”はちょっと違います
上手く説明出来るかわかりませんがこのようにしたいのです
継承先のFormのコントロールのデータが更新されてれば
継承元のFormにあるbtnApply.Enabledを変更するようにします
継承元Form
protected abstract bool isChangeData(); //これを必ず継承先で定義させたい
protected void updateApplyButton(){
btnApply.Enabled = isChangeData();
}
継承先Form
protected abstract bool isChangeData(){
return (data1 != tbxData1.Text 〜)//データ更新の判定処理
}
このやり方のメリットは不必要にコントロールをprotectedにしないくてもいい点
実装し忘れを防げる点
この2点です
しかしisChangeDataが抽象化出来ないのでvirtualで代用すると実装し忘れが防げませんし
btnApplyをprotectedにして継承先Formで触ると設計上変更に弱いのでそれはやめたいのです
>>755 の修正
継承先Form
×protected abstract bool isChangeData(){
○protected override bool isChangeData(){
継承元クラスをabstractにすればabstactなメソッドを作れるはずだけど。 それを避けたい理由が分からない。 abstract public partial class Form2 : Form { public abstract void Hoge();
>>757 あら…、勘違いしてました
partialをアクセス識別子と思ってましたw
仰るとおり、クラスを抽象化して実装できました
ありがとうございます助かりました
それするとデザイナが…
まあ「設計を見直せ」といえばそれまでだな フォームに直接データの処理を書くのが間違い
というかそもそも、.NET 的にはイベントハンドラーは継承&overrideじゃなくて、 デリゲートで Click += hoge でやるのが普通な気が。
デリゲートの+=って使いにくい。 特にデリゲートを取り消すために-=使うのが面倒。
-= は邪悪だと思うけどもなぁ、 取り消す場面ってそんなに多い?
自分より寿命の長いオブジェクトに+=したら 使い終わったら-=しないかぎりメモリリークするよ
寿命が違うケースがそんなに多い?、って話でしょ
むしろ寿命の違わないケースがそんなにあるのか?
フォーム間で共通のイベントのソースがある場合なんか。 フォーム閉じるときにデリゲート切らないとリソース開放できないし。
デザイナで追加したLoadとかClickとかのイベントを いちいち手動で解除してるの?
コントロールの寿命はたいてい親と一致する(親に依存する)から放置して問題ない でも自分より寿命の長いオブジェクトに登録することが全く無いかというとそういうわけでもない そのときは必ず-=しないとメモリリーク
世の中のFlashアプリがメモリリークしまくりな理由がそれだからなぁ<イベントリスナーのremoveし忘れ。 -= を自動でしてもらう仕組みがあった方がいいのかな。 Reaction Framework ではどうなってるんだろう。
まあstaticイベントとか使いまくったらメモリリークの温床になるだろうな WPFには呼び出し対象への参照をWeakReferenceで保持することでGCの対象から外れないようにする WeakEventパターンというのがある
Shownイベントがなかった.net1.1のころは Application.Idleで対応してたな。 あれは-=をこまめにしないといけなかったから面倒だった。 でもまあ、そういうケースは多くはないと思うけど。
>>776 なるほど、理解した
ん?ってことはここの人はみんな-=してんの?
WeakEventパターン使うにしてもコスト高くね?
デリゲートでWeakReferenceを使えればいいんだけどな。
おまえらの言ってる事が1%も理解出来ないのは俺だけでいい
初心者なんだけど教えて! MVCの理念でいくと TextBox1.Text = "hoge"; TextBox2.Text = "foo"; TextBox3.Text = "bar"; ってどうやって実装するの? dataはデータを保持するクラスとして TextBox1.Text = data.hoge; TextBox2.Text = data.foo; TextBox3.Text = data.bar; とFormに書いたら邪道なのかな? 間に何か挟むクラスを作らないと駄目? ワケワカメ><
AがBのイベントにイベントハンドラを登録するとBはAへの参照を持つことになる だからBが生きてる限りはAはGCに回収されない 構造上自然で必要なことなんだけどしばしば問題になる
baka
WeakEventって考え方が最初から用意されてりゃ良かったんだがな。 まあそんな頻繁に困ることはないけど。
ここには天才がいるときいてまいりました 早速質問なんですがソースありきのサードパーティ製のコントロールをdll参照無しに取り込む事は出来ますか? 配布時、単一(.Netの時点で単一はないけれど…)のexeで配布したいと思っています
「取り込む」っていうのは俺様用語じゃないの? それを理解しろというのは天才じゃなくエスパーマターでは
>>785 書き直してみますた!
通常、サードパーティ製のコントロールはdllも配布しないと配布先でアプリが起動できない
でもdll配布したくないよー
サードパーティ製のコントロールのソースあるからプロジェクトに取り込んでdll配布無しでも行ける気がするぞ・・・
よし、ここで聞いてみよう
こうです・・・
ソースあるんだったらプロジェクトにそのソースを全部突っ込めばいける ライセンス違反にならないかどうかちゃんと確認しろよ
>>788 おーさっそくやってみますだー
ありがとー
あ、そだ、もう一つ リソースにdllぶちこんで実行時にアプリフォルダに展開 エセ単一アプリ><って出来る? 起動すら出来ないからdllをリソースから取り出してアプリフォルダに置く事が出来ないっぽいけど・・・
直接参照せずに動的ロードすればいい 設計に工夫が必要だけどできないことはないはず
>>791 えーと、、つまりdll使用してるフォームを使う前にdllを取り出して動的参照するって事かのぉ
どうやるんだろ?
どっかにサンプルないかな?
あっしのヘタレ脳みそじゃどうググればいいのかワケワカメ・・・
ILMerge使えばいいんじゃね? おれは使ったことないからよくわかんないけど
>>793 すごーーーーーーーーーい!!!!!!
チュウしたいぐらい感動した
これよこれ!
これならdll展開しなくてもよさそうじゃん!
やばい、かっこいい、惚れた><
なんかライセンス違反してそうだな、この人w
絶対にしてると思う。
人間としてすでにライセンス違反
つまんないよ
例に海外のコントロールをあげただけで 実際に使っうのは自社のdllじゃーーーーー 配布の時、めんどくさいじゃん 頻繁にupdateするならdllで分けた方がいいけどそうじゃないし つかいいすぎだろ、おまえらw なんでdllをexeに取り込んだら人間失格みたいになるんだよw
何がめんどくさいのか全く分からんから VB6と違ってexeの隣に置くだけだし
>>800 かっこわるいじゃん
dllはモジュール名ついてるし
それをばらばらーってexeのあるフォルダに100個も並べるとかキチガイでしょー
おや? めんどくさい がいつの間にか かっこわるい に変わったぞ?
>>802 マウスでびろろーんって選択して右クリックして圧縮を選ぶのがめんど、、、
いや、コマンドラインでやるから面倒じゃないんだけどね
なんていうか単にかっこわるいから単一で配布したいだけです、ハイ
好きにしろ
.NET出てきたときからSxSは言われ続けてますのでそんなもんです GACにブチこんでもそんなもんです
ILMergeでパックしたら自社ライブラリが外に漏れないっていう恩恵もあるんじゃね?
ILMergeしてできたDLLをさらにILMergeってできるのかな?
ILMergeした後にupxかませば少しは・・・
バイナリ埋め込んでワケワカメになるよりだったら ソースレベルで取り込んだ方がまし
こいつの気持ちは分かるなぁ 単一で配布するのはなんか気持ちいいし .NETにも静的リンクが欲しくなる
ソースレベルで統合したらコンパイルが遅くなってデバッグに支障が出るような気もする
実際ほとんど変わらないけどね
納品先に納品物のexeに付随するアセンブリを勝手に再利用して販売してる人がいて ちょっと困惑してるから笑えないな。 アイコンとかも勝手に再利用。 ああいう物にはコピーライトがないとでも思ってるのか
どこにでもそういう奴はいるな 自アプリからしか使えないようにシリアル設定するとか 色んなパッカーの重ねがけぐらいしか防ぐ手立てがない ハックしてまで使おうとは思わないだろうしな
>>815 それは単に契約違反か契約がいい加減すぎたかのどっちかだろ
>>817 まあそうなんだけど、中小企業同士だとお互いに面倒だからきっちり契約書かわすなんて
しないのが世の中の実態じゃない?
タイマーって1000個ぐらい同時に使っても大丈夫? もしかしてスレッドだからOSによっては制限かかってむりかな?
なんという、もう罵倒してくださいといわんばかりの質問……
せんこどころかまんこつかってもだいじょうぶ
スレッドプールが使われるから大丈夫かもしれないけど気持ち悪すぎる 1000個も必要になる意味が分からない
>>824 そのオブジェクトは何をするオブジェクトですか?
使い回すべき 1000個もあるなら1000個がバラバラに動くわけじゃないだろ?
>>825 えと、定期的にイベントを起こすオブジェクト…おや?
>>826 いわれてみればそうかも
たしかに使い回すのがいい気がしてきた
もうさーバカにはタイマーとかスレッドとか使わすなよ。
Timer1000個って今からなにがおこるんです?
あんなに多くのオブジェクトがあるときは一つの管理用のオブジェクトを作って、 タイマー一個でそこから定期的に各オブジェクトを呼び出すのが普通だと思う。
>>831 そんな気がしてきた
あやうく恐ろしい物を作る所だった…
ふぅ…
どうせ内部じゃ広い意味でイベント一個でやってんだろ?どうでもいいじゃん
インストーラーって物を知らんのか
ILMerge は万能じゃないけどな 数十KBぐらいのものをくっつけるのは楽勝だけど 数百KBの、しかもいろんな参照もってるのをいくつもくっつけるのはたいへん どうせスタートメニューに登録しなきゃらないしインストーラのほうが楽
>>835 の言いたいことがよく理解できんのは俺だけだろうか・・・
んー? 835 じゃないが ILMerge は「やっちゃ駄目」な例外条件が そこそこある。 量が多いとその辺していないか調べる量も増えるし、その バグが発生して認識するまでも遅れるだろうから、835 の いうことは分かるが。
838 :
デフォルトの名無しさん :2009/10/11(日) 05:42:34
みんなDotfuscator Professionalとか使ってる?
>838 つかった。他の難読化ツールも試したがさっくりいけたのはこれだけだった。
>>841 関数などの定義のことならおそらく自動的に作成されたものだから
ライセンスはかかっていない。
っていうか、かかってたらサイトの意味なくならね?
>>842 あ、そういうものなんですか、じゃあパブリックドメインってことで自由に使えるんですね
どうもありがとうございます
一応ライセンスはあるよ 左下のTerms of UseのSection4
PInvokeでコピペできるようなコードの断片にまでライセンス主張されたら コードなんかなーんにも書けなくなっちまうよw
PInvoke、結構適当だから、きちんと自分で書き下ろした方がいいよ。
書き下ろせとまでは言わんが、ちゃんとMSDN英語版の宣言は確認して正しく変換されてるかのチェックは必要だな
宣言は既存のAPIを見て作成されたものだから「作品」になってないので、 著作権はかかってないはず。著作権がかかってない限りサイレンスなどは 無視してもいい。
runasコマンドをc#上から呼ぶときに パスワードを自動で入力したいのですが、 どのように実装したらよいでしょうか? ユーザがパスワードを知らなくても admin権限でインストールされたアプリケーションを ログオンスクリプトで自動でアンインストールしたいのです。
>>850 runasで経由しないで、Process.Start(ProcessStartInfo)で
実行したほうがいいんじゃない?
ProcessStartInfoを使えばユーザ名とパスワードは簡単に指定できる。
ちょっと知識があるユーザなら即座に管理権限のパスワードがバレそうだな
ルナスってなに?
C#のホットキーの実装方法を教えてください ググったけど出来なくて・・・
どういう意味? キーイベント拾いたいだけ?
別ウィンドウにフォーカスがある場合でも、 例えばF1キーが押された時などに特定の処理を呼びたいのですが どうすればいいんでしょう?
別ウィンドウも自アプリならできるがそうじゃないなら無理じゃないかな。
デザイナでホットキーコンポーネントはりつけれ
OSレベルのフックを使えばできるはず .NETのライブラリでかじゃ無理な気がする
簡単なキーフックとかならできるらしい
Win32APIを呼べばなんだってできるけど、C#だとコードが汚くなるんだよなあ。
そんなの、キーフックする部分だけカプセル化すればいいんだから好きにすればヨロし
クラスの参照ってどうやって宣言したらいい? やりたいことは <クラス参照用の型> RefMyClass; RefMyClass = MyClass; //こんな感じでclassその物を入れたい MyClass = new RefMyClass(); こんな事って出来るのかな?
Type 型で宣言しておいて、Activator.CreateInstance() かね。
>>864 実行時に型を切り替えたいって言うんならそれは無理。
素直に Factory パターンとか使って。
コンパイル時にクラス名にエイリアス付けたいだけなら、
using RefMyClass = MyClass;
>>865 今からヘルプみてみます
>>866 Factoryパターンって実体生成の委譲だったっけ?
んと親クラスで子のクラスを知りたくて参照あれば便利だなと思いました
というのもオブジェクトのデシリアライズで型のキャストが必要で
これを親に任せて子は自分のクラスを親に通知と言うような事がしたかったんです
//MyOwnerClass
protected abstruct MyClass RefMyClass();
public void LoadMyClass() {
//省略
(RefMyClass)serializer.Deserialize(fs)//こんな感じでキャストしたい
}
//MyChildClass
protected override RefMyClass(){
return MyChildClass; //ここで自分のクラスを親に通知
}
それはジェネリックでやることじゃねーかなー
>>868 ジェネリックで出来るのかな?
ジェネリックのイメージとしては型の明示的な宣言、だから使う方はキャストしなくていいよぐらいにしか思ってなかったり…
うーん、ちなみにこの場合はどのようにかけばいいのでしょう?
クラス参照が出来ないとなると
子のオブジェクト全てにpublic void LoadMyClass()を実装しないといけなくなるのでちょっとアレかなぁなんて思ってます
代替案があれば知りたいです…
いや、親クラス側に手動で登録用コード書くか、 どうしても自分でコード書きたくないならリフレクション使うのがいいんじゃないかなぁ。
>>870 >いや、親クラス側に手動で登録用コード書くか、
親クラスでこうすると言う事ですか?
public void LoadMyClass() {
if (this is MyChildClass) {
(MyChildClass)serializer.Deserialize(fs)
} else if {this is MyChildClass2} {
(MyChildClass2)serializer.Deserialize(fs)
}
}
すみません
もう少し詳しくお願いします
>>871 まあ、そんなの。
あんまりお勧めしないけど。
リフレクション使えば?
>>872 んーこれだと継承されるたびに親を弄らないといけなくなりますね…
付け忘れてもコンパイラは教えてくれないしちょっと困るかなぁ
リフレクション読んでみました
これでどうやって実装すればいいのでしょう?
ざっと読んでクラスに動的にメソッドを付け加えると理解しました
でもこの理解じゃどう打破するかイメージがわかないです…
デシリアライズ用のメソッドを持つインターフェイスを用意して、 その実装クラスを引数にすればいいんじゃね?
>>874 どういう事でしょう?
ちょっとイメージが沸かないです…
子クラスはstaticでもない自分自身をロードするメソッドを持つの? なんかそもそもが変に感じるんだが
>>876 どこがおかしいのでしょう?
シリアライズ/デシリアライズを親にまかせて
子はそれに必要な情報(この場合はクラス)を教えるだけという設計イメージが変ですか?
>>877 シリアライズの方は簡単なんだけどねぇ。
[Serializable] public class Shape
{
public void Save(Stream stream)
{
var type = this.GetType();
var xs = new XmlSerializer(type);
xs.Serialize(stream, this);
}
}
public class Circle : Shape
{
public double CenterX, CenterY, Radius;
}
デシリアライズ時、型の判定は誰がやるの?
なんでテシリアライズでキャストが要るわけ? キャストしてどう使おうとしてるの? 登録?用メソッドをジェネリックメソッドとして用意すりゃキャスト自体は出来るけど、 それで何がしたいのかさっぱり分からん。
リフレクション一択だろ どこでどう足掻いてもリフレクションが出てくると思う
CRTP
CRTP(笑)で派生クラスの型にキャストはできるがキャストしたところで何の意味もない デシリアライズするときキャストした型でオブジェクトの型が決まると勘違いしてない?
CRTPって何じゃらほい?
ググレカス 検索結果 CRTP(Curiously Reccursive Template Pattern)
class MyClass : MyBase<MyClass> こういうの 基底クラスの型が分かれてしまうのでもう一段上に基底クラスが必要になったりして無駄に複雑になる
質問です。 キャストは重い処理だとよく言われるんですが、 あるインターフェイスを実装したクラスをインターフェイスに暗黙キャストするのと、 オブジェクトやインターフェイスや基底クラス型の参照を実体の型にダウンキャストするのと どっちが遅いんでしょう? キャストは重いと言いつつ、インターフェイスや基底クラスへの暗黙キャストは 気にせず使ってるみたいです。
試せよ。
ダウンキャストの方が高速ですた。
参照型→参照型のキャストはほぼノーコスト 値型→参照型や参照型→値型は重い
また微妙にずれた話を…
小粒でピリリと辛い
894 :
890 :2009/10/12(月) 13:13:28
すまん 参照型間のキャストがが大きくパフォーマンスに影響するような状況なんて普通は考えられない という意味に取ってくれ
ちょっと外出してました
>>878 そうなんですよね
シリアライズは簡単に出来るんです
ただデシリアライズに型が必要なので(受け取ったデータを自分自信に流し込む為)クラス参照を使おうと思ったんですがそれにあうものがなくて…
型の判定は
>>867 のようにクラス参照でまかなおうと思ったわけです
>>880 デシリアライズに限らず単純に親に子の型を知らせたいのです
これが出来ればキャストが必要な実装を親が持つ事が出来るので汎用性が高まるというわけなんですが…
>>881 そのリフレクションで親に子の型をどう知らせるのかがよくわからないのです
参照型→値型は参照型のダウンキャストと同等、最も高速 参照型→基底やインターフェイスはやや遅、特にインターフェイスは結構遅いこともあり 値型→参照型はボクシングなのでさらにプラスで遅い こんなとこかな?
一体どんなやり方でデシリアライズしようとしてんだ?
898 :
890 :2009/10/12(月) 13:18:14
参照型→値型は型変換がオーバーロードされていない限りありえないから問題外
ボックス解除の話だろどう考えても
デシリアライズに型はいらん デシリアライズした時点で実際の型は決まってる 少なくともRefMyClassの派生クラスであることが分かっているんだったらRefMyClassにキャストすれば十分
>>901 それを親で子の型判定をすると
>>871 のようにどうしようもないコードになるわけなんですね…
デシリアライズしたものはobjectのままあつかったらいいんでないかい。 キャストも要らんし。
だからね、キャストするのはその型でその場で何かするためなのさ。 その型で何かする必要ないならキャストなんて必要ない。
暗黙のアップキャストは低速。 明示的なダウンキャストは高速。 なんとも直感的でない動作。
ダウンキャストが高速なのは型に互換があることが自明だからで、 コンパイル時に互換性の確認は済んでるから実際には何もしない。 アップキャストの場合は互換性の確認が実行時に行われる。
何を言ってるの? どう考えても逆だろ。
その理屈なら逆だろ ボックス化が絡む場合にダウンキャストの方が速いのは,アップキャストはヒープ確保が入るから
ボックス化と関係ない参照型でもアップキャストの方が遅いってのがちょっと不思議な動作なわけ。
>>907 だがすまん、アップダウン逆にしてた。
アップキャストが派生クラスから基底クラスだね。
多分.NETではベリファイアでの検証が絶対ではないために、 どっちにしても実行時にチェックが必要だからだろう。 実体の型そのものとのチェックは比較一発だが、基底クラスだと順に遡ったり、 インターフェイスだとインターフェイスマップとの照合が必要だから。
ソースにパスワード認証を組み込む場合 if (textbox1.text == "passwd") messagebox.show("ok"); else application.exit とかだと慣れてる人だとパスワード分かっちゃうのかな?
試しに自分で書いてReflectorでも使ってみればいいじゃない
測ってみたけど参照型間はアップキャストの方がちょっと速かった
ソースに組み込んだりしないんだよ普通は。
class Foo {} class Bar : Foo {} Foo f = (Foo) new Bar(); object o = (object) f; Bar b = (Bar) o; IL_0000: newobj instance void Bar::.ctor() IL_0005: stloc.0 IL_0006: ldloc.0 IL_0007: stloc.1 IL_0008: ldloc.1 IL_0009: castclass Bar IL_000e: pop アップキャストも明示的にキャストを入れてみたが、 castclass が呼ばれるのはダウンキャストの場合だけだった。
>>915 ホントに?
俺が計った時はアップキャストのが遅かったぜ?
念のため、ダウンキャストはオブジェクトの実体の型へのキャストな。
インターフェイスへのキャストは更に遅かった。
まあそんな大差は無いけどな。
クラス階層やインターフェイスの実装数が多いと差が開きそうだった。
まあ当たり前だが。
>>917 うぬう、何か条件が違ったかな?
ちょっといま試せる環境にいないんだよね…
>>919 ildasmでパスワードを検証してる部分を消してilasmでコンパイルし直せばいいじゃん
そもそも何のためのパスワード? 誰のためのパスワード?
まあ破る奴はどうやったって破るからな 技術的な手段を講じてもあんまり意味がない
ライセンスとかだとあんまりいい方法はないぜ? アプリ実行に必須のデータを暗号化して持たせて パスワードで解除するとかな。
起動時に、パスワードが合えばソフトウェアを使用出来るようにしたいのです 本格的にやるのならばPCの固有番号をネットワークアクティベーションとかにするのでしょうけど、 もう少し簡単に、後々変更できなくてもいい代わりにプログラムを覗かれて、 パスワード認証を回避されないようにするにはどうすればいいか・・・と考えてました。
Dotfuscator Proとか使えばいいじゃん 80万程度でお手軽に隠蔽出来るよ リバエン防がないでパスワード隠蔽もなにもないでしょ
dllをリソースに暗号化して埋め込んで、 パスワードで解除してからバイトでロード。 まあ簡単には出来ないよ。
難読化されたところでパスワードを認証してる所を見つけるだけならそんなに難しくない
そのソフトにどのくらいの価値があるかによるよね。 スキルのある人間から防御したいなら、 ロードモジュールがユーザーから覗けたり改変できる限り無理だし、 ど素人のちょっとしたいたずら除けにならちょっとした仕掛けで大丈夫かもしれない。
だからね、パスワードを隠蔽するって方向では根本的にはダメなんだ。 実行に必須の何かをパスワードがないと復元不可能にしないとね。
>>931 パスワード間違えたときの動作が未定義でいいなら確かに有効だね。
Webアプリ作ればいいじゃん 不正アクセスも見つけやすいし 対処しやすいし
>>932 チェックは、暗号化したデータの中にパスワードを埋め込むとか、まあいろんな方法で組み込める。
これはあくまでパスワードが間違ってた時にエラーで止めるためだけの目的ね。
このチェックは別に不正に抜けられても困らないから。
うーむ 言い出しっぺがスキル不足で話について行けない Dotfuscator Pro・・・良いですけど高いですな・・・ 20万くらいまでならこれだけの為にでも投資したんですが;
.Netアプリをネイティブにするツールってどこかにあったよな? あれって何て名前だっけ?
>>934 いやパスワードなりCRCなりをチェックするにしても
偶然一致してしまう可能性を否定できないわけで。
まぁそのくらいで訴訟起こす人は日本には居ないだろうけど。
パスワード付きでzip作って埋め込んで 入力されたパスワードでzip解答できたら有効にする、とか
話ぶった切ってすまない 昨日ホットキーの登録について聞いたものなんだが、 using System.Runtime.InteropServices ; // for DllImport [DllImport("user32.dll")] extern static int RegisterHotKey(IntPtr HWnd, int ID, int MOD_KEY, int KEY); // return : error = 0 [DllImport("user32.dll")] extern static int UnregisterHotKey(IntPtr HWnd, int ID) ; // return : error = 0 private void Form1_Load(object sender, System.EventArgs e) // Regist Hotkey, ALT+A RegisterHotKey(this.Handle, HOTKEY_ID, MOD_ALT, (int)Keys.A) ; private void Form1_Closed(object sender, System.EventArgs e) UnregisterHotKey(this.Handle, HOTKEY_ID) ; // UnRegist Hotkey, protected override void WndProc(ref Message m) base.WndProc(ref m) ; if (m.Msg == WM_HOTKEY) { if ((int)m.WParam == HOTKEY_ID) { MessageBox.Show("Press Hotkey"); } } こうすれば、Alt+Aキーを押したときにメッセージ出るんだが、 例えば、Aキーのみを押したときにメッセージを出すようにするにはどうすればいいのか分かる人居ません?
ローレベルフック使え。
暗号化したデータにハッシュを追加するとかの方法で十分。 パスワードそのものでもまあいいけど、パスワードのハッシュのがまだいいかな。 偶然の一致なんて考える必要はない。
今時少なくとも128ビット以上のハッシュが簡単に使えるんだから、 偶然の一致など確率的に無視できる。 デジタル署名とかと同レベルの信頼性なんだぜ?
アメリカなんかだと被害の事例がなくてもその可能性があるというだけで訴訟起こされるからね。 実際どうなるかはわからないけど怖いから避けたいというのが各社共通の認識かと。
1 / 2^128 の可能性でも「可能性がある」なんてことを認めてたら、 現代社会に信用できるものなんてなくなるんだが。
940です
>>941 さんの言ってる事が分からないのですが、
参考になるサイトとか有りませんでしょうか・・・><;
銀行の暗証番号でさえ4けた14ビット以下だってのに何言ってんだか。 何も信用出来ないよ。 128ビットだって最低ラインで512ビットまで用意されてるし。 プログラムにバグがある可能性の方がはるかに高いわ。
パスワードなんかより明日道歩いてたら上から植木鉢が落ちてきて 頭に当たって死ぬ可能性を心配するべきだな
ちなみに今現在というか今後を含めて政府レベルで推奨されてる安全性がだいたい128ビットだな。 これはもちろん攻撃を受ける前提の話だが。
多分隕石の直撃うけて死ぬ可能性の方が高い。
水を掛けるようなことをいって申し訳ないが、 なんか質問者の意図をそっちのけして回答者同士で勝手に熱くなってない?w
お前の暗号化で地球がヤバイ
何か問題が?
だが、それがいい。
シンイチ、それより交通事故に気をつけろ
ここまでSecuceStringの話しがないとか
SecuceStringの話はどうがんばってもでてこないと思うよ
どういう読み方だそれ。せくーすすとりんぐ?
960 :
957 :2009/10/12(月) 20:35:17
SecureStringだぜごめんね
セキュリストリング
C#やり始めたんだけどメーリングリストとかある? あとどこのコミュニティがおすすめ? ここ以外でお願いします
MSDNフォーラム 非公式でそこそこ人がいるのはわんくまくらいしか知らないけどVB系で質問者も回答者もレベルは高くない
いやいや「わんくま」は幼稚園みたいな名前と雰囲気は好きになれんけど、 公平にいってそんなに低レベルってことはないでしょ。
というか回答者がMSDNフォーラムと大体同じなので
MVPいるしな。
MVPとかどうでもいい 本当の本当に上手いプログラマはMVPなんかとらない。 時間の無駄なのさ。
とれない無能プログラマに限ってそういうんだよな。 MVPの価値を下げてもおまえの価値はあがらねーっつうのw
本物のプログラマはそもそも質問掲示板で回答なんかしない。 時間の無駄なんだよ。
偽者プログラマは黙ってろや
世の中偽者のプログラマだけが本物のプログラムをコーディングしてるんだ
で、ここのプログラマはレベル高いわけ? 質問に対してパパッと適切にソース書いてる人間見た事無いけど
レベルが高いのとすぐにソースを書くのって別に関係ないじゃん
レベル高かったら名を名乗って答える罠 2ちゃんにまともな回答を求める奴が間違い
この思いはソースでしか形にできないの・・・
君の質問の答えは僕が作るプログラムの中で答えようと思う(´・ω・`)
時間の無駄とか言ってる暇があったら さっと回答しちゃった方が速いのが本物のプログラマ
どこでもたいていは調べたらすぐわかる話題ばっかりだからここも含めてそんなに変わらん
サクっとコードで即答できるレベルの質問をここですんな。 そんなの検索エンジンに訊いた方が断然速い。 ここは人間に相談する場所だぞ。
検索エンジンの達人の方、代わりに検索してください
サクッとコードで即答出来ないのは面倒だからとコードかかないくせにw
うんこ
次から名前は名前欄に書いてねうんこさん
すまそ ImageButton objButton = new ImageButton(); objButton.ImageUrl = "img/test.gif"; objButton.Attributes["onmouseout"] = "src='img/test.gif'"; objButton.Attributes["onmouseover"] = "src='img/test2.gif'"; この ImageButton オブジェクトを Table に動的に配置したら、OnMouseOver がきくことはきくんだが、 なぜか最初にマウスを持っていった時に、ステータスバーに"localhost に接続しています"と出て、若干時間がかかる。 これって最初にサーバーに test2.gif を取りに行ってるってこと?? test.gif は ImageUrl プロパティで指定してるから最初に取りに行くけど、これと同じタイミングで取りに行かせる方法はないかな〜? もしお門違いな質問してたらスマソ
987 :
デフォルトの名無しさん :2009/10/14(水) 04:31:35
App.config に配列を保存する時の方法として 適当な区切り文字を入れてsplit でばらしてるんですが XMLで推奨されてる標準の手順はありますか? 区切り文字をいちいち設定せずにできたら楽なので もし知ってる方おられましたら教えてください。
本当に配列が必要? 配列の要素一つ一つに意味があるならそれぞれ設定項目にした方がいいと思う 本当に必要なら987の方法でもいいんじゃね
OfType<T> すげえええ TにCOMインタフェースを指定しても期待通りに動く
>>987 要素がXMLシリアライズ可能な配列はデフォルトでXMLシリアライズできるはずだが……
型を選択するコンボボックスの中に一個だけ長い名前の混じってるじゃん?
文字列だけだろ
993 :
デフォルトの名無しさん :2009/10/14(水) 17:23:29
ArrayList.Add でリストの最後ではなく リストの最初に追加するにはどうすれば良いですか?
Insert
関係ないけど今更ArrayListなんか使うな
関係ないね
ArrayListの代わりってなに?
998 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-2
List<T>
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。