ふらっとC#,C♯,C#(初心者用) Part57at TECH
ふらっとC#,C♯,C#(初心者用) Part57 - 暇つぶし2ch357:デフォルトの名無しさん
10/03/24 00:24:06
>>356
それは「無駄な可読性」というものだ。
ただし、C#はC/C++と比べてif節はbool型しか取らないから、
自然、これまでよりも式が厳格になる傾向があるけどな(式が非ゼロかどうかの判定とか)

358:デフォルトの名無しさん
10/03/24 00:26:58
flagの名前によるな
isHoge
とかならif(isHoge==true)は冗長だろ

359:デフォルトの名無しさん
10/03/24 00:29:48
bool評価なのにわざわざ flag == true って可読性高い?
大切なことなので2回言いましたってことか?

360:デフォルトの名無しさん
10/03/24 00:29:57
>>354
まあ無理
どうしてもと言うならタイトルバーなしにしてそれっぽいのを自分で描画する

361:デフォルトの名無しさん
10/03/24 00:35:13
>>332
そこで.NET4.0の契約プログラミングですよ。

362:デフォルトの名無しさん
10/03/24 00:43:42
>>360
ありがとうございます。
小さいウインドウから元のサイズにするだけなので
コンテキストメニューで代用します。

363:デフォルトの名無しさん
10/03/24 00:46:41
>>359
ある種の思い込みがある人たちにとってはそうなんでしょ。
思い込みっていうか、たぶん「ifが取るのはbool型の値」という風に論理的に考えず、
経験的に「ifの後に来るのは2項演算じゃないと気持ち悪い」と感じるタイプ。

そういう人は自分の感覚を修正すべきだね。

364:デフォルトの名無しさん
10/03/24 00:51:35
flag==true って書くのはいいけど、
flag!=true とか !(flag==true) とか !(flag==false) とかいろんなパターンで使われたらもうイライラ。

365:デフォルトの名無しさん
10/03/24 01:19:50
これは言葉に直すと素直だけど
if(n>0)
これはわかりにくいよね
if(n<=0)
でもelseの方の文を長くしたいならこうなる
if(!(n>0))

366:デフォルトの名無しさん
10/03/24 01:21:31
>>365
もうねろよ。疲れてんだよ。

367:デフォルトの名無しさん
10/03/24 01:53:35
WPF負荷高いね
ボタン4つ作っただけなのにウィンドウサイズ変えると
c2dの使用率50%になっちゃう

368:デフォルトの名無しさん
10/03/24 01:54:22
ねーよ

369:デフォルトの名無しさん
10/03/24 01:59:06
負荷は大きい、小さい。高い低いじゃない。

370:デフォルトの名無しさん
10/03/24 02:04:15
大負荷 の検索結果 約 5,920,000 件中 1 - 100 件目 (0.28 秒)
小負荷 の検索結果 約 3,390,000 件中 1 - 100 件目 (0.32 秒)
高負荷 の検索結果 約 2,480,000 件中 1 - 100 件目 (0.27 秒)
低負荷 の検索結果 約 1,260,000 件中 1 - 100 件目 (0.42 秒)

371:デフォルトの名無しさん
10/03/24 02:09:59
中負荷 の検索結果 約 7,770,000 件中 1 - 10 件目 (0.21 秒)

372:デフォルトの名無しさん
10/03/24 02:11:12
結論

負荷は中というのが正しい。

373:デフォルトの名無しさん
10/03/24 02:15:40
>>322
いつ時計を作ってたの?
時計をタイマーで作るの?


374:デフォルトの名無しさん
10/03/24 02:22:53
"大負荷" の検索結果 約 10,500 件中 1 - 50 件目 (0.26 秒)
"小負荷" の検索結果 約 13,500 件中 1 - 50 件目 (0.28 秒)
"高負荷" の検索結果 約 461,000 件中 1 - 50 件目 (0.31 秒)
"低負荷" の検索結果 約 123,000 件中 1 - 50 件目 (0.39 秒)
"中負荷" の検索結果 約 16,500 件中 1 - 50 件目 (0.33 秒)

375:デフォルトの名無しさん
10/03/24 03:07:34
"負荷が大きい" の検索結果 約 2,120,000 件
"負荷が小さい" の検索結果 約 1,070,000 件
"負荷が高い" の検索結果 約 69,000 件
"負荷が低い" の検索結果 約 1,600,000 件
"負荷が中い"との一致はありません。

"負荷が中くらい" の検索結果 約 18,600 件

376:デフォルトの名無しさん
10/03/24 03:19:07
一方その頃、「そんな大きなフカヒレは入らないよう!」
という夢を中国が見ていた。

377:デフォルトの名無しさん
10/03/24 03:36:16
いつまでやってんだ。スレタイ読め

378:デフォルトの名無しさん
10/03/24 05:35:51
本当に下らないかもしれませんが・・・

*.exe形式で配布~ローカルにインストールして使う、
WEB上のXMLを取得して処理したり、
XML-RPCでブログ投稿
などを行うソフトを作りたいのですが、
こういうソフトは、どういう単語で検索すれば情報が集められるのでしょうか

勉強するとっかかりが、全くわかりません。
本1冊と、C#入門、みたいなサイトは一通り勉強してきましたが
この辺の情報はなかったです。
「WEBサービス」では、サーバサイドの話のようで・・・

379:デフォルトの名無しさん
10/03/24 07:06:03
XML Web サービスクライアント、だな。

380:デフォルトの名無しさん
10/03/24 08:41:42
ちなみに「*.exe形式で配布~ローカルにインストールして使う、」
というのは実行ファイル形式のインストーラーのことだ。
基本的にはこれは.NETで作らない方がいい。
自己解凍書庫、インストーラー作成ツールなどを使う。

381:デフォルトの名無しさん
10/03/24 11:18:09
グローバリゼーションの警告うぜぇ…

382:デフォルトの名無しさん
10/03/24 11:41:39
directxはc++とかと構造は同じ?


383:デフォルトの名無しさん
10/03/24 11:48:42
>>382
その質問は、カレーとスプーンが構造が同じかと問うていることに等しい。
ちなみに、DirectXはCOMでできている。

384:デフォルトの名無しさん
10/03/24 11:49:29
単なるAPIの塊なのにC++から呼び出す場合とC#から呼び出す場合で違ってたら笑えない

385:デフォルトの名無しさん
10/03/24 13:48:55
レジストリの登録について質問があります。
自作のアプリケーションでjpgファイルを開くために、
registryValue = programpath + " %1";
として登録しました。
これで、アイコンを選んで、右クリックで登録したメニューを実行すると、
「パスに無効な文字が含まれています」とエラーになります。

どうやら、%1を
C:\DOCUME~1\USERNA~1\MYDOCU~1\data\20EAE6~1\PIC~2.JPG
のように、アプリケーションのショート名(?)に展開しているようです。
これを回避するには、どのようにしたらよいでしょう?


386:デフォルトの名無しさん
10/03/24 14:39:12
>>383
あっそう

387:デフォルトの名無しさん
10/03/24 17:05:37
string形式の変数aの指定した行の文字列を取得したいのですがどうすれば取得できますかね

388:デフォルトの名無しさん
10/03/24 17:06:27
String.Splitで配列に分解してアクセスすれ

389:デフォルトの名無しさん
10/03/24 17:08:09
>>387
StringReader.ReadLine

390:デフォルトの名無しさん
10/03/24 17:11:51
>>379>>380
ありがとうございます。
知りたかった情報が見つかりました

391:デフォルトの名無しさん
10/03/24 17:31:41
>>385
8.3形式のファイル名が問題なんじゃなくて、programpathに半角スペースが入っているせいで実行ファイルが見つかってないんじゃない?

392:デフォルトの名無しさん
10/03/24 18:34:36
WPFとC#のコードの連携の説明がどこにもない
コードからウィンドウサイズ変えることすらできない
使えない

393:デフォルトの名無しさん
10/03/24 18:38:08
お前の使えなさっぷりをそんなにアピールしなくても大丈夫、世間は意外に優しいよ

394:デフォルトの名無しさん
10/03/24 20:56:25
WPFのスレで聞けばいいのに
みんな始めたばかりだからやさしいぞ

395:デフォルトの名無しさん
10/03/24 22:17:27
自クラスのprivateフィールド変数もプロパティを
通してでないとアクセスできないようにする方法ありますか?

396:デフォルトの名無しさん
10/03/24 22:20:18
無理だろ

397:デフォルトの名無しさん
10/03/24 22:22:23
特にないな
変数名を\uxxxx並べた理解不能なのにしとくとかどう?

398:デフォルトの名無しさん
10/03/24 22:25:15
自動実装プロパティにするくらい

399:デフォルトの名無しさん
10/03/24 22:35:14
自クラスくらい自分が責任持って扱えよって思っちゃうけど、
複数人で1つのクラスいじってるような場面だとそうはイカンザキ?

400:デフォルトの名無しさん
10/03/24 22:42:59
その自動プロパティはgetsetの中身を省略することらしいですが
ここに式を記述してもいいのでしょうか?
そしたら思っているようなことができそうなんですが

public string Name
{
set{ this.Name=valeu;}
}

例えばこんな感じ

401:デフォルトの名無しさん
10/03/24 22:44:20
できるようになったら個人的にうれしいけど無理

402:デフォルトの名無しさん
10/03/24 22:45:38
>>395
そんなフィールド(とプロパティ)が存在しうるとして、
プロパティーのセッターやゲッターは自分自身を呼び出してバッキングフィールドに
値を代入したり取得したりするんだろうか。

それって無限に再帰することになるんじゃないか?
少しは頭を使おうよ。

まあ気持ちは理解できなくもないがw
VBはせっかくメソッド内Static変数があるんだから、ゲッターからもセッターからも
アクセスできる位置にメソッド内Static変数が書ける構文さえ用意してくれれば
バッキングフィールドを不要にできるんだけどな。

ことほど左様に、VBチームはやる気がなさ杉気が利かな杉。
開発者までVB厨っぽい。

403:デフォルトの名無しさん
10/03/24 22:46:04
>>395
それって、ごく普通のプロパティ公開のシチュエーションじゃないの?

404:デフォルトの名無しさん
10/03/24 22:48:03
privateな範囲くらいテメェで管理しろってことだろーけどね

405:デフォルトの名無しさん
10/03/24 22:48:13
URLリンク(msdn.microsoft.com)

406:デフォルトの名無しさん
10/03/24 22:50:34
別ファイルにpartialで分けて、privateフィールドは見ない振りをする

407:デフォルトの名無しさん
10/03/24 22:51:34
ProrertyChangedイベントを使えば>>395のご所望に近いことが出来そうな気が
しないでもないでもない

408:デフォルトの名無しさん
10/03/24 22:54:45
privateなフィールドに値を代入する時に適切な定義域かどうか確認するのがメンドイとか、そんな理由だろ。
フィールドに属性か何かで定義域指定できるようになったら蝶うれしいぞ。

409:デフォルトの名無しさん
10/03/24 22:55:31
そしてDbcへ・・・

410:デフォルトの名無しさん
10/03/24 22:57:15
privateな範囲ならDebug.Assert入れとけばいいじゃん

411:デフォルトの名無しさん
10/03/24 23:02:04
正直契約プログラミングはかなり興味ある。

412:デフォルトの名無しさん
10/03/24 23:02:36
興味あるならVS2010試そうぜ

413:デフォルトの名無しさん
10/03/24 23:03:49
ああ、そういうことか。
自分のクラスのprivateなメンバ変数に対してアクセスせず、
常にプロパティ越しにアクセスしたい、ということか。
すればいいじゃん。

こういうのはコーディングテクニックじゃなくて、ポリシーで解決すべきことがらだ。

どうしてもこねくり回したいなら
private変数と抽象プロパティを定義した親クラスを作って継承すればいい。
そんな必要性は感じられないが。

だいたい、VSなら特定の変数がどこで参照されてるか全検索は簡単にかけられるんだから、
一括で修正してしまえば済む話。

414:デフォルトの名無しさん
10/03/24 23:04:34
すべての変数がプロパティになればいいのに

415:デフォルトの名無しさん
10/03/24 23:08:51
元の木阿弥

