5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

ふらっとC#,C♯,C#(初心者用) Part45

1 :デフォルトの名無しさん:2009/09/21(月) 17:41:44
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

前スレ
ふらっとC#,C♯,C#(初心者用) Part44
http://pc12.2ch.net/test/read.cgi/tech/1251439041/

546 :デフォルトの名無しさん:2009/10/04(日) 19:55:03
>>544
最初の一回だけだから気にしてない。

547 :デフォルトの名無しさん:2009/10/04(日) 20:14:58
>>545
俺も聞きたいねえ。
コンストラクタでやったらまずい処理って思いつかない。

まあFormに限らず、クラスのコンストラクタでイベントを生成するような処理を書いて
嵌ったことは過去に何度かある。

コンストラクタ呼び出し中に発火されたイベントは、事実上誰も拾えないからね。

548 :デフォルトの名無しさん:2009/10/04(日) 20:53:17
>>546
.net3.5を使用しているアプリを配布しようとしたら、
プレインストールされていないPCは、30分とかかかかるのかい?


549 :デフォルトの名無しさん:2009/10/04(日) 20:55:13
>>548
回線速度とスペック次第じゃね?

550 :デフォルトの名無しさん:2009/10/04(日) 20:55:27
かかかか

551 :デフォルトの名無しさん:2009/10/04(日) 21:01:28
>配布
んなものは、システム要件。
インストールさせようなんてのはお節介。
と思ってる。

552 :デフォルトの名無しさん:2009/10/04(日) 22:08:41
>>545
なら問題ないんじゃない?
C#やりたてのころに痛い目にあったことが1回だけあったけど、何かはど忘れしちゃった。
明日まで覚えていたら会社のSVN覗いてみるわ。


553 :デフォルトの名無しさん:2009/10/04(日) 22:26:39
コンストラクタはインスタンスの初期化
LoadはFormの読込み
Shownは表示後

ちゃんと役割があるんだからそれぞれに書いた方がいいと思う

554 :デフォルトの名無しさん:2009/10/04(日) 22:33:17
LoadはVBの名残みたいなもん

555 :デフォルトの名無しさん:2009/10/04(日) 22:38:56
そんなことはない
FormがShowされるときにすべき処理はLoadに書くべき
コンストラクタはあくまでインスタンスの初期化処理だけのほうがいい

556 :デフォルトの名無しさん:2009/10/04(日) 22:51:23
>>553-555
正直、どれもよくわからん俺様ロジックにしか聞こえない。
そんなことはない、というなら聞くが、じゃあ結局>>536の質問には何と答えるんの?

っていうか、そういう意味論にこだわるなら、設定値を読み込んで適用するような処理は
InitializecComponentsの後が一番適切に思えるが。

557 :デフォルトの名無しさん:2009/10/04(日) 23:00:30
> 正直、どれもよくわからん俺様ロジックにしか聞こえない。

イベントドリブン全否定?
俺様ロジックの俺様というのはC#開発者のこと言ってるんだよな?

558 :デフォルトの名無しさん:2009/10/04(日) 23:17:49
>>557
日本語読める?
だからね、一般論として、コードは意味的に適切なタイミングで
実行されるように書くべき、というのはその通りだけども、
じゃあ設定を読み込んで反映するのに適切なタイミングっていつだっての。

そんなもの、答えなんかないだろう。
「設定を読み込んで反映すべきタイミング」の意味を与えられたイベントなんて存在しないのだから。
イベントの意味なんかにこだわりすぎると、結局そんな処理なんかどこにも書くべきでない、
って結論にならざるをえない。

559 :デフォルトの名無しさん:2009/10/04(日) 23:37:07
>>558
あなたの言ってることの方がよっぽど俺様ロジックに聞こえるけど
コンストラクタはインスタンスが生成される瞬間に実行され、
インスタンスの初期化のための引数を渡す機能を持っている
コンストラクタが一つなら、その設定やらに渡す引数も一緒に渡してやれば良いけど
そんなやり方推奨する人どのくらいいるだろうね

560 :デフォルトの名無しさん:2009/10/04(日) 23:42:15
public Form1() : this(null)とか使おうよ

561 :デフォルトの名無しさん:2009/10/05(月) 00:08:53
>>560
ごめん。どっかいっててくれるかい?

562 :デフォルトの名無しさん:2009/10/05(月) 00:30:17














563 :デフォルトの名無しさん:2009/10/05(月) 00:30:38
Formを継承して「設定を読み込んで反映すべきタイミングのイベント」を追加する

564 :デフォルトの名無しさん:2009/10/05(月) 00:35:18
そう言うようなことは普通にやるけど、「どのタイミングが最適か」って答えは出ないんだよね。

565 :デフォルトの名無しさん:2009/10/05(月) 01:03:08
>>559
結局どうすべきだと言いたいの?

というかね、コンストラクタが多重定義したい場合で、
かつどのコンストラクタにも共通する処理がある場合は、
どのコンストラクタからも特定の一つの別のコンストラクタを呼ぶようにするか、
共通部分をメソッドに括り出して呼ぶようにするでしょ。

それを忘れたらどうするのかって?
それはただの「バグ」であって、そんなケースを槍玉に挙げてなんの意味があるのよ。

566 :デフォルトの名無しさん:2009/10/05(月) 01:04:10
横からその問題だけに絞って考えると、感覚的にはファイル
アクセスなら Load かなぁ。
設定ファイルなら…んー、コンストラクタでもぎりぎりアリか。


567 :デフォルトの名無しさん:2009/10/05(月) 02:42:08
俺ならそもそもFormのインスタンス生成前に読んじゃうかなあ
多重起動チェック→設定読む→Application.Runみたいな流れ
設定にもよるけど

568 :デフォルトの名無しさん:2009/10/05(月) 10:09:37
まあ、ハンドル云々というのでなければコンストラクタでいいと思う。

569 :デフォルトの名無しさん:2009/10/05(月) 14:23:18
「List<string> s 」に入ってる文字をlistboxに表示したいです。

listBox1.Items.Add(s);

とすると(コレクション)と表示されてしまいます。


570 :デフォルトの名無しさん:2009/10/05(月) 14:30:21
・AddRangeする
・DataSourceに設定する

571 :デフォルトの名無しさん:2009/10/05(月) 15:16:32
下記で出来ました。
string[] ss = new string[s.Count];
for (i = 0; i < s.Count; i++)
{
ss[i] = files[i];
}
listBox1.Items.AddRange(ss);

一度で出来ないのですね。
ありがとうございました。

572 :デフォルトの名無しさん:2009/10/05(月) 15:23:57
AddRange使って一発でやりたいならToArray使えばいいじゃない

573 :デフォルトの名無しさん:2009/10/05(月) 15:26:07
あとDataSourceなら
listBox1.DataSource = s;
だけだし。

574 :デフォルトの名無しさん:2009/10/05(月) 20:13:19
自分の実力が足りないだけなのに言語のせいにされたらたまらんわ。

575 :デフォルトの名無しさん:2009/10/05(月) 20:35:38
おまえらどんだけ被害妄想wwww


576 :デフォルトの名無しさん:2009/10/05(月) 20:57:24
ディスプレイから女の子を救い出すプログラムをC#で移植してます。
C#では無理なんでしょうか。VBではうまくいったんですけど・・・

577 :デフォルトの名無しさん:2009/10/05(月) 21:02:52
どこが動かないのか詳しく。質問が大雑把過ぎて問題がわからない。

578 :デフォルトの名無しさん:2009/10/05(月) 21:10:59
美少女ゲームの彼女をリア

579 :デフォルトの名無しさん:2009/10/05(月) 21:22:21
では将軍様、そのディスプレイから女の子を追い出してください

580 :デフォルトの名無しさん:2009/10/05(月) 21:26:51
全財産はたいてもいいから俺によこせ

581 :デフォルトの名無しさん:2009/10/05(月) 21:32:41
WinXP Pro SP3, VS2008 sp1, .net 3.5 sp1での質問です。
言語はC#を利用しており、COMコンポーネントの開発を行っています。

下記のような簡単なクラスを作成し、RegSvr32.exeを実行したところ、下記のようなエラーが発生しました。
このようなエラーが発生した場合の対処法と原因について教えていただけないでしょうか?
よろしくお願いいたします。

------作成したクラス-------
using System;
using System.Runtime.InteropServices;
using System.Text;
namespace Test
{
[ClassInterface(ClassInterfaceType.None)]
[ProgId("Test.Test")]
[Guid("00BB6C80-C01D-4D64-A66B-F5D847480B09")]
public class Test
{
public string Test(string s, int m, int n)
{
return "abc";
}
}
}
---------------------------
------[[エラー]]-----------
.\Test.dll は読み込まれましたが、DllRegisterServer エントリ ポイントが見つかりませんでした。
このファイルが登録されていない可能性があります。


582 :デフォルトの名無しさん:2009/10/05(月) 21:36:30
.NETのアセンブリの場合regsvr32じゃなくてregasm使う

583 :デフォルトの名無しさん:2009/10/05(月) 22:04:48
Tlbexp.exe

584 :デフォルトの名無しさん:2009/10/06(火) 17:03:58
プロセスの一覧で、引数を知るにはどうしたらよいですか?
Notepadを複数起動していて、a.txtとb.txtを開いているときに、a.txtのほうのNotepadのプロセスを取得して終了したいです。
System.Diagnostics.Process[] ps = System.Diagnostics.Process.GetProcessesByName("Notepad");
で引数なしなら取得できます。
System.Diagnostics.Process[] ps = System.Diagnostics.Process.GetProcesses();
で、プロセスの一覧はできます。
デバッグでどちらを見ても、ファイル名が見当たらないのです。
探し方が悪いのかもしれません。
ご指摘お願いします。


585 :デフォルトの名無しさん:2009/10/06(火) 17:12:54
WMI使ってWin32_ProcessのCommandLineプロパティ取得するのが手っ取り早い
けどファイルを開くで開いた場合を気にしなくて良いの?

586 :デフォルトの名無しさん:2009/10/06(火) 17:19:14
WebRequest/WebResponse って最初に呼び出すときに結構時間がかかります?
数秒〜数十秒くらい

587 :デフォルトの名無しさん:2009/10/06(火) 17:20:22
Win32_ProcessのCommandLineプロパティで、
"C:\WINDOWS\system32\NOTEPAD.EXE" C:\a.txt
"C:\WINDOWS\system32\NOTEPAD.EXE" C:\b.txt
は取得できました。
これを終了するのって、どうするんですか?
それぞれのプロセスの個別の取得方法がわからないです。
NOTEPADのプロセスは取得できるけど、それだとaとbを区別できないし。

ファイルを開くで開く場合は、とりあえずいまは関係なしです。


588 :デフォルトの名無しさん:2009/10/06(火) 17:24:57
>>587
強制終了させるなら、目的の引数を持ってるWin32_ProcessのTerminateメソッドでいい
内容変更時に保存ダイアログが欲しいなら、Win32_ProcessのProcessIdを使ってProcess.GetProcessByIdしてCloseMainWindow

589 :デフォルトの名無しさん:2009/10/06(火) 19:35:56
>>588
なんとなくできたっぽいです。
ありがとうございました。


590 :デフォルトの名無しさん:2009/10/06(火) 22:42:55
>>586
http://kakikukekou.blog83.fc2.com/blog-entry-517.html

591 :デフォルトの名無しさん:2009/10/06(火) 22:47:32
>>586
WPADやなんやでネットワークの応答速度によって時間が掛かる可能性はあるね

592 :デフォルトの名無しさん:2009/10/06(火) 23:37:29
>>586
数十秒もかからないけど 5秒ぐらいはかかってるかな

593 :デフォルトの名無しさん:2009/10/07(水) 08:58:18
非同期処理ってマルチスレッドってことなんでしょうか?

594 :デフォルトの名無しさん:2009/10/07(水) 09:07:37
基本的にはそう
スレッドじゃなくてプロセスだったりするかも知れないが
メッセージ使った擬似非同期とかな

595 :デフォルトの名無しさん:2009/10/07(水) 09:42:23
ありがとうございます

596 :デフォルトの名無しさん:2009/10/07(水) 12:11:48
文字列中の
\x28 などのエスケープ文字(?)を ( などに変換するのは
それぞれのエスケープ文字について一つ一つ string.replace などで置き換えるしかないのでしょうか?

597 :デフォルトの名無しさん:2009/10/07(水) 12:34:47
ソース上の文字列リテラルを置換したいのか、実行時に変換したいのか
まあString.Replaceってとこみると実行時の変換なんだろうけど
エスケープの方法なんて言語次第だから特にライブラリには存在してない
Regex.ReplaceでMatchEvaluator使うのが楽だろうねー

598 :デフォルトの名無しさん:2009/10/07(水) 13:10:36
string[] files = Directory.GetFiles(@"C:\Documents and Settings\username\Local Settings\Temporary Internet Files\", "*.jpg");
で空なのはどうしたら取得できますか?


599 :デフォルトの名無しさん:2009/10/07(水) 15:06:24
>>598
実際そこにファイルがないから

600 :デフォルトの名無しさん:2009/10/07(水) 15:11:55
どこにあるんですか?
調べたら、
その下に、Content.IE5フォルダがあるらしいので、SearchOption.AllDirectories
としても見つけられませんでした。

601 :デフォルトの名無しさん:2009/10/07(水) 15:42:13
エスパーさんお願いします

602 :デフォルトの名無しさん:2009/10/07(水) 15:44:11
そこには無いんだよ

603 :デフォルトの名無しさん:2009/10/07(水) 16:04:13
隠しフォルダの中にある隠しフォルダを探したいってことでしょ

Content.IE5の中には、さらにランダムな名前の隠しフォルダがたくさんあって、
ネットから取得したファイルの本体はそのランダムなフォルダの中に分散して格納してある。
何がどこにあるかはindex.datだったかに書いてある。

604 :デフォルトの名無しさん:2009/10/07(水) 16:09:26
delphi
s string;
SetLength(s, 64);

c#
string s;
サイズを指定するにはどうするんでしょうか?

605 :デフォルトの名無しさん:2009/10/07(水) 16:12:06
サイズを指定する必要はないんじゃね?

606 :デフォルトの名無しさん:2009/10/07(水) 16:13:58
Stringは変更できないのでそういうことはできません。
そもそも変更不可なので長さを伸ばすのは意味がありません。StringBuilderなどを使います。
長さを縮めるというか部分を切り出した新しい文字列を作るのはString.SubstringやString.Removeで可能です。

607 :デフォルトの名無しさん:2009/10/07(水) 16:16:19
base64とかで必要なんです。

608 :デフォルトの名無しさん:2009/10/07(水) 16:20:22
StringBuilder使えばいいじゃない

609 :デフォルトの名無しさん:2009/10/07(水) 16:21:06
つーかencodeing気にしなくちゃならんし、byte[]じゃだめなのか

610 :デフォルトの名無しさん:2009/10/07(水) 16:21:44
何が必要なのよ?

611 :604:2009/10/07(水) 16:23:20
d。やりたいことはStringBuilderで出来そうです。
ありがとうございました。

612 :デフォルトの名無しさん:2009/10/07(水) 16:24:09
base64は.NETの標準機能でサポートされてるけど

613 :デフォルトの名無しさん:2009/10/07(水) 16:53:28
http://www.atmarkit.co.jp/fdotnet/vblab/uiframework_02/uiframework_02_01.html

ここのソース貼り付けて実行したらWPFだとちゃんと動くけどSilverlightだと動かない
んですけどなぜなんです?

614 :デフォルトの名無しさん:2009/10/07(水) 16:55:19
試用なんだぜ

615 :デフォルトの名無しさん:2009/10/07(水) 18:10:55
>>603
Content.IE5フォルダの下に30JAKIJ7みたいなフォルダがあることはわかってます。

隠しフォルダのなかのファイルを再帰的に列挙するにはどうしたらよいですか?


616 :デフォルトの名無しさん:2009/10/07(水) 18:37:01
3番目にSearchOption.AllDirectoriesつけたら?

617 :デフォルトの名無しさん:2009/10/07(水) 18:52:44
>>616
SearchOption.AllDirectoriesは600でもう試しました。

618 :デフォルトの名無しさん:2009/10/07(水) 19:00:03
あのさー
こっちは実際に動かして出ることを確認してレスしてんだよ
エクスプローラで見るとそこにちゃんとあるのか?
環境は?
IEのオプションでもそこに設定してあるか?

619 :デフォルトの名無しさん:2009/10/07(水) 19:01:47
実体が無いんだろ

620 :デフォルトの名無しさん:2009/10/07(水) 19:28:10
>>618
失礼しました。
あらためてもういちどトライしたらできました。
すみません。ありがとうございました。


621 :デフォルトの名無しさん:2009/10/07(水) 22:57:34
しーね

622 :デフォルトの名無しさん:2009/10/08(木) 00:33:44
試してなかったのか試したつもりで見すってたのか
どっちにしろきちんと試さんと自分が困るだけだよ。


623 :デフォルトの名無しさん:2009/10/08(木) 01:29:24
>>618
ちゃんとこのスレにもまともな回答者がいたんですね。
尊敬します。これからも初心者を見捨てずお願いします。

624 :デフォルトの名無しさん:2009/10/08(木) 05:31:46
いままでまともな解答者がいないと思ってたのに質問してたのか
変なの

625 :デフォルトの名無しさん:2009/10/08(木) 07:44:34
リストボックスにアイテム追加して水平スクロールが出たとき、
水平方向の一番後ろを表示する方法を教えてください

626 :デフォルトの名無しさん:2009/10/08(木) 09:56:06
>>625
スクロールバーが出たときに一番後ろを表示すればいい

627 :デフォルトの名無しさん:2009/10/08(木) 09:56:54
>>625
ヒント:マウスホイール

628 :デフォルトの名無しさん:2009/10/08(木) 12:11:20
リストボックスに水平スクロールバーって出せたっけ?

629 :デフォルトの名無しさん:2009/10/08(木) 15:00:48
普通に出せる

630 :デフォルトの名無しさん:2009/10/08(木) 15:11:33
ActiveX 経由で Windows Media Plyaer を使おうと思います。

_player = new AxWindowsMediaPlayer;
_player.uiMode = "none";

とすると2行目でエラーが発生します。
まだ、ActiveX コントロールが生成されてないからと思います。

いまは、タイマーで __player.Created を監視して、
true になるのを待つという方法で回避していますが、
ActiveX コントロールが生成されたというイベントはないでしょうか?


631 :デフォルトの名無しさん:2009/10/08(木) 15:25:58
FormのLoadイベントでならだいじょぶ

632 :デフォルトの名無しさん:2009/10/08(木) 19:06:07
質問よろしいでしょうか?
Windowsでコピー&ペーストのペースト先の情報(ファイル名やファイルのパス)を得るにはどうすればよいでしょうか?
よろしくお願いします.

633 :デフォルトの名無しさん:2009/10/08(木) 19:27:01
C# ファイル ドロップ
でググる

634 :デフォルトの名無しさん:2009/10/08(木) 19:30:35
ペーストされたアプリの側の自由だろ
わかるわけがない

635 :デフォルトの名無しさん:2009/10/08(木) 19:37:09
すみません.言葉足りずでした
Windows上のアプリケーションを監視するソフトを考えているのですが,
例えば文字列をコピーしたものをパワーポイントに貼り付けた場合,
貼り付け先のパワーポイントのファイル名やファイルのパスを得たいという質問の内容です.


636 :デフォルトの名無しさん:2009/10/08(木) 19:57:33
もし、張り付け先がファイルとか扱わないソフトだったら?

637 :デフォルトの名無しさん:2009/10/08(木) 20:20:10
ペーストされたデータの扱いや、どのファイルを開いているかなどは完全にアプリケーションの責任
一般には対象のアプリのプログラムを意味論で解析でもしないかぎり不可能

638 :630:2009/10/08(木) 20:26:33
>>631
レスありがとうございます。
Loadイベントなら大丈夫とは知りませんでした。
しかし、今回は、フォームデザイナで配置して使用している訳ではなく、
コード内でオブジェクトを作っているため、生成済み通知してくれる
イベントがあればいいなと思い質問しました。

639 :デフォルトの名無しさん:2009/10/08(木) 20:33:56
タイトルバーにファイルパスやファイル名を表示するタイプのソフトなら
そっから取得できるか?すべてのソフトでどうなってるのか調べなきゃだが

640 :デフォルトの名無しさん:2009/10/08(木) 20:47:45
開いてるファイルとは全く無関係なところへのペーストだったら?
どう頑張っても使いものにならないから諦めろ

641 :デフォルトの名無しさん:2009/10/09(金) 06:18:21
asp.netにて リピーターを使ってDataTableをDataSorceにDataBindしています。
DataColumnとしてcolTitle, colValue があるとします。
asp側のコードで
<%# Eval("colTitle") %> <img src="./img/hoge.jpg"> <%# Eval("colValue") $#>
として colTitleとcolValueの間に画像を表示しています。
colValueは文字列で、文字列が空もしくはnullのとき、
hoge.jpgを表示させないようにしたいのですが、
どうしたらいいのかさっぱりわかりません。
<% if ([条件]) { %> <% } %> とするとデータバインド後に一回しか
実行されませんし、
DataBoundイベントを使った場合、どう記述したらいいのか思いつきません。
どなたか教えていただけませんか?

642 :641:2009/10/09(金) 06:20:08
<%# Eval("colValue") $#> 訂正→<%# Eval("colValue") #>
なんで$マーク。



643 :デフォルトの名無しさん:2009/10/09(金) 06:20:49
職業的にもCでは使えない状況ですし。


644 :デフォルトの名無しさん:2009/10/09(金) 10:44:22
お前の職業なんか知らぬ!

645 :641:2009/10/09(金) 15:38:44
自己解決。

231 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)