416:デフォルトの名無しさん
10/03/24 23:12:42
まあ現実的な妥協としてはEditorBrowsable(false)を付けるぐらいかね。
あとは>>413の言うようにベースクラスのプロパティをフィールド代わりにするか。

でも一番の方法は、そんな下らないことは考えないこと。

417:デフォルトの名無しさん
10/03/25 00:34:54
>>414
否、すべての変数はグローバル変数とするべきだ

418:デフォルトの名無しさん
10/03/25 02:21:04
( ̄ー ̄)ふっ

419:デフォルトの名無しさん
10/03/25 03:19:34
(^-^)♪

420:デフォルトの名無しさん
10/03/25 04:35:11
URLリンク(msdn.microsoft.com)
この連載いいねー簡潔でわかり易いし
疑問に思ってたことがいくつか解決した
C#4.0はpythonでやってたようなことができるみたいだな

421:デフォルトの名無しさん
10/03/25 07:32:33
C#のクラスってC言語でいう構造体の延長だろ
たくさんのデータを含めるし。

422:デフォルトの名無しさん
10/03/25 07:37:21
えっ!?

423:デフォルトの名無しさん
10/03/25 07:40:40
第12回の「4. スレッド プールの何が問題なのだろう?」の話がかなりでたらめな件


424:デフォルトの名無しさん
10/03/25 07:52:00
でたらめはお前だカス

425:デフォルトの名無しさん
10/03/25 07:52:18
Indexというプロパティで配列の添え字範囲チェックしてるんだけど
Indexを呼び出す側でもやっぱり添え字でチェックして2重になってるんだけど
やっぱそういうもんですか?
それとこの場合ゲッターの戻り値どうすればいいでしょうか?

public int Index{set{if(0<=value)_index=value;}}

private void hoge()
{

}

426:デフォルトの名無しさん
10/03/25 07:55:05
誤って途中で書き込んでしまった
private void hoge()
{
++Index;
if(0<=idx && list.Count>idx) a(list[idx]);
}

427:デフォルトの名無しさん
10/03/25 08:39:59
>>425
基本的に、添字チェックはCLIのレベルで自動でやってくれるから必ずしもやらなくていい。
(すなわち添字チェックは最悪ひとつも書かなくていい。失敗したら例外が発生する)
で、そのセッターってなんかおかしくね?

428:デフォルトの名無しさん
10/03/25 09:16:02
てことは、tryで包み込むということかな
なんかどこまで例外処理を書けばいいか迷うね
下手したら同じ例外処理をいくつものクラス間で
3重4重やってしまうことになるわけで

続行して問題が出る場合以外は
条件分岐を極力書かずにtryで済ませる方が
いいような気がしてきた

429:デフォルトの名無しさん
10/03/25 09:22:04
例えば、picturebox.loadにしてもファイルが無ければ平気でエラー出して強制終了なるし
GetDirectoriesでもアクセスできないディレクトリを検索してエラー吐くし
.Netで用意されているクラスですらエラー出すんだから
正常な値であるはずという前提で作っていった方がいいのかな

430:デフォルトの名無しさん
10/03/25 09:30:11
おいおい・・・

431:デフォルトの名無しさん
10/03/25 13:19:43
>>428
最初の質問の時に「2度も添字チェックが必要なのかと」問われたので
必ずしもやらなくてもいいと答えただけで、
例外処理と明示的な添字チェックと比較して、
より書きやすい方法で書けばいいんだよ。

で、添字処理を自前でやるsetter/getterって、
C#で今まで必要になったことが一度もないんだが。オレだけ?
標準ライブラリのコンテナ使うだけで、困った事無い。

432:デフォルトの名無しさん
10/03/25 15:12:48
Graphicsで縁取り文字列を書こうとしてて問題が出てきたので誰か良い案があったら教えて下さい
↓のようにAddStringでpathに作ったアウトラインをWidenで太くしてやるやり方が
ググッたらシンプルなので使おうとしたのだけど、フォントサイズに対してWidenで太くする
サイズ(コード内でいうwidth)がでかくなるにつれ漢字などの細かい部分で意図しないツノが生えてきてしまうんだ
(このコードで言えば「刷」の左上など)
この現象の回避策や、他のシンプルな縁取り文字作成方法があったら教えて下さい(元からそういうフォントを使えというのは無しで)

// gはGraphics, pathはGraphicsPath
Font font = new Font("メイリオ", 26.25, FontStyle.Bold);
Single sizeInPixels = font.SizeInPoints * g.DpiY / 72F; // ピクセル単位のサイズに変換
Single width = 5.0F;

path.AddString("印刷中", font.FontFamily, (Int32)font.Style, sizeInPixels, new PointF(10, 10), null);
using (Pen pen = new Pen(Color.Black, width)) {
path.Widen(pen);
}
g.FillPath(Brushes.Black, path);

433:デフォルトの名無しさん
10/03/25 15:50:35
>>432ですけど自己解決しました。
Widenに使うPen(コードで言うpen)のLineJoinプロパティをLineJoin.Miter(デフォルト)以外にしたら出なくなった。
ついでにLineJoinの値によっては柔らかい感じにもできることが分かって
さらに得した気分。
お邪魔しました~

434:デフォルトの名無しさん
10/03/25 17:06:25
添え字のエラーを例外で処理するのはダメだろ
原則「発生したらバグ」の類の例外だ
それにIndexOutOfRangeやNullReferenceのような例外は一度出たら
頻繁に出ることが多いので例外で処理すると極端にパフォーマンスが低下することがある

435:デフォルトの名無しさん
10/03/25 17:12:11
はぁ!?

436:デフォルトの名無しさん
10/03/25 17:19:05
public/protectedメソッドorプロパティで外部から渡されたのに出すのはいいだろ
privateな部分では(渡す前に)Length参照した方がスマートじゃないでしょうか

437:デフォルトの名無しさん
10/03/25 17:24:02
>>436
おいおい・・・

438:デフォルトの名無しさん
10/03/25 18:35:00
自前のファイル入出力クラスで指定ディレクトリにある
ファイルを取得しstring[]で返すのを作ったとして
そのクラスを利用する側もやっぱりファイルがあるのかないのかチェックし
さらにそのクラス利用する側もファイルがなかった場合を想定してコードを書かないといけない
この同じチェックは永遠に続くの?

439:デフォルトの名無しさん
10/03/25 18:52:03
>>438
書きたければ書けばいいし、例外処理で済ますなら済ませればいい。

440:デフォルトの名無しさん
10/03/25 19:00:47
カスタマイズ可能なキーボードショートカットを実装したいです。
まず、
Up, Scroll, 20
Down, Scroll, -20
Right, Next
Left, Prev
というふうなテキストファイルを読み込んで、キーとメソッドを結び付けたいです。
(この例では、左からキー、メソッド名、パラメータにしてます)
具体的な実装方法として思いつくのが
・キーとメソッド名をもつ連想配列を用いて、switch文で分岐してメソッド呼び出し。
・switch文ではなく、リフレクションでメソッド呼び出し。
なのですが、上のはコードが冗長になりますし、下のはパフォーマンス面で不利かもしれません。
キーとデリゲートを持つ連想配列を用いて呼び出せればスマートだとは思うのですが、
引数が異なると別のデリゲートと、それを入れる連想配列を用意する必要がある(と思う)
ので悩ましいです。スマートにこなす方法なんかがあればアドバイスお願いします。

441:デフォルトの名無しさん
10/03/25 19:06:18
>>440
匿名メソッド

442:デフォルトの名無しさん
10/03/25 19:24:27
パフォーマンス気にするところじゃないな

443:デフォルトの名無しさん
10/03/25 19:38:46
>>440
その1行分を表現する構造体を作って、XMLSerializerでさくっと読み書き。
アプリ上ではDictionaryか何かの表持たせておく。
キーイベントを受け取ったら表を見て登録したメソッドを呼び出す。
メソッドの登録はdelegateかラムダ式を使えばいい。

444:デフォルトの名無しさん
10/03/25 20:39:31
ラムダ式の登場です。

445:デフォルトの名無しさん
10/03/25 20:52:59
果たしてふらっとスレの行く末やいかに!?

446:デフォルトの名無しさん
10/03/25 21:05:06
質問です

ListViewのチェックボクスのチェックを付けたり、外したりするのは画面からクリックしたときではないと無理なのですか?
ソース内でチェックを書き換えたいのですが、CheckedListBoxのSetItemCheckedメソッドみたいなのが存在しないみたいなので困っています
もともとはCheckedListBoxを使用していたのですが、アイコンを表示するためにListViewに変えました

チェックの状態が変わらないとItemCheckイベントも起きないですし、何か方法はあるのでしょうか

447:デフォルトの名無しさん
10/03/25 21:23:25
ListViewItem.Checked

448:デフォルトの名無しさん
10/03/25 21:43:06
DataTable で自動で計算する項目があるんだけど、
DataColumn.Expression では計算できないので、
DataTable.TableNewRow イベントで値を計算して入れようと思ってます。

これを XML で保存するために WriteXml すると自動で計算した項目も出力されると
思うのですが、自動で計算した項目は出力しないようにする方法はあるのでしょうか?

449:デフォルトの名無しさん
10/03/25 21:55:30
>>448
属性をつける

450:デフォルトの名無しさん
10/03/25 21:58:30
>>447
listView1.SelectedItems[0].Checkedのことですよね?
これってSelectedItemsには今チェックされている項目が格納されてると思うんですが、
このプロパティではチェックされている項目のチェックを外すことは出来てもチェックが付いていない項目にチェックを付けることは不可能ではないですか?

451:デフォルトの名無しさん
10/03/25 22:02:17
>>448
Copyして列をRemoveしたあとでWriteXmlするとか?

>>450
Itemsからアクセスすりゃよかろう

452:デフォルトの名無しさん
10/03/25 22:03:59
おおこんな簡単だったんですね
ありがとうございました

453:デフォルトの名無しさん
10/03/25 22:16:13
>>449
それとあんたうざい

454:デフォルトの名無しさん
10/03/25 22:31:10
>>453
ハァ?
無視させたいフィールド、プロパティにXMLIgnore属性をつけておいて、
XmlSerializerに食わせて吐き出させればよい。

455:デフォルトの名無しさん
10/03/25 22:37:55
やってみろw


456:デフォルトの名無しさん
10/03/25 22:43:15
webBrowserコントロール上でマウスカーソルが動いた時にイベントを拾いたいんですけど
なにか方法がありますか?FormとかButtonだとMouseMoveイベントがあったけど、それと
同等の機能がwebBrowserには見当たりません。

457:デフォルトの名無しさん
10/03/25 23:12:08
>>454
DataTable のカラムに XMLIgnore 属性つけられるなら
やってみせてくれw

458:デフォルトの名無しさん
10/03/25 23:14:05
IXmlSerializable実装して自分でシリアライズするかどうか決めたら

459:デフォルトの名無しさん
10/03/25 23:14:56
>>457
ハァ?
てめーがやれ。

460:デフォルトの名無しさん
10/03/25 23:17:29
>>458
それ結局XML吐く処理を全て自前で書くという意味だけどわかってる?

461:デフォルトの名無しさん
10/03/25 23:18:25
>>460
おお

462:デフォルトの名無しさん
10/03/25 23:18:54
>>459
馬鹿だからできねぇってこと知らないの?

463:デフォルトの名無しさん
10/03/25 23:20:14
o(´・ω・`) ぶつお

464:デフォルトの名無しさん
10/03/25 23:53:40
エクスプローラだとフォルダのプロパティで
フォルダ数、ファイル数が瞬時に出ますが
こういう機能はありますか?

465:デフォルトの名無しさん
10/03/25 23:55:37
瞬時に出ないよ。たくさんフォルダ・ファイルがあるところで見ると、
一生懸命カウントしてるのがわかる。

466:デフォルトの名無しさん
10/03/26 00:06:03
なるほど
あれはGetDirectoriesやGetFilesやるしかないですか?
ファイルやフォルダ検索の進行状況を表示させたいので
まず数を取得してやろうと思っていたんですが

467:デフォルトの名無しさん
10/03/26 00:17:52
なるほどなるほど

468:デフォルトの名無しさん
10/03/26 01:51:45
>>441-444
設定ファイルを読み込んだときに、
delegate void Invoke();

Invoke inv = () => Scroll(20);
てな感じのデリゲートをこしらえて辞書に登録すれば、呼び出し時はスマートに済ませそうですね。
こしらえるときは地道にswitchで分岐するとして。
しかしこれは、戻り値を返すメソッドの場合は呼び出し側に値を返せない欠点があります。
でも、戻り値を返すようなメソッドをキーに割り当てる場面は今のところないのでこれでいってみます。

469:デフォルトの名無しさん
10/03/26 02:26:54
コマンドのシグネチャを

void Execute(object[] parameters);

みたいにして、パラメータを配列で渡せばいい

470:デフォルトの名無しさん
10/03/26 07:19:29
>>456
URLリンク(www.k4.dion.ne.jp)

471:デフォルトの名無しさん
10/03/26 10:40:57
お世話になります。
以下のこと、教えてください。
VisualStudioにてユーザーコントロールやカスタムコントロールを作成し、ビルドすると、
そのコントロールがツールボックスの”(プロジェクト名)コンポーネント”といったタブ内に
デフォルトで配置されます。
このデフォルトの配置場所を任意のタブ内(該当タブが無ければ新規作成)にすることは可能でしょうか?
属性でなんとかなりそうな予感がしていたのですが、どうにも見つけきれませんでした。

よろしくお願いします。

472:デフォルトの名無しさん
10/03/26 10:44:25
>>471
そこは開発側で手をいれるところでなく、運用側で対処すべき問題だと思うんだが、どうよ。

473:デフォルトの名無しさん
10/03/26 10:58:04
URLリンク(codepad.org)
WINDOWSフォームを作っていてテストでちゃんと読み込んでいるかチェックしようとしたのですが
chengebox1にチェックを入れるとエラーが起きます。どこがおかしいのでしょうか

474:デフォルトの名無しさん
10/03/26 11:06:27
>>472
やはりそこは個人々々でなんとかしてもらうしかないですかね。
ありがとうございました。

475:デフォルトの名無しさん
10/03/26 11:17:37
>>473
エラーが出たならエラーの内容書けよカス

476:デフォルトの名無しさん
10/03/26 11:32:32
>>473
URLのソースコードを見てみたが、
とりあえずbutton1を押した後じゃないとcheckBox1は押しちゃいけないように見える。
というか、こんなレベルで詰まってちゃ何もできないぞ。

不具合が出たらデバッガで1行ずつ動かしながら再チェックする習慣をつけよう。

477:デフォルトの名無しさん
10/03/26 14:42:01
>>475
カス

478:デフォルトの名無しさん
10/03/26 15:39:08
URLリンク(www.atmarkit.co.jp)
このサンプルを動かそうと思ったのですが
html = ExpandTabs(html);

ネットで調べたのですがExpandTabsの所在がわかりません。
どれをusing指定すればいいのでしょうか?

479:デフォルトの名無しさん
10/03/26 15:44:31
>>478
何も考えずにソースをそのまま入れてみて
ExpandTabsにカーソルを合わせてみ

480:デフォルトの名無しさん
10/03/26 15:46:44
xxxx.ExpandTabsの形でないってことは同一クラスってことなんだが

481:デフォルトの名無しさん
10/03/26 15:48:07
>>479
そういう意味じゃなくて・・・
2004年当時と違って場所が変わってるようなので
サンプルソースのusingだけだと

エラー 3 名前 'ExpandTabs' は現在のコンテキスト内に存在しません。

となるんです。

482:デフォルトの名無しさん
10/03/26 15:51:03
ああ・・・
失礼しました

sjis使わないので・・と思って頭の方全部すっとばしてみてませんでしたorz

483:デフォルトの名無しさん
10/03/26 15:57:11
しかし意味不明な言葉だ…
> サンプルソースのusing

484:デフォルトの名無しさん
10/03/26 16:41:26
コピペも満足にできないのはつらいな

485:デフォルトの名無しさん
10/03/26 19:38:17
URLリンク(msdn.microsoft.com)
のカレンダーで遊んでみようと思っています。
このプロジェクトを開くと、
Microsoft.Windows.Controlsと
Microsoft.Windows.Controls.Primitivesの参照が必要なので、
WPFToolkitをダウンロードし、参照を追加しました。

それでもMoonPhaseCalendar/MainWindow.xamlの、
<vsm:VisualStateManager.VisualStateGroups>
の行で、
アタッチ可能なプロパティVisualStateGroupsが、
型VisualStateManagerに見つかりませんでした。
とエラーになります。
これにはどう対処したらよいでしょうか?


486:デフォルトの名無しさん
10/03/26 21:07:29
WPFのデザイナにはよくあること
まず気にせず実行してみる

487:デフォルトの名無しさん
10/03/26 22:10:49
フォームのデザインを2種類、切り替えられるアプリケーションを作っています。
複数のフォームで値を共有するにはどういった方法が適切ですか?

今は1つのフォーム内(Form1.cs)に切り替えられるよう書いていますが、
デザイナが使えないのは何かとても間違っている気がします。

1つのコンポーネントを2つのフォームから参照できるとスマートだと思うのですが・・・

よろしくお願いします。

488:デフォルトの名無しさん
10/03/26 22:17:53
>>487
Document-Viewアーキテクチャだね。
Viewから保持するデータ(Document)を分離する。
もたせ方は、コンストラクタで渡そうがプロパティで引き渡そうが好きにすればいい。

それよりも、メインのフォームを切り替えるのがちょっと面倒そうだなー、と心配するかな。

489:デフォルトの名無しさん
10/03/26 22:35:56
>>488
ありがとうございます。

Document-Viewアーキテクチャを見ると、
「そのためにWPFがあるのです。」という空耳が聞こえます、気のせいですよね。

ご指摘の通り、そこで悩んでいます。
フォームの値をまとめた構造体Dataなどを作って、

Form2 a = new Form2();
a.Data = this.Data;
this.Close();

みたいにしてもいいのでしょうか?

490:デフォルトの名無しさん
10/03/26 22:39:22
>>489
だよね。
その書き方だと、this.Close()を呼び出した直後にProgram.csのMain関数が終わってしまう。

そこでMain関数内をループ構造にして、
Application.Runを複数回呼び出せるようにするとどうだろう。
そのタイミングでメインフォームを切り替えるとか。

491:デフォルトの名無しさん
10/03/26 22:49:32
WPFのコードビハインドとXAMLの関係は、物理的にビューとロジックを分けて
分業しましょうっていう考え方でDoc-Viewとは違うよ
XAMLはWinFormsのDesigner.cs相当で、コードビハインドとは別にXAMLだけを入れ替えるようなことはしない
そういうのはMVVMとかもっと高次の枠組みでやる

492:デフォルトの名無しさん
10/03/26 22:50:16
>>490
bool run = true;
while(run){
Application.Run(new Form1());
Application.Run(new From2());
}

どう・・・なんでしょう。
Program.csにData(Document)保存した方がいいような気もします。

493:デフォルトの名無しさん
10/03/26 22:55:01
>>491
ビューと"ロジック"なんですね。 参考になります。

WPFはスケッチブックと色鉛筆渡されたような気持ちになるので触る勇気がまだありません・・・。
ちなみに、Formは大学ノートとシャーペン。


494:デフォルトの名無しさん
10/03/26 22:56:57
ManageForm.Visible =false

495:デフォルトの名無しさん
10/03/26 22:59:11
ManageForm.Visible =true

496:デフォルトの名無しさん
10/03/26 22:59:36
>>494
メモリ×2

でも、それも手段の一つです。

497:デフォルトの名無しさん
10/03/26 22:59:39
>>489
そもそも「フォームの値」などというものが存在していることそれ自体がおかしい。
WPFとか関係ない。

聞いた感じクラスを使ったプログラミングが理解できてないようだから
まずそれを覚えないことには話にならないよ。

498:デフォルトの名無しさん
10/03/26 23:00:18
>>493
そこじゃないw
WPFでいうビューとロジックの分離っていうのは、デザインとコードをはっきり分離できていれば
デザインはデザイナが担当してコードはプログラマが書くという形で分業できるという考え方。
だからDoc-ViewやMVCでいうならXAMLもコードビハインドもViewに属する。

499:デフォルトの名無しさん
10/03/26 23:15:20
>>497
フィールドの受け渡し、と言うべきでしょうか。

500:デフォルトの名無しさん
10/03/26 23:17:30
言い直しても理解できてなけりゃ同じだろう

501:デフォルトの名無しさん
10/03/26 23:24:59
俺だったらフォーム分けないな
Panelか何かに配置して入れ替える

おそらくデザイナ使いたいからその辺を避けようとしてるのだろうけど
だったらUserControlでも継承すればいいんだよ

502:デフォルトの名無しさん
10/03/26 23:26:52
>>492
おかしなことせんとApplicationContext使えば?


503:デフォルトの名無しさん
10/03/26 23:39:01
>>501
>>502
ありがとうございます。
両方試してみます。

504:デフォルトの名無しさん
10/03/26 23:41:08
クラスライブラリ書くとき内部クラスにするの面倒くさいのでinternal使ってよいですか?

505:デフォルトの名無しさん
10/03/26 23:48:20
例えば

今日の朝生の出演者名簿から
今日の討論の流れをシュミレーションするには
どれぐらいの経験がひつようでしょうか?

506:デフォルトの名無しさん
10/03/27 00:20:58
>>501
その方法で解決できました。
ありがとうございます。

507:デフォルトの名無しさん
10/03/27 03:08:31
>>506
だろ
継承すればいいだろ

508:デフォルトの名無しさん
10/03/27 07:26:53
>>505
朝生視聴歴10年くらい

509:デフォルトの名無しさん
10/03/27 11:52:38
ネットの画像を保存する方法は?
タイマーとか使って一定時間ごとに自動的に保存するようなのを作りたいんだけど。

510:デフォルトの名無しさん
10/03/27 11:57:57
画像がJPEGとかなら、普通にダウンロード。
WebBrowserで取ってきて、キャプチャってのもありだね。

511:デフォルトの名無しさん
10/03/27 12:43:16
>>509
URLリンク(dobon.net)
ほい

512:デフォルトの名無しさん
10/03/27 15:42:11
C#にてWindowsフォームアプリケーションを作成しています。
DataGridViewを置き、
実際に内容が表示されている(値のある)行をクリックしたときはその行を選択状態にさせ
実際に内容が表示されていない下部の余白をクリックしたときは、選択状態を解除したいと考えているのですが、
余白をクリックしたことを検知するにはどのようなイベントを行えばよいのでしょうか。
よろしくお願いします。


513:デフォルトの名無しさん
10/03/27 15:43:24
HITTEST系のイベントなかったっけ?

514:デフォルトの名無しさん
10/03/27 15:46:29
>>512
欄外をクリックしてChange系イベントをもらったときに
選択中のindexを問い合せると-1が返ってきたりしない?
ListBoxではそういう動きをする。

515:デフォルトの名無しさん
10/03/27 15:55:19
そのものずばりの HitTest() メソッドがあるな。

516:デフォルトの名無しさん
10/03/27 17:33:14
あっそ

517:デフォルトの名無しさん
10/03/27 17:43:57
できた
private void dataGridView1_MouseDown(object sender, MouseEventArgs e)
{
if (dataGridView1.HitTest(e.X, e.Y).RowIndex < 0)
{
MessageBox.Show("hoge");
}
}


518:デフォルトの名無しさん
10/03/27 18:26:20
できたね

519:デフォルトの名無しさん
10/03/27 18:42:29
おめでとう。

520:デフォルトの名無しさん
10/03/27 18:45:50
Visual Studio C# Express Editionで、
フォームの入った.csをエディタでいじってフォーム部分を壊してしまったとき
なんとか復活させる方法ないでしょうか。

Express Editionのフォームデザイナが異常終了しちゃうんです。

ビルドはできるし、できあがったexeも実行出来るんですけど。
フォームデザイナだけ言う事聞いてくれない。

521:デフォルトの名無しさん
10/03/27 18:47:26
異常終了って何だよ? 赤いバッテンが出るとかか?

522:デフォルトの名無しさん
10/03/27 18:58:49
ソースのほうを直すしかない

523:デフォルトの名無しさん
10/03/27 19:05:55
exeから逆コンパイルすればいいのでは?

524:デフォルトの名無しさん
10/03/27 19:11:20
>>523
一言余計だ

525:デフォルトの名無しさん
10/03/27 19:15:04
何がやねん

526:デフォルトの名無しさん
10/03/27 19:34:25
せやな

527:デフォルトの名無しさん
10/03/27 19:42:22
これだから大阪民国人は・・・

528:デフォルトの名無しさん
10/03/27 19:50:42
せやせや

529:デフォルトの名無しさん
10/03/27 20:05:06
でんがなまんがな

530:デフォルトの名無しさん
10/03/27 20:26:11
日本人の97%は朝鮮人か中国人の直系

531:デフォルトの名無しさん
10/03/27 20:30:55
そういう言い方だと、朝鮮人とか中国人ってのも意味ないんだけどな。

532:デフォルトの名無しさん
10/03/27 20:36:43
全人類はアフリカの女性からだっけ?
全員はアフリカ人だな

533:デフォルトの名無しさん
10/03/27 21:11:33
>>521
うん。そう、それ。


Visual C#でエラーが発生したため終了します。
エラー報告を送信する しない


× データが失われる可能性を防ぐため、デザイナの読み込み前には以下のエラーを
   解決する必要があります。

× オブジェクト参照がオブジェクトインスタンスに選定されていません。

534:デフォルトの名無しさん
10/03/27 21:17:26
ちょこちょこ直してくしかないんじゃないかなぁ。

535:デフォルトの名無しさん
10/03/27 21:39:12
初心者なんでどこがエラー原因なのかさっぱりわかりませんよー

536:デフォルトの名無しさん
10/03/27 21:42:03
じゃ、あきらめろ。

537:デフォルトの名無しさん
10/03/27 21:45:05
>>517
マウスでクリックしたときのイベントを書くとき、
MouseDown,MouseClick,Click,MouseUp
どれを使うのが適切なの?
イベントの発生順がちがうのは分かるけども、
どれか1つしか書かないときはどれが望ましいのか分からないっす
(-_-;);

538:デフォルトの名無しさん
10/03/27 21:46:39
クリックでいいじゃん

539:デフォルトの名無しさん
10/03/27 21:47:29
処理による。イベントによって取れる情報が違うし、タイミングが重要なこともあるからね。

540:デフォルトの名無しさん
10/03/27 22:00:13
>>533
実はVSのデザイナーはいろんな理由で落ちる不完全な代物なので、
そういうものだと思っておこう。

落ちた位置自体はレポートされてるから、
それを参考に修正する。大抵はコンストラクタ周り。

541:デフォルトの名無しさん
10/03/27 22:27:52
現在、.net Framework3.5で開発中です。

特定のディレクトリの配下すべてを
1つのファイルにバックアップ・リストアする機能を作成しています。
(イメージ的には、zip圧縮と解凍)

圧縮はSystem.IO.Packageのクラスでどうにかできたのですが、
解凍がうまくいきません。

今やっている考え方は、
packgeのオープン→ファイルパス取得→取得したファイルパスからファイルをコピー
の流れで、パス取得とコピーを繰り返している状態です。

なぜかコピーできるファイルとコピーできないファイルが存在していて困っています。
なお、ソースで圧縮したzipファイルは、laplusで解凍、ファイルが適切に存在していることを確認しています。


誰か理由を知っていますか?
また、代替案をご存知ですか?

#J#のライブラリによる圧縮・解凍や、フリーのライブラリを利用することは現状考えていません。



よろしくお願いします。

542:デフォルトの名無しさん
10/03/27 22:29:46
オセロの盤面のようなものを描きマウスクリックする事で
左1右3とマス目を取得するプログラムを作りたいのですが
参考になるサイトなどがあったら教えてください

543:デフォルトの名無しさん
10/03/27 22:30:27
すみません 左1上3でした

544:デフォルトの名無しさん
10/03/27 22:32:24
>>541
System.IO.Packagingはzipファイル作るためのライブラリじゃないよ
Open Packaging Conventions、つまりxpsとかのためのパッケージ仕様

545:デフォルトの名無しさん
10/03/27 22:34:16
>>541
そもそも ZIP 用ってわけじゃないので、ダメかも知らんね。
まっとうなライブラリ使った方が早いと思うよ。

>>542
たかだか 64マスなんだから、PictrueBoxとか配置しちゃうってのもひとつの手。

546:デフォルトの名無しさん
10/03/27 22:37:03
>>542
void form_MouseUp(object sender, MouseEventArgs e) {
int x = e.X / マス目の幅;
int y = e.Y / マス目の高さ;
}

547:デフォルトの名無しさん
10/03/27 22:39:29
>>544

回答ありがとうございます。
Open Packaging Conventions用のクラスだというのは承知です。
固定のアプリからの圧縮・解凍ができればおkらしいです。

本当ならJ#のライブラリを使ったら簡単というのはわかるのですが、
いかんせん仕様上使わない方向らしいです。

もし完全に無理なら仕様変更を訴えてみます。

548:デフォルトの名無しさん
10/03/27 22:41:40
その仕様を決めた奴に聞けよ。

549:デフォルトの名無しさん
10/03/27 22:43:03
>>545

回答ありがとうございます。
やっぱり無理そうですか…。

まっとうなライブラリとはどんなライブラリですか?

550:デフォルトの名無しさん
10/03/27 22:43:36
GZipStreamでも使って独自フォーマットでまとめて突っ込めばいいじゃん
ヘッダにファイル名とサイズさえ書き込んでおけば充分だろ

551:デフォルトの名無しさん
10/03/27 22:44:44
>>548

仕様を決めた人は、C#を知らないわけでorz。
無理なら無理と言い切りたいのですが、圧縮だけはできてしまったので困った次第です。

552:デフォルトの名無しさん
10/03/27 22:44:51
7zip


553:デフォルトの名無しさん
10/03/27 22:45:46
GZipStreamは単一ファイルにしか使えないからないわ。

>>549
フリーのライブラリがいろいろ転がってるだろ?
サポート云々とか言うなら、PkZipのがいいな。

554:デフォルトの名無しさん
10/03/27 22:47:15
仕様を決めたやつがC#知らないんだったら、「これじゃできません」って言っても
否定はされないだろ。

555:デフォルトの名無しさん
10/03/27 22:47:28
サポートとか無くていいならこれおすすめ
URLリンク(dotnetzip.codeplex.com)
pureC#で使いやすい

556:541
10/03/27 22:51:09
1人1人に返すのが大変なので一括で。

初め、GZipStreamも考えたのですが、
・必須仕様
→アプリ上で圧縮・解凍が可能。
・推奨仕様
→アプリ外でも解凍可能。
という感じだったので、却下した次第です。

あと、フリーのライブラリも検索で引っかかってたのですが、
商用利用のために怖いと上の人間に言われて却下状態です。

無理ぽなら、月曜にでも理由を言って、改善案を作ってもらいます。

557:デフォルトの名無しさん
10/03/27 23:00:28
zlibでもP/Invokeしてきて使えば
いくらフリーといってもさすがにzlibを信用できないなら何も使えないでしょ

558:デフォルトの名無しさん
10/03/27 23:00:40
あの…ここ…初心者用…

559:デフォルトの名無しさん
10/03/27 23:04:41
>>556
プログラムの安定性は実績で決まるのであって、
商用かオープンソースなのかは全然関係ないんだけどな。

オレはアーカイブ内のファイル構成はSQLiteで外部で管理してるよ。
データファイル側はただ単に暗号化して連結してるだけ。

560:デフォルトの名無しさん
10/03/27 23:07:06
怖いのは安定性じゃなくてライセンスだと思うよ、多分

561:541
10/03/27 23:07:51
>>557

了解です。
zlibも検討します。

>>558
知ってるか?
俺はC#はじめてまだ5ヶ月だから初心者なんだぜ。

562:デフォルトの名無しさん
10/03/27 23:09:22
>>553
ちゃんとzip用のヘッダさえ書いてやれば、
ファイル一つ一つの圧縮はGZipStream使ってもれっきとしたzipファイルが作れるんだぜ

563:デフォルトの名無しさん
10/03/27 23:09:25
>>560
ああ、ライセンスね。そのライブラリは調べてなかったな……。



って、Ms-PLじゃねえか!
.NETの世界で一番有名なオープンソースライセンスなのに、
怖いとかモグリだろ。

564:541
10/03/27 23:10:14
>>560

そういうこと。
できたらおkじゃないところが痛い。

565:デフォルトの名無しさん
10/03/27 23:11:26
まあオープンソース=GPL汚染というのはやはり根強い印象があるよねー

566:デフォルトの名無しさん
10/03/27 23:12:59
>>555のようなMS-PLなら全く問題ないだろ
最近のMSのサンプルやMSがオープンソースで公開してるライブラリもほとんどMS-PL

567:デフォルトの名無しさん
10/03/27 23:16:21
C#すげーな

568:541
10/03/27 23:16:46
みなさんいろいろありがとう。

とりあえず結論としては、
・標準ライブラリはやめとけ。
・dotnetzipができるならいい。
・ダメならzlibでどうにかする。
・それでも無理ならあきらめろ。

でおk?

569:デフォルトの名無しさん
10/03/27 23:18:47
まあ自作しろって言われるのがオチだな

570:デフォルトの名無しさん
10/03/27 23:20:17
PKとかのライブラリ買え、ってのが抜けてる。

571:デフォルトの名無しさん
10/03/27 23:20:19
.NET4では大量のMS-PL由来のライブラリが本家.NETに統合されるよ
WPFの新しいコントロールとかDLRとかMEFとか新機能の多くがMS-PL

572:デフォルトの名無しさん
10/03/27 23:22:20
deflateの自作は重すぎ。

573:デフォルトの名無しさん
10/03/27 23:23:06
>>568

541が使用している標準ライブラリは必ずしも選択は間違ってないけど、使い方がおそらく間違っている。
dotnetzipで問題ないだろうけどこのスレのやつが実際に確かめたわけではないので、自分で調べて考えろ。

574:541
10/03/27 23:26:56
とりあえず、自作する方向でも、一度上の人と相談します。
>>573の言うとおり、使い方が間違っている可能性もあるのでそれも含めつつ。

ダメなら即効白旗揚げて、対策考えてもらいます。
ありがとうございました。

575:デフォルトの名無しさん
10/03/27 23:29:24
あのよ、コスト考えろよ。ZIP圧縮・解凍ライブラリなんて自作してたら、
どんだけ時間かかると思ってんだよ。

576:デフォルトの名無しさん
10/03/27 23:31:33
当該アプリで圧縮したものは、他のアプリでも伸張できるけど、
当該アプリで伸張できるのは、当該アプリで圧縮したものだけ

という仕様でよければ、自分で実装するのも然程困難ではない

577:デフォルトの名無しさん
10/03/27 23:36:10
そんな実装するくらいなら、BSDライセンスのライブラリでも探すわw

578:デフォルトの名無しさん
10/03/27 23:38:24
そんなロクにテストもしてない実績もない
バグだらけの糞自作ライブラリなんかそれこそ怖くて使いたくないわ

579:デフォルトの名無しさん
10/03/27 23:38:58
>>540
あれ、レポートされてたっけ。

また今度じっくり向きあってみます。
自分が組み上げたコードじゃなく引き継いだものなので、
どこがどーなってるかさっぱりなんですがねw

580:デフォルトの名無しさん
10/03/27 23:40:47
誤解されそうなので補足しとくけど>>578は拾ってきたライブラリを使うんじゃなくて
自分で実装する場合の話ね

581:デフォルトの名無しさん
10/03/27 23:42:50
よく「設計した人から言われたんで」みたいなこと言うやついるけど、
きちっと筋道建てて論破できない時点で、そいつも同罪。

582:デフォルトの名無しさん
10/03/27 23:42:56
>>576
作るのは簡単だが、世間並の圧縮率にするのと、バグがほとんどないと思えるレベルの安定性にするのが大変

583:デフォルトの名無しさん
10/03/28 02:44:06
Ms-PLのdotnetzipはどう使えばいいの?
黙って実装しても問題にならないの?

584:デフォルトの名無しさん
10/03/28 03:13:13
オレは業務でZIP書庫作る必要があって、結局は自前でやったなぁ
実データはDeflateStreamで済むしヘッダだけ実装すればいいだけだよ

585:デフォルトの名無しさん
10/03/28 03:22:29
シェアード ソース ライセンス
URLリンク(www.microsoft.com)

商用アプリに利用して一緒にバイナリを配布してもOK。詳しくはライセンス原文を参照してくれ。

586:デフォルトの名無しさん
10/03/28 04:28:12
.NET界隈はわりと自由なライセンスが普及してて良い

587:デフォルトの名無しさん
10/03/28 04:29:33
>>586
隠したくても隠せないしねw

588:デフォルトの名無しさん
10/03/28 04:40:44
まぁ、使っていいって言ってくれてるんだから隠す必要はないな。
ライセンスで認められた範囲で堂々と使うといい。

589:デフォルトの名無しさん
10/03/28 05:17:35
許諾者は、著作権、特許権、商標、またはその他の形式の出所をコード内に常に示しておく必要があります

ここがよくわからないんだけど、結局配布する場合どうすればいいの?

590:デフォルトの名無しさん
10/03/28 09:51:03
URLリンク(www.microsoft.com)
今はこっち
>本ソフトウェアに含まれるすべての著作権…の表示を維持する必要があります。
だから元々そういう表示が含まれている場合は消すなってことだろう

591:デフォルトの名無しさん
10/03/28 10:23:35
>>587
隠す方法はいろいろある。ネイティブにもできる。

592:デフォルトの名無しさん
10/03/28 10:36:10
流れを読まずに質問です。
C#で使えるコントロールのライブラリってないでしょうか?
・ゲージやメーター
・Officeっぽい、Vistaっぽいコントロールのスキン表示
・スキン機能
こんな機能があるライブラリがあれば名前だけでもいいので教えてください。
商用ではいくらでもあるのですがライセンス料が高すぎるのでできればオープンソース
のライブラリを教えて頂ければと思います。
日本語・英語は問いませんが、日本語を使用しても問題のない方が望ましいです。
注文だらけですが、もし知っておられる方がいましたらお願いいたします。

593:デフォルトの名無しさん
10/03/28 10:36:58
WPF

594:デフォルトの名無しさん
10/03/28 11:02:22
いやWPFはNFW3.5以降ということなので、NFW2.0以降で使用できるライブラリを
お願いします。
というか最初に言い忘れてました、ごめんなさい

595:デフォルトの名無しさん
10/03/28 11:06:23
NFWって略は初めて見たかもしれない

596:デフォルトの名無しさん
10/03/28 11:17:50
聞いたことないな
.NETのオープンソースが盛り上がりだしたのって最近MSがオープンソースに積極的になってからだからな
WPF使えば一瞬でできる報われないことをわざわざやる人もいないだろ

597:デフォルトの名無しさん
10/03/28 11:40:38
いやNFW3.5にするとWin2000を切り捨てざるを得なくなるので、それを避けたいだけなのです。
フリーではライブラリはないか、または聞いたことがないぐらいマイナーということですね。
昔はいくつかあったみたいですが、今はすべて商用に変わっていてがっくりですorz

598:デフォルトの名無しさん
10/03/28 11:46:22
2000は切り捨ててもいいのよ

599:デフォルトの名無しさん
10/03/28 11:52:05
UIだけActiveXでHTMLやSilverlightベースにしてしまえ

600:デフォルトの名無しさん
10/03/28 11:58:59
jQueryがあるじゃないか

601:デフォルトの名無しさん
10/03/28 12:32:27
ふーん

602:デフォルトの名無しさん
10/03/28 12:57:25
はーん

603:デフォルトの名無しさん
10/03/28 13:37:09
10年前のOSだもんなあ。
IE6も10年前でみんな葬り去りたくてウズウズしてるんだから、2000も葬っていいわな。

604:デフォルトの名無しさん
10/03/28 13:40:24
2000のSP4は、7月にサポート切れだったろ。
そのタイミングで俺的には終了だな。

605:デフォルトの名無しさん
10/03/28 14:25:57
MSだけじゃなくて開発側も古いWindowsサポートって頭があるからな
切っちゃっていいでしょっていうか切っていこうよ。.netなら尚更

606:デフォルトの名無しさん
10/03/28 14:29:06
逆にMSがサポートしないものを「サポートします!」とか、
すごい勇気だなぁ、って思いますよw

607:デフォルトの名無しさん
10/03/28 14:36:27
>>592
RoboFormとか、skinstudioかねぇ?

後者はDirectX用だからやや違うかもしれないけど。
他は皆がレスしてるようにWPF自体がスキン機能そのものの(機能とデザインの分離)だから
それを使うのが一番の王道だな。

608:デフォルトの名無しさん
10/03/28 14:36:45
MSじゃないどこかの企業がそれを大々的にするって言ってたな。

609:デフォルトの名無しさん
10/03/28 14:40:42
DevExpress .NET Windows Forms Skinning Library
SPREAD for .NET Windows Forms Edition
AppStylist for Windows Forms

ぐぐったら色々あるみたいね。もちろん、みんな商用プロダクトだが。

610:デフォルトの名無しさん
10/03/28 14:41:33
スキン突っ立ってオーナードローするだけ出しな
そんなに手間じゃないだろ

611:デフォルトの名無しさん
10/03/28 14:42:28
十分手間だろ
一つやったら全部やらないと空気読めてない感じになる

612:デフォルトの名無しさん
10/03/28 14:42:38
SPREADは違うだろ。

613:デフォルトの名無しさん
10/03/28 14:52:17
とりあえず、オープンソースの範囲ではこんなのがあった。
URLリンク(weys.codeplex.com)
UIのカスタマイズと言うよりか、Windows Media Playerのスキンっぽい感じだな。

614:デフォルトの名無しさん
10/03/28 16:00:47
みなさん、いろいろとありがとうございます。
私が今開発しているのはとあるゲームなのですが、それがWin2000以降に対応していたもので
Win2000ユーザーを切り捨てるのもどうかと考えてたのです。
数年前ならコントロールのライブラリも意味があったかもしれませんが、今ではWPFが一番
いいみたいですね。
WPF検討してみます。
しかし、日本語だと書籍はないですね...

いろいろとありがとうございました。


615:デフォルトの名無しさん
10/03/28 16:18:49
WPFならXPの古いマシンは切り捨てることになるよ
まあゲームなら問題ないな

616:デフォルトの名無しさん
10/03/28 16:35:08
配列に条件によって値を入れたいと思います。
(1) int[] table = {01, 0, 120, 270};
(2) int[] table = {02, 0, 180, 90};
と2種類の値を入れたいとします。

(1)の場合の条件と、(2)の場合の条件が違う場合、

if(条件) int[] table = {01, 0, 120, 270};
else if (条件) int[] table = {02, 0, 180, 90};

//以下tableを使った処理。

とすると、処理をするところで、
tableがないとエラーになります。

int[] table;
if(条件) table = {01, 0, 120, 270};
else if (条件) table = {02, 0, 180, 90};
//以下tableを使った処理。

とすると、この書き方ではだめだと、大量にエラーになります。
配列の書き方という基本的なことなのですが、書けずに悩んでいます。
アドバイスお願いします。


617:デフォルトの名無しさん
10/03/28 16:37:17
>>615
ちょっとそれ詳しくお願いします。
要求スペックが高いから古いマシンでは駄目
XP SP3以降じゃないと駄目
という意味ですか?

618:デフォルトの名無しさん
10/03/28 16:37:19
>>616
そりゃあ、その2箇所を通過してしまうような条件が残ってるからだ。
当たり前のことじゃないか。

619:デフォルトの名無しさん
10/03/28 16:37:58
素直にnew int書くだけでいいと思うの

620:デフォルトの名無しさん
10/03/28 16:38:26
int[] table;

これはifの前に宣言だけして
table = new int[]{02, 0, 180, 90};
とかでできない?

621:デフォルトの名無しさん
10/03/28 16:41:40
>>617
前者
どんな環境でも動くことは動くけどバリバリのDirect3Dで描画されてるから
ハードウェアアクセラレーションが十分に効かない環境では厳しい

622:デフォルトの名無しさん
10/03/28 16:44:30
>>616
これで一応エラーでないけどコメントの箇所何かいれないと何も設定されない条件ができないか?
URLリンク(ideone.com)

623:デフォルトの名無しさん
10/03/28 16:44:41
>>616
int[] table = null;

にするか

if()
~~
else
~~
とするか
お好きなのをどうぞ

624:デフォルトの名無しさん
10/03/28 16:46:13
>>621
回答ありがとうございます。
なるほど、やはりそのような理由ですか。
了解しました。
スレチなのでWPFのことは別スレで聞いてみたいと思います。
みなさん、いろいろとありがとうございました。

625:デフォルトの名無しさん
10/03/28 16:47:21
>>620
new int[]でできました。
ありがとうございました。
これをつけるのとつけないのとでは、どう意味が違うんですか?


626:デフォルトの名無しさん
10/03/28 16:50:23
>>625
いろいろ短縮したのが

table = new int[]{01, 0, 120, 270};

これね

長くかくと

table = new int[4];
int[0] = 01;
int[1] = 0;
int[2] = 120;
int[3] = 270;

こうなる

627:デフォルトの名無しさん
10/03/28 16:50:50
>>625
アホか。エラーメッセージに全部書いてあるだろ。

628:デフォルトの名無しさん
10/03/28 16:53:15
ああああああ
間違えた

table = new int[4];
table[0] = 1;
table[1] = 0;
table[2] = 120;
table[3] = 270;

629:デフォルトの名無しさん
10/03/28 16:57:27
table = new int[]{01, 0, 120, 270};
こうやって書くメリット?は

table = new int[4];
table[0] = 1;
table[1] = 0;
table[2] = 120;
table[3] = 270;
この配列に
table[4] = 100;
とか増やしたい場合は
table = new int[4];
これを
table = new int[5];
としないといけないけど

table = new int[]{01, 0, 120, 270,100};
こうするだけで{}で囲った中の要素分だけ勝手に配列を確保してくれる。

数を知りたければ配列の場合.Lengthでわかるはず

630:デフォルトの名無しさん
10/03/28 17:05:07
>>590
こっちはまだわかりやすいね
訳が適当だとどうにでも解釈できるよな

631:デフォルトの名無しさん
10/03/28 17:11:45
>>616
普通にこれだけでいける
table=new []{0,1,2,3,4}

632:デフォルトの名無しさん
10/03/28 21:49:36
>>631
アホか。

633:デフォルトの名無しさん
10/03/28 23:50:29
配列なんて使わずArrayList使おうよ

634:デフォルトの名無しさん
10/03/28 23:51:52
intの配列の初期化がまともにできないレベルだからなあ
もうちょい先だろ

635:デフォルトの名無しさん
10/03/28 23:53:00
うひゃあうひゃあ
配列とか扱うのはメモリ効率悪いwww

636:デフォルトの名無しさん
10/03/29 00:08:06
男なら配列なんか使うな!

637:デフォルトの名無しさん
10/03/29 00:13:42
いまどき配列を嫌う男の人って…

638:デフォルトの名無しさん
10/03/29 00:28:06
大した弊害なくて使えるなら何だって良いさ

639:デフォルトの名無しさん
10/03/29 00:34:17
ですね

640:デフォルトの名無しさん
10/03/29 03:59:41
volatile の効果が実感できるソースコードの例は無いでしょうか?
簡単なコードでは実感できないような修飾子なのでしょうか。

641:デフォルトの名無しさん
10/03/29 06:16:01
無理


642:デフォルトの名無しさん
10/03/29 06:19:56
そもそも初心者には使う必要のない修飾子

643:デフォルトの名無しさん
10/03/29 06:39:07
VSの設定保存機能って使ってる?
ビルドしたらなんとか.exe.configとかいう名前で生成されるやつ。
自分で用意してるから使わないんだけど、生成させないようにするのはどうするの?

644:デフォルトの名無しさん
10/03/29 06:47:40
App.configを消せばいい。

645:デフォルトの名無しさん
10/03/29 06:51:00
>>644
おー、サンクス。さっそく除外しとこう。

646:デフォルトの名無しさん
10/03/29 09:13:16
ArrayListって内部的にリスト構造なの?
Listとどう違うの?

リスト構造だとインデクサ[]は使えるとしてもアクセス効率
が悪いと思うけど

647:デフォルトの名無しさん
10/03/29 09:18:19
>>646
いや配列

配列の容量あふれると別の容量大きめの配列作ってコピーするから時々追加にO(n)かかる

ArrayListはList<object>だった気がするなぁ~
使わないから覚えてない…

648:デフォルトの名無しさん
10/03/29 09:20:00
ListはArrayListのGenericだから比べるところじゃないだろう
ListとArrayListの中身は配列

>ArrayList は、null 参照 (Visual Basic では Nothing) を有効な値として受け取り、要素の重複を許可します。
>Count が既に Capacity に等しい場合には、内部配列を自動的に再割り当てすることにより ArrayList の容量が増加し、新しい要素を追加する前に既存の要素は新しい配列にコピーされます。
>Count が Capacity より小さい場合、このメソッドは O(1) 操作になります。新しい要素を格納するために容量を増やす必要がある場合、このメソッドは O(n) 操作になります。ここで、n は Count です。


649:デフォルトの名無しさん
10/03/29 09:21:07
ArrayListは過去の遺物。要素がobjectの場合でもList<object>を使った方がいい。
Silverlightでは切り捨てられた。

650:デフォルトの名無しさん
10/03/29 10:13:51
ありがとう。Listという言葉が紛らわしいですね。

C#の参考書を見ると、Windows GUIが簡単にできそう。
MFCを整理してより使い易くしているかんじ。
C++のMFCを勉強してきたけど、きっぱりとあきらめて
C#で作り直した方が早いと思う。

651:デフォルトの名無しさん
10/03/29 10:47:41
ArrayListやHashtableって実装をさらけ出した悪い名前だと思う

652:デフォルトの名無しさん
10/03/29 10:54:34
そこがメリット

653:デフォルトの名無しさん
10/03/29 10:58:07
Java由来の名前だが、実装を示唆するような名前でないと速度の見積もりができないので、あれはあれでよい。

654:デフォルトの名無しさん
10/03/29 11:01:25
>>650
MFCを使ってる人がまだいたことに驚いた

655:デフォルトの名無しさん
10/03/29 11:05:19
listといえばリンクリストを指すのは悪い慣習だな
.NETではインデックスでアクセスできるものをlistと呼ぶ
LinkedListもListと付いてるけどIListを実装してない

656:デフォルトの名無しさん
10/03/29 12:24:01
WPFのC#のコードビハインドでのウィンドウサイズの指定方法を教えてください。
xamlでは、
<Window Height="400" Width="400">
と指定します。
FormのC#では、
this.ClientSize = new System.Drawing.Size(1173, 861);
のようにできます。
WPFのC#の場合がわかりません。
Windowssize = new System.Drawing.Size(1173, 861);
としてみたところ、System.Windows.Window.Windowsizeはアクセスできない保護レベルになっています、
と表示されています。
どこで保護レベルを変更すればよいでしょう?
よろしくお願いします。


657:デフォルトの名無しさん
10/03/29 12:25:00
保護レベル変更は無理

658:デフォルトの名無しさん
10/03/29 12:26:55
this.Width = 1173;
this.Height = 861;
これだけ
それとWPFでSystem.Drawingは使うな

659:デフォルトの名無しさん
10/03/29 12:27:07
>>657
やりたいことはウィンドウサイズの変更なので、
ウィンドウサイズを変更できればよいです。


660:デフォルトの名無しさん
10/03/29 12:29:59
>>658
ありがとうございました。できました。感謝です。


661:デフォルトの名無しさん
10/03/29 17:27:28
>>660
また俺が回答してやるよ
どーんとこい!

662:デフォルトの名無しさん
10/03/29 18:34:08
いや俺が回答した

663:デフォルトの名無しさん
10/03/29 18:40:04
いやいや俺が

664:デフォルトの名無しさん
10/03/29 19:08:57
あ、じゃあ
俺がやったよ

665:デフォルトの名無しさん
10/03/29 20:47:38
質問
現在、C言語で書かれたDLLが提供する関数を
C#から呼び出そうとしています。

悩んでるが、「引数に構造体の配列を持つ関数」の処理です。
下記URLにソースコードを張りました
URLリンク(codepad.org)

上でいう所のC側の「//<- ここで落ちる」というコメントのある所で不正アクセスで落ちてしまいます。
(stSample[0]に値が入ってるのは確認できました)

C#側の構造体の渡し方がおかしいとかなと思ってるのですが、
どこがおかしいのか分からず・・・。
ご存知の方いましたら、教えて下さい。


666:デフォルトの名無しさん
10/03/29 20:52:16
public struct ST_SAMPLEDLL {
  public byte cCount;
  public fixed byte strBuff[256];
}
こうじゃね

667:デフォルトの名無しさん
10/03/29 21:18:54
文字列にしてそれを渡してパースしてぶっこめば楽だな

668:デフォルトの名無しさん
10/03/29 21:35:23
教えてください。

マルチスレッドを利用したプログラムがあります。
このスレッドのうち1本で、ローカルファイルにデータを出力する処理があり、そのファイル名を
ファイル選択ダイアログ(System.Widows.Forms.SaveFileDialog)を利用して求めることにしたいと思います。

実際にプログラムを組んで実行すると、ShowDialog() を実行する箇所でエラー終了します。
メッセージボックスに表示されるエラーの内容は以下の通りです。

>OLE が呼び出される前に、現在のスレッドが Single Thread Apartment (STA) モードに設定されていなければなりません。

main 関数には STAThread の設定もしてあります。(元からついているようですが)

同じプログラムで、main 関数を実行したスレッド(以下、メインスレッドと記述します)でダイアログを表示すると正常に使用できます。
また、メインスレッドで開けばいいのかと、メインスレッドで表示しているフォームに Invoke を掛けて
ダイアログを表示すると正常に使用‥‥出来るのですが、このフォームは最小化&非表示にしているため
この状態でダイアログを表示しようとしても画面には出てきません。

メインスレッド以外からファイル選択ダイアログを正常に開く方法はないでしょうか。

669:デフォルトの名無しさん
10/03/29 21:44:03
UIスレッド以外から操作すんなよ。

670:デフォルトの名無しさん
10/03/29 21:45:43
ダイアログに見せかけたFormじゃだめなの?

671:デフォルトの名無しさん
10/03/29 21:49:18
メインスレッド側でAPIで呼べばいいんじゃね?

672:デフォルトの名無しさん
10/03/29 21:50:38
あー、Thread.SetApartmentStateってのがあってだね

673:デフォルトの名無しさん
10/03/29 21:50:49
一応、Thread.TrySetApartmentState メソッド ってのはあるけどな・・・。

674:デフォルトの名無しさん
10/03/29 21:52:26
>>669-671
この3人にtaskkillしてあげてください

675:デフォルトの名無しさん
10/03/29 21:53:44
ひどい赤っ恥だ

676:デフォルトの名無しさん
10/03/29 21:56:37
メインのUIスレッド以外からUIいじるのはお勧めできないけどな。

677:デフォルトの名無しさん
10/03/29 21:58:40
>>674
何でtaskkillなんだよ
>ダイアログを表示すると正常に使用‥‥出来るのですが、このフォームは最小化&非表示にしているため
>この状態でダイアログを表示しようとしても画面には出てきません。
ダイアログで出ないとかいうからダイアログに見せかけたForm表示しろっていっただけ
オーナーとの関係で表示がされないだけだろ

678:デフォルトの名無しさん
10/03/29 21:59:11
そのスレッドは自分で作ったスレッド?
それともスレッドプールのスレッド?
自分で作ったスレッドなら、差し支えなければ自分でSTAに設定すればいい(Start前しかできないよ)
もしスレッドプールとかなら、これはMTAから変更することはできない。
汚いけど、必要な部分で自分でスレッド作って、STAに設定してメッセージボックス表示、
元のスレッドでは新しいスレッドを勝ち合わせとかするしかないと思う。
最初からUIスレッドにIncvokeする方が無駄はないけど。


679:デフォルトの名無しさん
10/03/29 22:01:42
そもそもSTAとかMTAって何なの

680:デフォルトの名無しさん
10/03/29 22:02:56
ようやくシンプルだけどまともに動くものが作れるようになってきたけど
未だにマルチスレッドとかよくわからないな
>>679も何のことやら

681:デフォルトの名無しさん
10/03/29 22:05:41
Inside OLE2 嫁。

682:デフォルトの名無しさん
10/03/29 22:09:36
>>681
それ絶版じゃなかったっけ。

683:デフォルトの名無しさん
10/03/29 22:10:41
うん。

684:デフォルトの名無しさん
10/03/29 22:11:22
>STAとかMTA
VC++でATL使ってIEコンポーネント触ったときにちょっとかじった程度だな
ナビゲーション関連がこの辺を理解してないとメッセージが来ないとかなんとか

685:デフォルトの名無しさん
10/03/29 22:24:31
うん。

686:668
10/03/29 22:26:02
みなさん、ありがとうございます。
てか、はやっ。w

>>670
無知ですみません。
ダイアログに見せかけたフォームというのは、Form を継承したファイル選択ダイアログの
ようなフォームクラスを自分で作る、と言うことでしょうか。
だとすると、今回は遠慮できたらいいかな、と。すみません。

>>671
いまの状況からは少し難しく。すみません。

>>678
System.Threading.Thread を利用して自分で作ったスレッドです。

やっとエラーメッセージの意味がわかりました。
あれは必ずしも main 関数でやれってことではなくて、ダイアログを操作するスレッドに
STA を設定しろってことなんですね。
>>672>>673 さんの仰ってる方法で出来ると理解しました。明日、確認します。

>>669,676
自分も UI スレッド(この言葉を忘れていました)以外で UI の操作を行うのには抵抗があったのですが。
‥‥気をつけておきます。

687:デフォルトの名無しさん
10/03/29 22:27:30
>>686
わかればよろしい
今後も精進しなさい

688:デフォルトの名無しさん
10/03/29 22:28:10
偉そうに

689:665
10/03/29 22:32:50
>>666
レスサンクス。
バッファの取り方がまずいという事ですか。
今手元に環境がないので試せないですが、
明日試してみます。

良いサイトか何かあれば、いいんですが、
なかなか見つからず・・・orz

ちなみに、環境は
XP,VC# 2008Express
(書き忘れました)

690:デフォルトの名無しさん
10/03/29 22:37:59
バッファの取り方でなくて、C#とCの型の違い。

691:665
10/03/29 22:42:37
>>690
サンクス
それで、最初の構造体はアクセスできるけど(たまたま出来てるように見えてるだけ?)、
次の構造体にアクセスしようとしたら落ちると・・・。



692:デフォルトの名無しさん
10/03/29 22:46:49
型の制約があるものより汎用的なテキストでやり取りする方が無難かもねえ
相談かこっちか忘れたけど以前同じようなdllを呼び出すアプリの相談で
httpでやり取りする形にしてみたら?ってのがあったな

693:デフォルトの名無しさん
10/03/29 22:52:56
>>691
よく見たらST_SAMPLE**だったのか
C#側の引数の型をIntPtr[]にしてそれぞれポインタの参照先に
ST_SAMPLEDLL一つ分のメモリを割り当てておかないと

694:デフォルトの名無しさん
10/03/29 22:53:47
バイト配列が一番わかりやすいよ。

695:665
10/03/29 22:58:22
>>692
時間がたっぷりあって、許されるなら、DLLをC++か何かで
書き換えたいところですが、そうもいかず・・・。
このインターフェースは我慢するしかないですね。

>>693
です。ダブルポインタです。
そこなのですが
URLリンク(codepad.org)
このサイトに張ったソースの37行目でDLLに渡すメモリの実態自体は用意しているので、
大丈夫かと思ってたのですが、それとは別に確保するという事ですか?

あと、宣言は、こっちの方がいいってことですね。
[System.Runtime.InteropServices.DllImport("MY_Dll.dll", EntryPoint = "test")]
unsafe public static extern int test_call( IntPtr[] pstList);


696:デフォルトの名無しさん
10/03/29 23:00:44
IntPtrのみでいいはずだけどな。
Cでは、基本的に配列はメモリ上に整列するし。

697:デフォルトの名無しさん
10/03/29 23:04:37
ダブルポインタだからポインタの配列を渡さないといけない(だからIntPtr[])
しかもC側でポインタの参照先にアクセスしてるから予めそれぞれ実体を割り当てとかないと

698:デフォルトの名無しさん
10/03/29 23:11:52
配列はポインタで受けれるけど、ってやつか。

699:デフォルトの名無しさん
10/03/29 23:12:03
>>696
私もそう思ってて、そこではまってます。。

>>697
>しかもC側でポインタの参照先にアクセスしてるから予めそれぞれ実体を割り当てとかないと
そこなのですが、

testPtr1 = Marshal.AllocCoTaskMem(Marshal.SizeOf(typeof(ST_SAMPLEDLL)) * (int)10);

これで、領域を確保して、
次に

test_call(testPtr1);

渡してるので、少なくとも構造体ST_SAMPLEDLLを10個分はメモリとして
確保してると思ってますが、この処理のほかに必要とうい事でしょうか?

その後、取れたのをMarshal.PtrToStructure()で取り出す処理になってます。


700:デフォルトの名無しさん
10/03/29 23:15:27
= () => って表記、他に候補なかったのかよ!と書く度に思う。タマゴとコンニャクでオデン喰いたくなるw

701:デフォルトの名無しさん
10/03/29 23:21:09
C#でいう「参照型の配列」と同じだ。
並んでるのは実体じゃなくてポインタで,それぞれのポインタがどこか別の場所にある実体を参照してる。
IntPtr[] testPtr1 = new IntPtr[10];
for (int i = 0; i < 10; i++) { testPtr1[i] = Marshal.AllocCoTaskMem(Marshal.SizeOf(typeof(ST_SAMPLEDLL))); }
test_call(testPtr1);
こうする。
取り出すときはそれぞれの要素に対してMarshal.PtrToStructureを呼べばおk


702:デフォルトの名無しさん
10/03/29 23:27:48
DLLとC#の間にもう一個DLL挟めばいいんだよ

703:デフォルトの名無しさん
10/03/29 23:29:37
>>701
なんといいますか・・・。
頭が下がるばかりです。
なるほど、納得しました。


704:デフォルトの名無しさん
10/03/29 23:32:31
もともと

x⇒x*2;

みたいな感じではなかったのあれ
1バイト文字に⇒がなかったから代用みたいな
よくしらんけど

705:デフォルトの名無しさん
10/03/29 23:35:16
これで上手くいったと書こうと思ったら>>701に先越された。CallingConvention忘れないでね。
using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, Pack=4)]
public struct ST_SAMPLEDLL
{
public byte cCount;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
public byte[] strBuff;
}
class Hoge
{
[DllImport("u.dll", EntryPoint = "test", CallingConvention=CallingConvention.Cdecl)]
unsafe public static extern int test_call([MarshalAs(UnmanagedType.LPArray), In, Out] IntPtr[] pstList);
static void Main()
{
IntPtr[] stSample = new IntPtr[10];
for (int i = 0; i < stSample.Length; ++i)
{
stSample[i] = Marshal.AllocCoTaskMem(Marshal.SizeOf(typeof(ST_SAMPLEDLL)));
}
// DLL呼び出し
test_call(stSample);
ST_SAMPLEDLL[] st = new ST_SAMPLEDLL[10];
for (int i = 0; i < st.Length; ++i)
{
st[i] = (ST_SAMPLEDLL)Marshal.PtrToStructure(stSample[i], typeof(ST_SAMPLEDLL));
Marshal.FreeCoTaskMem(stSample[i]);
}
Console.WriteLine((int)st[0].cCount + " " + (int)st[0].strBuff[0]);
Console.WriteLine((int)st[1].cCount + " " + (int)st[1].strBuff[0]);
}}

706:デフォルトの名無しさん
10/03/29 23:40:06
なんでCdecl?

707:デフォルトの名無しさん
10/03/29 23:40:19
>>705
なんていうか・・・俺って頭の回転速いから自然と先越しちゃうんだよ。(笑)
肩を並べる奴は誰も現れないって感じだ。(笑)

708:デフォルトの名無しさん
10/03/29 23:41:32
>>707
おい
俺のフリをするな

709:デフォルトの名無しさん
10/03/29 23:42:58
>>706
URLリンク(codepad.org) で__stdcallが指定されていないから。
まさかコンパイルオプションでstdcallを指定しているなんてオチがあるわけないと思ってCDeclと仮定した。

710:701■Agei32s4
10/03/29 23:44:05
騙りばっかだな。トリつけとくわ。

711:デフォルトの名無しさん
10/03/29 23:44:35
ですね

712:665
10/03/29 23:55:44
>>705
>>709
具体例、サンクス!
少し話しが出たので、質問なのですが、
DLL側で__stdcallが指定されていた場合、話しは違ってくるのでしょうか?


713:デフォルトの名無しさん
10/03/29 23:59:11
うん。

714:デフォルトの名無しさん
10/03/30 00:01:18
文字列でやり取りするのが今時

715:デフォルトの名無しさん
10/03/30 00:02:31
そんなことない。

716:デフォルトの名無しさん
10/03/30 00:03:15
WinFormsのP/Invokeを全部標準入出力に替えたらとんでもないことになるな

717:デフォルトの名無しさん
10/03/30 00:06:56
>>715
ネットワーク越しにwebAPI呼び出してxmlなどのテキストで回答を許容できる時代なんだから
スタンドアロンでやっても問題ないだろ

そうすればGUIだけC#で書いて古いDLLは常駐してhttpをリスナーする小さいプログラム書けば
いいのでVC++の無料でも余裕で開発できる

718:デフォルトの名無しさん
10/03/30 00:07:42
どんだけ遅いと思ってんだよ。バカジャネーノ

719:デフォルトの名無しさん
10/03/30 00:08:00
>>713
実は、会社の帰り際に「WINAPIは__stdcallで宣言するのが標準」という記事を見つけたので、
淡い期待を抱きながら、「明日試そう・・・」と思っていたところでした。
スタックの開放タイミングの違いとうい事ですか(う~ん汗)


720:デフォルトの名無しさん
10/03/30 00:12:45
直接は関係ない。関数から戻るときの問題だし。

721:デフォルトの名無しさん
10/03/30 00:16:05
やれやれ

722:デフォルトの名無しさん
10/03/30 07:25:47
テキストファイルでやりとりすべきだな

723:665
10/03/30 11:56:25
回答を下さった方々、有難う御座いました。
無事、思うような動作が出来ました!
(感謝感謝)

私の後ろの初めてを捧げたいぐらいの感動です。
ここの所、ず~っとこれで悪戦苦闘してましたので・・・。
有難う御座いました。


724:デフォルトの名無しさん
10/03/30 11:57:01
UserControl 作るとツールボックスに表示されますが、
表示させたくない場合はどうすればいいですか?

725:デフォルトの名無しさん
10/03/30 11:59:17
>>723
よしではいくぞ

>>724
無理じゃね?
クラスライブラリで分離しておくとかすれば可能かな・・・

726:デフォルトの名無しさん
10/03/30 12:34:16
>>723
2番目をくれ

727:665
10/03/30 12:55:41
>>725
>>726
夢を打ち砕いてすまないのだが、
一応、私は「男」です

728:デフォルトの名無しさん
10/03/30 12:57:39
>>727
あたりまえだろ。女なんて嫌だ

729:デフォルトの名無しさん
10/03/30 12:58:12
知ってて言ったのにw
マジな返答くるとは思わなかった

ばっちこーいのAAでも貼ってくるかと期待したのに

730:デフォルトの名無しさん
10/03/30 13:05:19
>>724
それらしい属性探して、無ければ諦めれ

731:665
10/03/30 13:25:07
っく・・・
変態ばっかりだったとは・・・。


732:デフォルトの名無しさん
10/03/30 13:30:28
軽いキャッチボールだよw

733:デフォルトの名無しさん
10/03/30 13:58:43
おまえらToolboxItemAttributeもしらねえのかよ・・・

734:デフォルトの名無しさん
10/03/30 19:27:29
さぁって、今日はどんな馬鹿が釣れるかな? 枠々

735:デフォルトの名無しさん
10/03/30 21:15:14
>>724
AutoToolboxPopulate
というのがVSにはあるらしい
でも単独配布のEEにはないんだよな

736:デフォルトの名無しさん
10/03/30 21:18:19
何かうまく動かないなーと思ったらRectangleのBottomってTop+Heightなんだ
原点0で高さ64なら下の座標は63だとばかり思ってたよ…

737:デフォルトの名無しさん
10/03/30 21:26:56
>Bottom プロパティの値は、Rectangle に含まれない、Rectangle の下端にある最初の点の y 座標を表します。

確認を怠るのが悪い。

738:デフォルトの名無しさん
10/03/30 21:43:10
プログラミング自体初心者で、昨日初めてC#を始めて見ました。
visual C# 2008を使ってGUIでグラフを表示させたいんですが、どうすればいいんでしょうか?
参考になりそうなサイトなどあれば教えてください。

739:デフォルトの名無しさん
10/03/30 21:52:02
URLリンク(www.microsoft.com)
実用的なのはこれ
プログラミングの勉強で関数のグラフを自分で描いたりするんだったら C# paint でググる

740:デフォルトの名無しさん
10/03/30 22:04:27
>>739
ありがとうございました。
自己解決しました。

741:デフォルトの名無しさん
10/03/30 22:32:24
C#は.net frameworkと同じ意味?

742:デフォルトの名無しさん
10/03/30 22:34:13
違う

743:デフォルトの名無しさん
10/03/30 22:39:04
同じ

744:デフォルトの名無しさん
10/03/30 22:40:03
.net frameworkは土台
その上で動くプログラムを書けるのがVC#とかVB.netなど

745:デフォルトの名無しさん
10/03/30 22:52:42
言語仕様上はC#は.NET Frameworkとは無関係ということになってる

746:デフォルトの名無しさん
10/03/30 22:53:15
違う

747:デフォルトの名無しさん
10/03/30 22:53:59
Monoはネイティブコード吐けるし…

748:デフォルトの名無しさん
10/03/30 22:56:24
それラインタイム一緒に事前コンパイルしてるだけで無駄が大きいけどね

749:デフォルトの名無しさん
10/03/30 23:00:46
一応言語仕様の上ではCLIにも依存してない
言語仕様に最低限必要なライブラリが書いてあるのでそれを一通り実装しさえすれば
C#と名乗れる

750:デフォルトの名無しさん
10/03/30 23:09:54
名乗れるね

751:デフォルトの名無しさん
10/03/30 23:10:14
違う

752:デフォルトの名無しさん
10/03/30 23:19:03
もう何がなんだかw

753:デフォルトの名無しさん
10/03/31 00:00:07
どこが「違う」か指摘できない馬鹿は放っておけ

754:デフォルトの名無しさん
10/03/31 00:12:05
ですね

755:デフォルトの名無しさん
10/03/31 02:39:38
>>739配布するときにも相手にはそれをインスコさせなきゃ駄目?
それとも、自動的に組み込んでくれる?

756:デフォルトの名無しさん
10/03/31 03:26:39
90

757:デフォルトの名無しさん
10/03/31 04:59:13
>>755
.netその物と同じで相手側にも入ってないとだめかもね

758:デフォルトの名無しさん
10/03/31 06:15:46
だめかもね

759:デフォルトの名無しさん
10/03/31 07:36:45
>>755
ライブラリの dll ファイルは
標準のアセンブリフォルダーの下か、
exe と同じフォルダーにあれば OK なんで
exe と同梱で配布すれば OK。

760:デフォルトの名無しさん
10/03/31 10:55:33
include <stdio.h>
using System

int Main(void){
System::Console::WriteLine("にちゃんねらー死ね");
}

761:デフォルトの名無しさん
10/03/31 11:23:17
>>760
ここはニュー速のプログラミングスレじゃないですよ

762:デフォルトの名無しさん
10/03/31 11:28:37
なんでC++/CLIなんだよイライラするなあ死ね

763:デフォルトの名無しさん
10/03/31 11:37:00
C++/CLIならmainだろ
include <stdio.h>
using System;も必要ない

764:デフォルトの名無しさん
10/03/31 11:39:16
やたら丼を書いている奴だろ

765:デフォルトの名無しさん
10/03/31 12:45:58
同じマシン、同じソフトで印刷プレビューするときにプリンタ2台で
1枚でも40秒と3分の差があるんですけど、印刷の実行速度は
プリンタドライバも関係してくるんですか?
3分かかるのは9年前発売のプリンタで、40秒かかるのは
最近発売のプリンタですけど。

766:デフォルトの名無しさん
10/03/31 12:50:17
そりゃまあレンダリングするのはドライバだしな

767:デフォルトの名無しさん
10/03/31 12:59:46
>>766
なるほど。
ありがとうございます。

768:デフォルトの名無しさん
10/03/31 13:51:04
>印刷プレビューするとき
これはプリンタのほうでプレビューってことだよな?
自分でプレビュー画面作るってわけでもなく
だとしたら>>766の通りだけどC#関係なくね?


769:デフォルトの名無しさん
10/03/31 14:16:03
プレビューの速さの話が途中から印刷の実行速度の話になってるからな

770:デフォルトの名無しさん
10/03/31 14:28:59
フォームプロジェクトに追加したユーザーコントロールをデザイナで配置したいのですが、ツールボックスに表示されません。
調べてみると Windowsフォームコントロールライブラリ という別プロジェクトでDLLを作成し、
それを介する方法しか発見できませんでした。
DLLを介する以外に方法があれば教えてください。

771:デフォルトの名無しさん
10/03/31 14:51:56
メニューのツールのオプションのWindowsフォームデザイナの全般で
ツールボックスのAutoToolboxPopulateをTrueにしてもダメかな?

772:770
10/03/31 14:59:20
>>771
できました。ありがとうございました。

773:765 ◆JdKMFRogo6
10/03/31 15:25:55
>>768 >>769
C#で作ったプログラムで印刷プレビュー出すときのことです。
出るまでにそれだけ時間がかかるんですよ・・・
ここらへんでプリンタも買い替えないと・・・

774:デフォルトの名無しさん
10/03/31 15:28:41
勝手にしろよwww

775:765 ◆JdKMFRogo6
10/03/31 15:35:37
>>774
たしかにwww

776:デフォルトの名無しさん
10/03/31 16:12:56
URLリンク(codepad.org)
上記のコードがあるとします

14行目でリストの0番目のアイテムにGetTypeしてアイテムの型を取得していますが
BindingList<T>のインスタンスが生成された段階でアイテムの型は決まってるので
0番目のアイテムにアクセスしなくても取れるはずです
これの取り方を教えて頂きたいのです

あくまでもテスト用のコードなので「Tから取ればいいだろ」みたいな突っ込みはご容赦下さい

777:デフォルトの名無しさん
10/03/31 16:13:43
今から仕事なので日付変わった頃にお返事します

778:デフォルトの名無しさん
10/03/31 20:50:18
>>776
listType.GetGenericArguments()[0]

779:デフォルトの名無しさん
10/03/31 23:00:29
関数のパラメータについて、教えてください。

デバッグ用にその関数のパラメータの一覧をログなどに出力したいと考えます。
たとえばなのですが、
System.Diagnostics.StackFrame.GetMethod().GetParameters()
を利用すると、特定の関数のパラメータの一覧を得ることが出来ます。
ただ GetParameters() ではパラメータの型や変数名などの情報を取得することは出来ても
パラメータの値そのものは取得できないようです。当然と言えば当然なのですが。

これと同じような方法で、パラメータの値を取得する方法はないでしょうか。


なにをしたいのかというと、デバッグ用に特定の関数のパラメータの各値をログなどに
出力したいのですが、関数個別に "param1 = {0}", param1 などと書いていくのが手間なので、
関数のパラメータのすべての変数名とその値とを文字列にしてくれる関数を作れないものかと。

780:デフォルトの名無しさん
10/03/31 23:16:40
>>778
お答え頂きありがとうございます

質問したかった事とコードが違ってる事に出勤してから気付きました
IBindingListの引数にclass BindingList : BindingList<string>{}のインスタンスを渡して
継承元の型パラメータを取得したいのでした
悩んでる最中は思い至らなかったのですが、単にType.BaseType.GetGenericArguments()すればいいだけでした
下らない質問してすみません

781:デフォルトの名無しさん
10/03/31 23:19:01
>>779
無理

782:デフォルトの名無しさん
10/03/31 23:40:12
>>779
型名でいいなら
public void Trace(params object[] o)
{
foreach(object obj in o)
{
~(o.GetType().Name);
~(o.ToString);

}
}

でいけるとおもうよ~は出力命令ね

783:デフォルトの名無しさん
10/03/31 23:40:35
フォームアプリケーションを作成している時、フォームのコードが長くなったので、
「コードファイル」を新規に作成し、コードの一部を作成したソースに移しました。
その後、フォームへコントロールを配置すると、移したはずの コントロール名_イベント名() が
元のソースに関数の中身が空の状態で生成されてしまうようになりました。
コントロールのプロパティ内でイベントの欄をダブルクリックした時以外は
コードが自動生成されないように設定する方法を教えてください。

784:デフォルトの名無しさん
10/03/31 23:45:55
そんな設定ないよ。

785:783
10/03/31 23:55:44
>>784
設定がないということは、フォームのコードを複数ソースに分けることをやらない方がいいということでしょうか?
それとも「コードファイル」を作成する以外の方法で別のソースを作成すべきなのでしょうか?

786:デフォルトの名無しさん
10/03/31 23:58:30
>>785
> 設定がないということは、フォームのコードを複数ソースに分けることをやらない方がいいということでしょうか?

うん。

787:783
10/03/31 23:59:21
>>786
ありがとうございました。

788:デフォルトの名無しさん
10/04/01 00:14:00
>>787
うん。

789:デフォルトの名無しさん
10/04/01 00:14:02
http;//○○○/~~~
となっているURLの○○○を抽出するにはどうすればいいでしょうか?
正規表現を使ってみたのですが、うまく抽出されません。
例になるコードとかありませんか?

790:779
10/04/01 00:18:59
>>781
>>782
ありがとうございます。
残念ながら型名などではなくて中の値そのものが欲しいので、今回は諦めます。

791:デフォルトの名無しさん
10/04/01 00:19:40
>>789
URIクラスとかじゃねーの?

792:デフォルトの名無しさん
10/04/01 00:22:58
"/"のSplitで[2]とか?

793:デフォルトの名無しさん
10/04/01 00:26:07
>>792
'/'のSplitで[2]でしょ

794:デフォルトの名無しさん
10/04/01 00:29:17
URIクラスのHostでもAuthorityでもDnsSafeHostでも

795:デフォルトの名無しさん
10/04/01 00:39:09
http://~~/△△&pass=○○
のようなURLの場合に○○を取得したい場合はどうすればいいでしょうか?
さすがにこれはURIクラスでは処理しきれないと思うんですが

796:デフォルトの名無しさん
10/04/01 00:43:17
EndOf

797:デフォルトの名無しさん
10/04/01 00:47:17
>>795
System.Web.HttpUtility.ParseQueryString(string query, System.Text.Encoding encoding)

798:デフォルトの名無しさん
10/04/01 00:51:19
>>795
'='のSplitで[1]

799:デフォルトの名無しさん
10/04/01 00:55:35
みなさんありがとうございます。
今までは正規表現でどうにかしようとしてましたがいろいろやり方があることが分かりました。
もうちょっと頑張ってみます。

800:デフォルトの名無しさん
10/04/01 01:00:14
>>799
みなさん?全部俺の回答なんだけどw

801:デフォルトの名無しさん
10/04/01 01:01:48
4/1とはいえ他人の善意を潰す嘘は許さん

802:デフォルトの名無しさん
10/04/01 01:02:52
自己主張したいならコテでもつけてろよ

803:デフォルトの名無しさん
10/04/01 01:03:41
おまえがつけろクソ野郎

804:デフォルトの名無しさん
10/04/01 01:05:51
4/1とはいえコテ付けない奴は許さん(キリッ

805:デフォルトの名無しさん
10/04/01 01:07:38
ここまで全て俺の自演

806:デフォルトの名無しさん
10/04/01 01:08:43
エイプリルフールはどんな嘘でもいいってわけじゃないんだよね。
人を怒らせるような行為はいただけないな。

807:デフォルトの名無しさん
10/04/01 01:09:05
だな


808:デフォルトの名無しさん
10/04/01 01:47:08
>>799
正規表現でも別にそう難しくはない気もしますが、まあ、
一番楽で素直で間違いのなさそうな方法を選ぶのが良いね。

809:デフォルトの名無しさん
10/04/01 02:07:49
(new List<int>()).GetType().GetGenericTypeDefinition().Equals((new List<bool>()).GetType().GetGenericTypeDefinition())

上の評価はtrueになるんだけどさぁ
それを踏まえてMSDNを見ると

URLリンク(msdn.microsoft.com)
>2 つの構築型が同じジェネリック型定義から同じ型引数を使って作成された場合
>GetGenericTypeDefinition メソッドは両方の型に対して同じ Type オブジェクトを返します。

なんかこの説明おかしくね
この場合「違う型引数を指定して作成された場合でも」になるべきじゃね
同じのは同じなんだから当ったり前だろうそんなの
GetGenericTypeDefinition呼ぶまでもない

と思ったけど英語版もsame type argumentsなんだよなあ
なんでだ

810:デフォルトの名無しさん
10/04/01 06:33:16
なんでだろうね

811:デフォルトの名無しさん
10/04/01 15:58:00
未完成の汎用的なクラスを作れたのでいろんなプロジェクトで利用しているんだけど
既存の項目で追加とすると、その汎用クラスの変更がそのプロジェクトでしか行われない
汎用クラスの変更がすべての利用しているプロジェクトで反映される方法などありますか?
もしくは他に方法はありますでしょうか?

812:デフォルトの名無しさん
10/04/01 16:26:28
>>811
既存の項目として追加するときに出てくるダイアログで、追加ボタンの隣にある三角ボタンを押してリンクとして追加すればいいじゃない。

813:デフォルトの名無しさん
10/04/01 18:07:35
おほ~~いけた
ありがとう

814:デフォルトの名無しさん
10/04/01 19:34:31
webclientのイベントハンドラをbuttonのイベントハンドラと同じように一覧から選んで記述ということはできないのでしょうか?

815:デフォルトの名無しさん
10/04/01 19:37:40
わかんね

816:デフォルトの名無しさん
10/04/01 20:13:14
foreach(var item in listview.items)

これだとlistviewitemと認識しないぞM$

817:デフォルトの名無しさん
10/04/01 20:18:03
という独り言

818:デフォルトの名無しさん
10/04/01 21:54:16
XMLにシリアル化の挙動がさっぱりわからん
なんなのこれは?
まったく使い物にならん
シネ

819:デフォルトの名無しさん
10/04/01 22:12:44
無能は車輪の何とかでもやってなさいってこったw

820:デフォルトの名無しさん
10/04/01 22:20:21
>>814
デザイナーからは設定できないぞ


>>816
varって糞VBじゃねーんだからちゃんと型つけろがボケ
URLリンク(ideone.com)
.netはいたるところで型が何か分かるようになってるぞボケ

>>818
publicじゃない要素があるとうまく動かん
c# XmlSerializerでぐぐってサンプルみてこい
public classだし中身もpublic付き

821:デフォルトの名無しさん
10/04/01 22:25:14
>>820
>.netはいたるところで型が何か分かる
それは>>816の問題に関しては間違ってる。
foreach (ListViewItem item in listView1.Items)は
foreach (object _item in listView1.Items) { ListViewItem item = (ListViewItem)_item; と等価。
だからitemの型がListViewItemでなくてもコンパイルエラーにはならない。実行時エラーが出る。
ジェネリックが無かったころの名残の糖衣構文だ。

822:デフォルトの名無しさん
10/04/01 22:37:29
>>821
糖衣構文だとか昔は~とか言われてもよくわからんけど
現在はこう表示されるんだからそれでええんとちゃうの?
URLリンク(uproda.2ch-library.com)

823:デフォルトの名無しさん
10/04/01 22:46:18
>>822
それ今も昔もListViewItemCollectionに普通にインデクサが定義されてるだけ。
ListViewItemCollection.GetEnumeratorがIEnumerator(非ジェネリック)を返すので
foreachを使うと要素がobject型扱いになる。だから>>816はvarの自然な挙動。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch