ふらっとC#,C♯,C#(初心者用) Part84
やっと構造体の使い方がわかった。みなさんありがとう。
6 :
デフォルトの名無しさん:2012/01/17(火) 19:32:57.79
FileSystemWatcher で 監視先をローカルの "c:\Test" に設定したところ、
ファイルの変更検知できるのは確認できました。
しかし、監視先のパスを別マシン (OS:WindowsServer2008)上の共有フォルダ
"\\ServerName\Test" に変更したところ、エラーはいっさい出なかったのですが、
ファイル変更を検知できませんでした。
また同様にネットワークドライブとして、"\\ServerName\Test" を "z:\" に
割り当て、監視先を "z:\" にした場合も検知できませんでした。
どうすれば、別マシン(ファイルサーバー)にある
ファイルの変更を検知できるようになるのでしょうか?
ついでに
>イベントを見落とさないために、次のガイドラインに従ってください。
>*InternalBufferSize プロパティを使用してバッファ サイズを大きくすることで、
>ファイル システム変更イベントの見落としを予防できます。
>*ロング ファイル名を使ってウォッチすることは避けます。短い名前に変更することを検討してください。
>*イベントの処理コードをできるだけ短くします。
9 :
デフォルトの名無しさん:2012/01/17(火) 20:24:35.15
最近C# 製のツールをよく見かけるようになったな
10 :
デフォルトの名無しさん:2012/01/17(火) 20:27:10.41
??演算子ってnull「結合」?「合体」??1万年と2千年前から???
>>7 >>8 バッファサイズ相当大きくしても変化なしです。
ネットワーク越しでも普通にイベント発生してるんですかね?
>ローカル コンピューター、ネットワーク ドライブ、またはリモート コンピューターのファイルをウォッチするコンポーネントを作成できます。
この記述が嘘でなければ発生してるはずだが…
実はMSDN見ながら答えてるだけで実際に使ったことはないんだyo
特にネットワーク越しで使用するときの注意点とか書いてないから
イベントは発生してると思うんだけどね
>バッファサイズ相当大きくしても変化なし
>バッファーは 4 KB 以上に設定できますが、64 KB 以下である必要があります。
>InternalBufferSize プロパティを 4,096 バイト未満に設定しようとした場合、
>値は破棄され、InternalBufferSize プロパティは 4,096 バイトに設定されます。
>最適なパフォーマンスを得るには、Intel ベースのコンピューターでは 4 KB の倍数を使用します。
らしいけど「64Kb以下かつ4Kbの倍数」になってる?
Windows7 32bitの共有フォルダを
Windows7 64bitのZ:\に割り当てて監視したけど検知できるなぁ
InternalBufferSizeはデフォのまま。
>>12 VS2010版にはnull合体演算子って書いてあるがな…
C#を始めて間もないので、クソみたいな質問ですが、答えてくれると嬉しいです。
Form1がメインウィンドウでForm2が設定画面、という形式のツールを作ってます。
Form2ではListviewを使って設定を管理しているのですが、
Form2を閉じたときにForm1にListviewの中身を送りたいです。
Form1でそれを設定として読み込んで、別の処理をさせたいのです。
フォーム間でのデータの受け渡しのサンプルはいくつかあったのですが、
配列を送るにはどのような形で実装したらいいでしょうか?
クラスを作って送るのが良いのかなと思いましたが、
クラス自体まだよく分かってないのです。
できればサンプルコードが載ってるページとかあると嬉しいです。
19 :
デフォルトの名無しさん:2012/01/17(火) 22:54:26.32
そういうのは直接オブジェクトを送ったりしないで分離しちゃった方が複雑にならないと思う
設定を持つクラスをシングルトンで共有するとか、いったんファイルに書きだして
それを改めて読み込むとか
public static class Setting {
. publid static Data[] Data;
}
みたいなの作ればいい
モーダルダイアログならForm2.GetResultメソッドでも書いてみれば
そこで配列化して返せばいいでしょ
・設定値だけを保持するクラスを用意する
・Form1は設定クラスにデータバインド
・Form2を作る時に設定クラスのインスタンスを渡す
・Form2はインスタンスをコピーして、そちらを変更する
・Form2でOKや適用が押された場合、設定値を最初に渡されたForm1の設定インスタンスに反映する
て感じでINotifyCollectionChangedを使うといいよ(ニッコリ
class Form2 : Form {
. public Data[] Data;
. ...
}
みたいにメンバ変数を宣言。
Form1 クラスで、
void button1_Clicked(object sender, EventArg e) {
. var dialog = new Form2();
. dialog.ShowDialog();
. Console.WriteLine(dialog.Data);
}
>>19-23 うおお、短時間でこんなにw
本当にありがとうございます。
皆様レスを頼りになんとか頑張ってみます。
>>15 あ、64KB超えてたかもしれません。
ひょっとすると、送信できるサイズの上限超えてたから、
イベントが送信されてなかったのかな?
特に例外発生していなかったから、見落としてたが、
バッファから溢れた場合もエラー吐いてなかったし、
不適切なサイズを指定した場合もひょっとして例外は発生しないのか?。
いまは実行できる環境にいないので、とりあえず明日試してみます。
>>25 いつも思うけど全く読みたくなくなるチュートリアルは誰のためにあるんだろ
MSは現状把握してるのか
MSの中の人は賢い奴ばかりだから俺らの知的レベルなんてわからんよ。
getdirectoriesでフォルダを列挙する際にアクセス拒否のフォルダがあった場合
そのフォルダを無視して作業を続行するにはどうすればよいでしょうか?
以前ここでtry-catchを使えと言われたんですが
string[] subFolders = System.IO.Directory.GetDirectories(
@"C:\test", "*", System.IO.SearchOption.AllDirectories);
このような場合どうすればいいんでしょうか
2010Express を使ってるんだけど、これって条件付きブレークポイントは使えないんでしたっけ?
前のバージョンだとブレークポイントを示す赤い玉の上で右クリックで条件を設定するウィンドウが出たような気が。
C++だったんじゃね?
>>30 そこまで操作するならDirectoryInfoクラス使うべきだよ
そっち使って色々試してみたらいい
34 :
デフォルトの名無しさん:2012/01/18(水) 14:31:55.79
C#ではenumがintじゃない。
では普通は何を使うものなのでしょう?
enumはenumだよ
>>35 独立した型。
内部ではintとして扱かわれていることが多いけど
なんでそれをここで聞くんだろう。
>>35 名前付き識別子。
enumを定義するとクラス同様に型として認識されるので、内部の扱いがintであっても別物になる。
でも、bit演算に応用したりもできる。
しかしEnum自身はクラスなんだよな
言語仕様的に本当にそれで良いのか?
CIL的に、プリミティブな数値、配列、列挙型は特別扱いされてるからなぁ。
C# 以前の問題。
Enumはクラスかもしれないが
値は定数だろ
失礼します。
C++で作成されたdllにポインタを渡したいのですが
[StructLayout(LayoutKind.Sequential]
public struct hoge
{
Public UInt32 aaa;
Public Uin64 bbb;
Public IntPtr ccc;
(その他配列等色々)
}
で宣言された構造体のポインタのポインタを渡すにはどうしたら良いのでしょうか?
C++の関数宣言は
ret hage(hoge** test);
ですが、C#で ret hage(ref hoge test);ではtestの先頭にアドレスっぽい値が入っていました。
さらにtestも配列なので、少し混乱しています。(構造体の配列のポインタのポインタ 構造体の中にも配列やポインタ有り)
ttp://oshiete.goo.ne.jp/qa/2119623.html を参考にしようとしてみましたが、hoge* testと書くとマネージ型のアドレスの取得は出来ませんと出てしまいます。
よろしくお願いします。
配列に入れて配列をrefで渡せばいいんじゃないの
ret hage(ref hoge[] test);
それもやってみたのですがC#で、
hoge[] test = new hoge[10];と宣言し
ret = hage(ref hoge test);
とやると、ここでtry~catchすらすっとばして関数を無理矢理終了させてしまいます。(エラー表示は一切無し)
そのtestって出力なのか?入力なのか?両方か?
出力です。
outでもやってみましたが、結果は同じで先頭だけnullから数値に変わってました。
[*hoge, *hoge, *hoge, *hoge]
C++が要求しているもの
*[hoge, hoge, hoge, hoge]
>>44の浅知恵
unsafeかGCHandleでIntPtrを配列に入れてしまうのが手っ取り早いんではないか
hogeがクラスならhage(hoge[] test)で問題ない気がするが
構造体使ってるのは何か意味があるか?
意味とか考えちゃ駄目だ
StructLayoutは構造体にしか使えないと勘違いしていた時期が私にはあった。
52 :
43:2012/01/18(水) 19:20:08.52
hogeが画像データだからです。
構造体の中のポインタが画素値で、整数値がパラメータです。
画像を複数枚扱うので、hogeも配列になっています。
C++の要求がhoge** testなので、枚数分ループしていますが
unsafe hoge* testを行うとマネージ型のアドレスは取得出来ませんと表示され、
hoge[]test と書くとtryすら無視して関数を終了してしまうのが現在の状態です。
画像データだから構造体ってのはちょっと理屈が通ってない気がする
フォームにMenuStripをおきました
そしたら「ここへ入力」ってところがあったのでファイルって書きました
入力した所をクリックするとサブメニューが出てきたのでそこに終了って書きました
これで終了を押すとプログラムを終了するだけのプログラムを作ろうと思ってます
そこで終了をダブルクリックしたらForm1.csに以下のように
private void 終了CToolStripMenuItem_Click(object sender, EventArgs e)
{
}
ってコードの中に日本語がまじってしまうんですが(終了CToolStripMenuItem_Clickの部分)
これって問題はないのですか?
メニューを作るときってこういうものとして思えばいいですか?
文法的な問題はない
やってる人がいるかって言われると100人に1人よりは少ないと思う
56 :
43:2012/01/18(水) 19:41:37.44
すいません、確かに画像データだからと言って構造体である必要はないですね。
ttp://d.hatena.ne.jp/Schima/20090512/1242139542 を参考に
int sz = Marshal.SizeOf(test[i]);
IntPtr ptr = Marshal.AllocHGlobal(sz);
Marshal.StructureToPtr(test[i], ptr, false);
res = hage(ref ptr);
と、やってみましたがダメでした。
場当たり的にやってると1ヶ月かかるぞ
ret = hage(IntPtr[] test);
まずこれでどうぞ
IntPtrの配列にhogeを1個1個収めたまえ
58 :
デフォルトの名無しさん:2012/01/18(水) 19:53:03.63
unsafe static ret hage(hoge** test);と宣言して
hoge[] buf = new hoge[枚数];
fixed (hoge* pBuf = buf) {
hoge* temp = pBuf;
hage(&temp);
}
とかじゃないの
どうせやってることが既に安全じゃないからunsafeでいいよ
59 :
58:2012/01/18(水) 19:55:44.48
すまん
>>58は勘違い
なんか意味ないことやってるな
60 :
デフォルトの名無しさん:2012/01/18(水) 20:04:55.46
俺の知人のタマキンが下痢で
今日も部屋に篭ってAVで射精してる
こうかな
hoge[] a = new hoge[枚数];
fixed (hoge* pa = a) {
hoge*[] b = new hoge*[枚数];
for (int i = 0; i < 枚数; i++) b[i] = pa + i;
fixed (hoge** pb = b) { hage(pb); }
}
そのうち画像は取れたんですが何度か画像取ってるうちに
重くなってハングアップしてしまいます
なぜでしょうかという質問が来るのではないか?
>>28 昔からヘルプの使いやすさはボーランド(エンバカデロに開発部門売却前のね)
情報量はMSってのは言われてたな
summaryの書き方を教えてください
例えば以下のような場合はなんて書きますか?
private void test(string str)
{
this.abc = str + "@@@@@";
}
/// <summary>
/// 知らねーよ
/// </summary>
初心者なので試しに空のプロジェクトから作っているのですが、
フォームアプリの時に自動でできるprogram.csという項目は後から追加するにはどうやればいいですか?
>>64 それじゃ「テスト用」以上の何も書けない。
ファイラーをつくりたいのですが
名前でソート、更新日時でソートなどをする場合はlistboxとかlistviewとかありますが何をつかうのでしょうか?
Datagrid
71 :
43:2012/01/18(水) 22:42:23.27
>>57 シンプルなのが一番ですよね。
ちょっと試してみます。
>>61 fixedで確保しながらやるのも良さそうですね、ありがとうございます。
>>62 とりあえず、メモリリークだけは無いよう気をつけます。
指定したファイルの「種類」を取得する方法を教えてください
「種類」とはエクスプローラにあるやつです
a.txtだったら「テキストファイル」
b.chmだったら「コンパイルされた HTML ヘルプ ファイル」
というのです
>>64 必ずsummaryを書く
/// <summary>
/// 何かを行います。
/// </summary>
引数がある場合、インデクサの場合はparamを付ける
paramにはseeで型へのリンクを付けとく
/// <param name="str">
/// 何かを表す<see cref="T:System.String" />。
/// </param>
戻り値がある場合はreturns
// /// <returns>戻り値の説明です。</returns>
プロパティの場合はvalueを書く
// /// <value>プロパティの説明です。</value>
あと発生する可能性のある例外を列挙する
// /// <exception cref="T:System.Exception">気が向いた場合。</exception>
ジェネリックならtypeparamとかも要る
>>43 遅レスだが
out IntPtr hogePtr
で受けとって、Marshal.PtrToStructureでいいんじゃないの?
>>66 普通に Program.cs って名前のソースコードを追加するだけ。(名前は何でもいいけど)
ソリューションエクスプローラーから今作成しているプロジェクト名の項目を
左クリックして追加 -> クラス
Program.cs には Main メソッド (エントリーポイント) があるだけで、
他のソースファイルと違うところ(設定とか)は特にないよ。
ソースの中身はいつも自動で作成されているコードを書けばいい。
Main メソッドには [STAThread] ってのをつけておかないと
フォームアプリは動作しないからつけること。(コンパイルエラーが出ると思う)
>>74 わかりやすい解説です
ありがとうございます
大丈夫だ問題ない。
>>72 SHGetFileInfo + SHGFI_TYPENAME
C#のウォッチ式は型指定のみのようですが、
C++みたいにポインタの参照先の値を見るにはどうすれば良いのでしょうか?
例)void* hoge;
C++のウォッチ式:(int*)hoge,50
(とりあえずint型にして50個表示させてみる)
よろしくお願いします。
イミディエイトウィンドウ
ポインタなんてc++と連動させる時以外使うなよ
このスレで質問してばかりなのでプログラミングC# 第6版を買おうと思うのですが、入門書は既に独習C#を持っています。
買う意味ありますかね?ウェブよりわかりやすいというレビューがありますがステマでしょうか?
>>85 ありがとうございます。情報量とわかりやすさがかなり上だと思うので買います。
俺、ステマみうたいだな。
ButtonにImageを設定してSizeを設定しました。Imageはきっちり正方形で、Sizeもそれにあわせて
正方形です。具体的にはImageが32x32でボタンが38x38。またAutoSizeはFalseで、DockはNoneです。
開発したPC(Win7)だと意図通りに正方形のボタンが表示されますが、別のPC(Win7)で実行したところ
Imageの両脇に数ピクセルの余白は表示されてやや長方形のボタンになってしまいます。
AutoSizeがTrueだとImageだけのときなら大丈夫ですが、テキストも可変で重ねるためその対処はとれません。
なにか原因と対策こころあたりありませんか?
TabControll内の特定のTabPageの中にButtonやらLabelやらlistviewを置いているのですが
このTabPageを tabControl1.TabPages.RemoveAt(3);みたいに消した場合って中に配置したコントロールも全て削除されているのでしょうか?
削除って曖昧だな
コントロールのツリーから消えてることは間違いないが
メモリから消えているかとは別問題だ
親のコントロールが消えても一緒に消えるってわけじゃないんですね
念のためそれぞれ指定して消すようにします
Labelをコード内から動的に生成しているのですが
ラベルの一番最後のやつのTextを変更したいのですが
一番最後のラベルにアクセスする方法を教えてください
生成するたびにフィールドにもっておけばいいだろが
93 :
88:2012/01/19(木) 19:39:48.81
一応タブを消した後にlistviewにアクセスできるか試してみたいとおもったんですが
こう書くとそもそもタブは消えてるのでアクセスできません
テストできる方法を伝授してください
if (null != tabControl1.TabPages[5].Controls["listView1"])
{
MessageBox.Show("true");
}
else
{
MessageBox.Show("false");
}
機嫌がいいからスーパーヒントくれてやるよ
ListView lv = tabControl1.TabPages[5].Controls["listView1"];
>>93 答から言えば中のコントロールのDisposeメソッドは呼ばれない
ただ、どこからも参照されていなければGCによって破棄される
アンマネージリソースをフレームワークが知らない形で持っていたらリークするが
それもプロセスが終了する時点で解放される
部品のプロパティをメソッドの中で何回も呼び出して使う場合は変数に入れたほうが効率が良いものですか?
label1.Textだったら毎回label1.Textって呼び出すよりも
string label = label1.Textって感じで変数にいれたほうがよいとかありますか?
呼び出しに時間がかかるならそうだし
時間がかからないならそうでもない
普遍な答えはない
参照を辿るコストって考えたことないがどのくらいなんだろう
>>98 そんなもん全く全然関係ない
Textプロパティのgetアクセサがどう実装されてるかによる
>>94 ListView lv = (ListView)tabControl1.TabPages[0].Controls["listView0"];
if (null != lv)
{
MessageBox.Show("true");
}
else
{
MessageBox.Show("false");
}
って書いてTabPage[0]のタブを消してから実行したらfalseになりました
でもこれもtabControl1.TabPages[0]が消してからなのでlistViewが消えていrかどうかは分かりません
>>95 タブにlistviewを表示するだけなのでタブを消した時点でkistviewも破棄されたとみなしていいのですね
念のためコントロールを削除するようにするのがバグを生まないのかもしれないので手動で削除するようにします
>>100 listViewをどこで宣言したかによる。
デザイナーで追加したコントロールならフォーム閉じるまで残ってる。
メソッドのスコープで宣言して追加したコントロールなら
>>95の言うようにCG対象になる。
>>100 フォームには予めデザイナーでTabControllのみ置いてあり
tabPageとlistViewはコードの中で生成してます
なのでtabPageを削除したらlistViewも勝手に削除されるってことでしょうか
と、ここでトラブルに遭遇したのですが
動的にtabPageとlistViewを5つ作成すると、tabPageは左からインデックス0~4までになります。
ここでインデックス2のtabPageを削除すると、削除したtabPageから右側のtabPageのインデックスが変わってしまいます。
インデックス3のものが2に、インデックス4のものが3になるってことです。
tabPageとlistViewを作るとき
ListView lv = new ListView();
lv.Name = "listView" + (tabControl1.TabCount - 1).ToString();
といった感じでtabPageを追加したときのインデックスをlistViewにつけて作成しているので
インデックスが狂うとlistViewへアクセス(※後でプロパティを変更するときなど)できなくなってしまいます
これの解決法をアドバイスお願いします
その追加方法ならTabPages.Controlsの中にはListView1個しかないわけだろ
for (int i=0; i<TabPages.Controls.Count; i++) {
if (TabPages.Controls[i] is ListView) {
ListView lv = TabPages.Controls[i];
}
}
とでもやって探せばいいだろが
iOSのようなスクロールをさせたいのですがどういうロジックに
すればいいでしょうか?
すみません。できました。
>>103 0,1,2,3,4 tabPageのインデックス
0,1,2,3,4 listViewのNameのお尻につく番号(listView0、 listView1・・・)
ここでtabPageのインデックス2を消す
0,1,2,3 tabPageのインデックス
0,1,3,4 listViewのNameのお尻につく番号(listView0、 listView1・・・)
ここで新たにtabPageを追加する
0,1,2,3,4 tabPageのインデックス
0,1,3,4,4 listViewのNameのお尻につく番号(listView0、 listView1・・・)
同じ名前を持ったlistView(インデックス3・4のlistView4)が出来てしまいます
名前ぐらい自分で変更しろよ
その設計が腐ってるんだろ
インデックスとかそれを含んだName文字列なんてタコなものじゃなくて他のidentifierで管理しようよ
tabpagesをグローバルなコレクションにいれておけばいい
>>106 c#以前の問題だなw
問題
複数あるものにそれぞれ一意の番号(被らない番号)をつけるにはどうしたらいいか?
一郎二郎三郎四朗さん四兄弟がいました
不幸なことに病気で二郎さんが亡くなりました
そのあとまた男の子が生まれました
子供を数えると三人いました
そこで四人目の子供に四朗と名付けました
結果として兄弟に二人の四朗がいます
ありえないだろ?
>>107-111 Nameにランダムな文字列をつけてみました
これでインデックスを気にしなくてよくなりましたがこれでいいのでしょうか?
名前がかぶってソフトがフリーズする未来が見えた
ちょうど今俺が、ソフトを2回起動するとWindows7がフリーズして悩んでいるところだw
もうGUIDでも使えよw
>>112 誰がランダムな文字列つけてみろと言った?
人の話を聞かない奴に質問する権利はない
一人で一生悩め
スレッドを使い方を勉強したいため、1秒毎にフォームタイトルをtickで書き換えたいのですが
「有効ではないスレッド間の操作: コントロールが作成されたスレッド以外のスレッドからコントロール 'Form1' がアクセスされました」
というエラーが出てしまいます。どなたかご教示お願いします
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace Test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Thread t1 = new Thread(new ThreadStart(TextChanger));
t1.Start();
}
private void TextChanger()
{
Text = new DateTime().Ticks.ToString();
Thread.Sleep(1000);
}
}
}
Invoke
そのエラーをググレ場言い発でわかる
あと、そのコードだとエラーがでなくても
Sleep(1000)したあとにそのスレッドが終了するゾ
これを解決するのもスレッドの勉強じゃないかしら
今後直接Thread使う機会ってあるのかね
C#ではThread直接使うとむしろ性能的に良くないけども、
少し古い情報とか、他の言語の情報で、非同期処理=スレッドって認識できちゃってる人多いしねぇ。
どうしたもんか。
黒歴史
LOL
ListView1個配置するだけでその100倍メモリくっとるがな
気にするポイントがずれてる
目の付け所がシャープじゃない!
何故Nameで管理してはダメで配列で管理をしないといけないのか分かりません
貴方がNameで管理しててトラブったということは
貴方が使うには手に余るってことでしょう
Dictionary<Guid, ListView>
TabPage.Tagにでも入れとけとは誰も言ってくれないんだな。
Tagはオワコン
え~だってこの質問者なら「こんな便利なものがあるんですね!ありがとうございます!」と言ってくれそうな気がするよ
まぁGuidで解決したんならいいんじゃないの
それで
>>129 インデックスを元にNameをつけていましたがそれをランダムな文字列を元にしたらできましたが
この方法が何故ダメだという理由が知りたいだけです
別に私は配列を教えてくれた方の人格を攻撃しているわけでもないので
そのGuidで生成した名前はどこかに取ってあるわけだろ?
なぜそこにListViewを代入しておくという発想にならないんだろうか。
>>135 メモリを食うのが嫌なんだろ?
だったら配列にすべきだ
ほら、一箇所にまとめておかないと無くしちゃうだろ?
無くしちゃったらガベコレ来るまで破棄できなくてメモリの無駄でしょ?
メモリの無駄だから死んで
お前らイジメすぎだぞ!ここは初心者スレなんだから優しくしろよ
このやろう!!!!!!!!!!!!!!
難しくてよくわかんねえよっ!!!!!!!!!!!!!!!!!!
メモリの無駄だから「!」は一つにしてくれ
Lisperも括弧を節約するように
>>142 コンパイル時に消えるような小手先の最適化は好むべきではないと考えます。
javaみたく === が輸入されてきたりしないよな?
>>135 インデックスを元にNameつけないで全部同じ"listView"ってNameにすればいい。
GUIDの生成はメモリ食いませんか
すべてのNameにGUIDみたいな長い文字列を設定するとメモリ食いませんか
GUIDは128bit
>>147 おそらく、
>>93に書いてあるみたいに
>tabControl1.TabPages[5].Controls["listView1"]
っていう風に名前指定で取りたいだけだと思うから、タブページ内でかぶらなければ問題ないんじゃない?
listViewはコード中で生成しているみたいだし。(
>>102 )
千七百九十六郎 二百五郎 二万五千とんで三郎 九十八万四千八百九十一郎の兄弟がいました…
>>125 おい誰も配列にしろなんて言ってないだろ
>>111の件をまじめに考えてみろ
なんで普通は被らない名前つけてるか?
>>151 >なんで普通は被らない名前つけてるか?
誰宛?
153 :
152:2012/01/21(土) 00:47:48.33
ごめん勘違いしてた。忘れて。
自作のクラスでエラーが発生した時に呼び出したところでエラーを受け取る際のエラー番号や説明を定義する方法を教えて
(戻り値は別の結果を受け取るために使いたいので使えません)
public class HogeException : Exception {
public HogeException(string message) : base(message) { }
}
エラーを起こしたい場所で
throw new HogeException("Hogeに失敗しました。");
>>149 同じ名前のコントロールって使えたっけ?
>>157 名前って何いってんの?
Nameプロパティのことだぞ?
>>158 Nameプロパティってユニークなものじゃないといけないんじゃないの?
学校でそう習ったけどさ
161 :
160:2012/01/21(土) 11:48:06.64
Form1のRefresh()でForm1_Loadを再読み込みすることでできたっぽいですが
何か問題ありますでしょうか
>>159 コンテナごとにユニークじゃないとControlCollection.Item[string]で取得できないってだけじゃね
Nameでコントロール特定しようとか糞なことしなければどう使っても問題ない
>>160 問題ないけど
VB系の機能を持ち込むのは気持ち悪いという問題が……
しかしWCFは(このスレのレベルでは)難しいかも
http://msdn.microsoft.com/ja-jp/library/system.icloneable.clone.aspx に書いてあるColumnHeaderのコピーの方法を教えてください
ColumnHeader[] columnHeader1 = { column1, column2 };
ColumnHeader[] columnHeader2 = = (ColumnHeader[])columnHeader1.Clone();
listView1.Columns.AddRange(columnHeader1); // ここの行をコメントアウトすると例外がでない
listView2.Columns.AddRange(columnHeader2);
ってやると例外が出ます↓
複数の場所にアイテム '名前' を追加または挿入することはできません。最初に現在の場所から削除するか、複製を作成しなければなりません。
ColumnHeader[] columnHeader1 = { column1, column2 };
ColumnHeader[] columnHeader2 = { (ColumnHeader)column1.Clone(), (ColumnHeader)column2.Clone() }
配列に対してCloneを呼んだ場合は「配列が」コピーされる
中身はコピーされていない
Hashtable threadpool = new Hashtable();
(略)
lock (threadpool){
if (threadpool[name] == null) {
threadpool[name] = new Array();
}
threadpool[name].Add(thread);
}
ってな感じでnullチェックをしているのですが、Addでぬるぽで落ちる場合が
あって困っています。
threadpool[name]は別スレッドで用済みになったときにnullにしています。
なのでその対策としてlockしているつもりなのですが、どうやら使い方を
間違えているようです。正しくはどうすべきなのでしょうか?
”別スレッドで用済みになったときにnullにして”いる時にもlockをしてるか?
ArrayにAddなんてないのにAddしてるのも奇怪
あと.NETのバージョン2.0以上ならDictionary使えよ
.net2.0から使えるディレクトリやファイル一覧の取得メソッド
.net4.0から使えるディレクトリやファイル一覧の取得メソッドあるじゃないですか
やっぱり.net4.0から使えるメソッドのほうが早いのでしょうか?
>>169 してないっす。ありがとうございます。
>>170 記憶をたどって書いたのでArrayじゃなかったかもしれないです。
>>171 手が付いてるなら自分で測ればいい。
ここで適当な答えを返されたとしても、自分で確かめないのならお前はそれを信じるしかないんだぞ。
答えてやるよ。
.NET4.0の方が早い。
だって図り方がわからないんです
じゃあ気にしなくていいよ
ListViewとImageListの関係については
>>179が提示したURLにモロに書いてある
分からないとか抜かした場合、自分で提示したURLすらよく確認していないと証明しているようなものだ
本当に死んだほうがいい
このスレに来て、かれこれ12回は死んでますわ
>>171 ぶっちゃけていうと、
2.0→全部列挙しちゃう
4.0→途中で止めれる
もともと全部列挙するつもりならどちらも同じ
private T obj;
public void A() { obj.DoSomething(); }
public void B() { obj = new T(); }
クラスにこのようなメソッドがあり、AとBは異なるスレッドから不規則に何度も実行されます。
この場合、Bで代入中にAが実行されて不完全な参照を使ってしまう、とかあり得ますか。
lockを使うべきでしょうか。objもvolatileにしたほうがいいですか?
参照の代入はアトミックだっけ?
longは違うよね確か
string[] directories = Directory.GetDirectories(@"C:\");
これだとsystem volume informationなどのシステム属性や画し属性も取得してしまうので
FileInfo fileinfo = new FileInfo(dir);
if ((fileinfo.Attributes & FileAttributes.Hidden) != FileAttributes.Hidden){
}
な感じで減らしたいのですがどう書けばよいのでしょうか?
え?
スレタイくらい読め
答えられる頭のない奴は黙ってたほうがいいよ
制限しながら取得する方法はない、はず。
てめえの足りない脳みそで黙らせて見ろよアホ
さっきからいちいち一言多い妙な人に構わなくていいですからね。
忠告しましたよ。
忠告されても構うのは犬畜生のすることですよ。
忠犬は死ぬまで言いつけを守ったのだから畜生と並べたら失礼
WebResponseとhttpWebResponse
どう使い分けたらいいんだろう?
WebResponseは普通使わないでhttpWebResponse使っとけばいいのかな?
使い分けるって、別にHttpWebResponseにだけあるメソッドやプロパティを使いたい場合は
そちらにするしかないし、そうでないならWebResponseのままでいい。
それだけ。
ウィンドウの左上にアイコンがありますけど
そこを右クリックするてメニューがでますが
そこに自分でメニューを追加したいのですが
どのようにしたらいいでしょうか?
警告 1 フィールド 'hoge.Form1.IsHoge' は割り当てられていますが、その値が使用されていません。
C:\Projects\hoge\hoge\Form1.cs hoge
public partial class Form1 : Form {
bool IsHoge=false;
private void btn1_Click(object sender, EventArgs e){IsHoge = true;}
使ってるのに使用されて無いって・・・この警告どうやって消すんだろうか、
使ってるぶんには不具合無いのですが気になってます。
何が原因ですか?
よく考えようよ
使ってないだろ?それ
代入しててもどこからもその値が使われてないから無意味だと言ってくれてるんだよ
privateだからフォームの外からアクセスされることもない
そのまんま、代入だけで、使ってないから。
バインディングかなんかで外に公開したいならprotectedかpublicで。
>>200 #pragma warning disable 169
bool IsHoge=false;
#pragma warning restore 169
普通は必要ないけどこういう対処も出来る
初心者にそんな場当たり的なこと教えたら駄目。臭いものにフタしただけで、問題の解決になってない。
206 :
200:2012/01/22(日) 01:20:56.71
なら、クリックイベント内If(IsHoge!=false){IsHoge = true;}ではどうだ?
と使っても警告消えませんでした。降参です。結局Publicにしました。
Form1のフォームの中で宣言したプライベートな変数フィールドで
Form1のClickイベントの中で使っているつもりなのですが、まだ理解できてません。
207 :
200:2012/01/22(日) 01:23:00.72
あ、ナニをトチ狂ったのか==だ。疲れてるわ。スマソ。
>>206 まあ、早い話、お前の頭よりコンパイラのほうが頭がよい、そういうことだ。
そんなことが理由にpublicにする、は正しく臭いものにフタな対応ですね
日本語がおk
結局使ってないんだろ
だったら消せよ
横からだけれど、判らん。使ってるじゃん。
そもそも if (真偽値) ~
の()の中で if (真偽値 == false) がおかしいと感じないのかね。
if ((真偽値 == false) == true) はどうだ?
intParseとTryParseの使い分けがわかりません
例外が出ないTryParseだけ使えばいいと思うんですけどintParseの使いどころってどういうときなんですかね
へ?
確実にIntが得られると判ってる場合。不確実ならtry
それだったら最初からTryParseで統一しておけば予期せぬ不具合にも対応できると思うんですが
例外というものの存在意義に対する問いですな
hoge.Value = Int32.Parse(x);
が
int a;
Int32.TryParse(x, out a);
hoge.Value = a;
とか冗長じゃん?
UIでxのバリデーション済みならxが変換できないのは例外で表現した方が自然って考えもある
VC#2010 ExpressでC#でフォームプログラムを勉強中です
Formの部品をいじくるときはForm1.csにコードを書かないと出来ないので
Form1.csのコード量が多くなってしまいます
そこで新しくクラスファイルを作って部品別にコードを別けて見やすく管理したいのですが
これはどのようにできますか?
例えば(x, y)って文字列をPointに変換する場合、まず正規表現でマッチさせるだろ?
xとyのパターンが確実にintに変換できるようなものであれば、Parseで充分になる
逆にParseに失敗するのはプログラミングミスだから例外等でブレークさせないといけないし、
そこにTryParseを使わせて追加のコードを書かせるのも馬鹿らしい、だからParseは用意されてるんだよ
>>220 UIでバリデーションしてるのならstringで渡すなよ…
>>221 メニューのプロジェクトからクラスの追加
>>223 クラスの追加まではできるのですが、その作ったクラスからFormの部品がいじれないのです。。。
>>221 始めたばかりのころに別掲示板でほぼ同じ質問をしたことがあったよ。w
>>224 を支持。
>>225 クラスにForm渡せばいいけどそういうコード書くとオタになぶり殺しに会う
どうせデリゲートやラムダ式使えないんだろ?
コントロールのプロパティで修飾子とかそんな項目があって、privateになっていると思うからinternalだかAssermblyだかに変えれば余所から触れる
ただあまり良い方法ではない
>>224 ソリュージョンエクスプローラーから追加でユーザーコントロールを入れたら
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace FormTest16
{
public partial class FormGaibuClass1 : UserControl
{
public FormGaibuClass1()
{
InitializeComponent();
}
}
}
ってここまでできましたのでここまで報告にきました
>>226 ユーザーコントロールっていうのがいいのですね、わかりました
>>227 Form1 form1 = new Form1()みたいな書き方はいけないってことですかね?わかりました
デリゲートってなんですか?ってレベルです
ラムダ式の書き方もC#では分かりません
すみません
>>228 こういう方法もあるのですね
何故これは良くないのでしょうか?
>>230 >Form1 form1 = new Form1()みたいな書き方はいけない
じゃなくて追加したクラスにメソッドなどでthisを渡してしまうこと
pythonではよくやる
自作クラスを作ったのですが、エラーがあってインスタンスを作る前にreturnした場合にその後に呼び出す
Disposeメソッドを実行するとインスタンスオブジェクトが設定されていないというエラーが出るのですが、
インスタンスの中身を確認する方法を教えてください。
今↓のように書いてみましたがこれではダメですよね?
private System.Drawing.Bitmap bmp;
public void Dispose()
{
try
{
bmp.Dispose();
}
catch
{
}
}
if(bmp != null)
{
bmp.Dispose();
bmp=null;
}
出来ました。ありがとうございます。
度々すみません
ユーザーコントロールの動かし方を確認するためにフォームのtextBox1のTextを変更したいのですが
書き方がわかりません
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace FormTest16
{
public partial class FormGaibuClass1 : UserControl
{
public FormGaibuClass1()
{
InitializeComponent();
}
public void textBox1Change(){
this.textBox1.Text ="変更されました";
}
}
}
>>229 Form1.csとは別に新しいクラスを作って↓みたいにすることでも分けて書くことはできますが
この書き方のthisがダメということでしょうか?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace FormTest16
{
public partial class Form1 : Form
{
public void textBox1Change()
{
this.textBox1.Text = "てすt";
}
}
}
237 :
236:2012/01/22(日) 14:01:22.20
>>236 そのまますすめてりゃ、1ヶ月後くらいにあーこのことかとわかるよたぶん
本読むなりwebの初心者向け解説を読むなりして基礎を勉強しろよ
まだ文法が把握できてないんなら、大人しく1ファイルで勉強しようよ
>>236 それは新しいクラスじゃないよ
partial 宣言して同じクラスを分割しただけ
>>238-241 少しずつ勉強していきます
ちなみにpartialでファイルを分けて各方法はお勧めできますか?
private void Test(string text, TextBox textbox){
textbox.Text = text;
}
Test("サンプル", textBox1);
のようにコントロールを渡す方法はやめたほうが良いでしょうか?
>>243 コントロールを渡すのなら最初にプライベート変数にでも入れておいて
毎回渡すのは何の意味もないよ
Form1.designer.csの中身見てご覧
partial class Form1が既に存在してるよね?
>>245 あります
public partial class Form1 : Formというのは
新しいファイルにいくらでも書けると認識しているのですが間違いですか?
>>244 textBox1からtextBox10まであるのですが
処理によって使うtextBoxを分けてますが実行するときは同じフィールドを使います
この様な場合でもプライベートに全部変数に入れるべきですか?
private TextBox textbox1 = textBox1
(略)
private TextBox textbox10 = textBox10
partialって極端な言い方をすればコードジェネレータのための機能だろう
自分で使う機会なんてほぼない
partialで分割するほど肥大化したらクラスの役割を見直した方がいい
複数人で編集する時に競合を避けることはできるかもしれない
だが、どこか不測に機能を追加されるよりはコミットログを残してマージすべきだと思う
ほとんどのSCMはファイルベースだから履歴が追いにくくなる
子フォームで値を取得し子フォームのボタンを押す
↓
親フォームで値を受け取りそのままイベント発生
というようなことは可能でしょうか?
ググるキーワードもわからず困っています
>>247 クラス側のフィールドはフォームの入力項目の数だけ作るんだよ
あとTextBoxじゃなくてstringとかintのような実際のデータに即した型に変えて、TextChangedイベントとかで値を随時更新してやるようにする
>>249 子フォームに適当なイベントを追加
子フォームのボタンクリックで、追加したイベントを呼び出しておく
親フォームで子フォームを呼び出す前にイベントハンドラを登録
子フォームを表示
partialで何個でもファイル作れるケドも・・・
他人が見たらForm1に書いてあるのか、別ファイルに書いてあるのかどこに書いてあるのかわからないのは勘弁
処理するクラスと表示するFormと分けた方がいい
アプリケーションが終了するときの特定の処理がしたいときがあります
このように書くらしいのですが何故Application_ApplicationExitが呼ばれたらイベントを削除しないといけないのでしょうか?
アプリケーションを終了するから消す必要はないと思うのですが何故でしょうか?
またこの終了時にイベントを発生させるのはVC#のプロパティウィンドウにはないのですがこのように手書きでコードを入れるしかないのですか?
private void Form1_Load(object sender, EventArgs e)
{
Application.ApplicationExit += new EventHandler(Application_ApplicationExit);
}
private void Application_ApplicationExit(object sender, EventArgs e)
{
MessageBox.Show("アプリケーションが終了されます。");
Application.ApplicationExit -= new EventHandler(Application_ApplicationExit);
}
>>184 は結局、lockを使わなくても問題ないということでよろしいでしょうか。
>>256 このスレのPart79に32bit以下のサイズの値型と参照型の読み取りと書き込みはアトミックだと書いてあったので、多分大丈夫
多分ね
260 :
デフォルトの名無しさん:2012/01/22(日) 16:00:03.87
261 :
デフォルトの名無しさん:2012/01/22(日) 16:08:47.24
メソッドは機能ごとに分けないで
意味ごとに分けたほうがいいんじゃないの?
>>260 FormClosedというプロパティがありました
これでやってみたいと思います
ありがとうございます
264 :
200:2012/01/22(日) 16:36:55.58
もうとっくに忘れられているであろう
>>200ですが、F6キー押したら消えました。問題解決♪
そういう問題じゃないけどなw
TcpListenerとTcpClientを使ってチャットを作りたいんですが、インターネット経由で待機してるサーバーに接続しようとすると「対象のコンピュータによって拒否されたため接続できません」と例外が投げられてしまいます。
ローカルネットワーク内では問題なく接続できたので、ルータのポートを開放してみましたが同様です。
ポート開放が上手く行ってないのか、プログラムがまずいのか、どう思われますか?
構造体は型として扱えばいいのでしょうか?
初心者にお勧めの入門書を教えてください
10日で覚えるみたいなのじゃなくてこれ1冊勉強したらいいみたいな本をお願いします
少しでもここで質問する頻度が減らせればと考えて勉強したいんです
>>270 どれでもいいから3つ入門本買え
内容が似てないやつな
無理なら図書館で借りろ
タダだ
どこのコントロールからキーイベントが実行されたか調べる方法はありませんか?
例えばtextBox1とtextBox2があり、textBox2からKeyDownイベントが実行されたらtextBox2体ということをしりたいのですが
>>268 ファイアウォールは例外に指定して通すようにしています。一度、ファイアウォール自体を切って試しましたが同様でしたのでファイアウォールで止まってる訳ではなさそうです。
>>269 ルータのログですか?調べて一度出してみます。
ところで、TcpListenerは待機ポートを指定して、接続次第そのポートで通信しますよね?
一方、TcpClientは接続時に接続先のIPとポートを指定しますが、このClient自体のポートはOS側で勝手に割り振られるんですか?それとも指定した接続先のポート番と同じのを使うのですか?
>>273 バインドすることもできるけど普通は自動割り振りさせる
ftpでも作ってんの?
チャットっつってんじゃん
>>273 ネットワーク構成は秘密か?インターネットを「経由」しているということは、
・自宅と友人宅/職場/レン鯖/他
・自宅に2回線持っている
あたりだろうが
てか、LANでは繋がる→プログラムの問題ではない→スレチ、だろう
ポート解放に失敗してるんだろ
ポートの意味を取り違えて
>>278 「192.168.11.3のクライアント」から「192.168.11.1のサーバー」を「ルーターのWAN側IPとポート」を指定して接続しようとしています。もしかして、
これじゃインターネット経由にならないんですか?
>>280 ヘアピンNATができるかはルータ次第。
>>281 ルーターに依るんですね。確認してみます。ローカルネットワーク内では動くということでプログラム自体には問題なさそうなので、スレチなようなので移動します。ありがとうございます!
インターネット経由にはなってないわな
ヘアピンNAT対応してるメーカーのが少ないしな。
プログラム以前に、webサーバたててアクセスして見る、
とかまやったことないのかいな。
ネスペも持ってないのにネットワークプログラミングを
するとは
>>274 sender.ToString()を確認したら取れているのは確認できました
textBox1でKeyDownが発生した場合に
イベント内でtextBox1.Text = "";みたいに書き換えたいのですが
どのように書いたらよいのでしょうか?
((TextBox)sender).Text="";とかif(sender==textBox1){textBox1.Text = "";}
>>287 ありがとうございます
senderはこういう風に使うのですね
勉強になりました
289 :
デフォルトの名無しさん:2012/01/22(日) 19:41:59.98
as使えよ
WPFのDLLを作っているのですが、Imageコントロールへの画像の表示方法について教えて下さい。
プロジェクト内にある画像をコードから表示しようと、
image.Source = new BitmapImage(new Uri(@"/Icon/Image.png", UriKind.Relative));
としているのですが表示されません。
別にあるユーザーコントロールのXAMLからは相対URIで表示できていますし、
同じ画像をプロパティにある絶対URIで指定すれば表示できるので、URIの書き方がおかしいのではないかと思っています。
相対URIで画像を指定し、表示するためにはどのようにすれば良いのでしょうか?
>>287 初心者相手でもちゃんとした処理教えたほうがいいんじゃないの?
>>292 表示できました、ありがとうございます。
ビルドしたEXEファイルをネイティブEXEに変換するソフトってないですか?
無い
ないよ
ビルドしたEXE
いまどき.NETくらい普通入ってる
幅広くサポートしたいなら2.0ターゲットにして.NET2.0入ってないようなクソ環境は無視で問題ない
すんごくファイルサイズが増えていいんだったらあったよな
たしかexeファイル内にフレームワーク丸抱えしちゃうように変換するやつ
win9でネイティブアプリ実行不可にしたらいいのにw
ただしIE、Offceは除く
c# asっでググっても出てこないんですがasって何ですか?
Google でも Bing でも、「C# as」でググったらちゃんと as 演算子のページ出てきたが…
英語ロケールだと、前置詞は検索キーワードから除外したりしてたような気もするけど、そのせい?
"string"型をconstできないでrしょうか?
stringをconstにしても意味がないんじゃない?
stringは参照型だし
なぜ出来ないと思ったのか
const string hoge = "hoge";
C#のconstってC++と意味が違って紛らわしいよな
C++/CLIのliteralがわかりやすい
変な質問をする人はやっぱり変な切れ方するなw
"const string" 型が欲しいという意図だと考えたんだろ
それなら元々stringは変更不可だから無意味
ごめんなw
手拍子で答えてしまったw
こっちは回答者も初心者(or 初心者レベル)だからしゃーない
listViewで listView1.Items[0].Selected = true;
とやってもlistViewの先頭にフォーカスが当らないので
http://d.hatena.ne.jp/oui27/20080710/1215702413をみながらlistView用にコードを書いてるのですが イベントの部分がどうしてもかけません
手直しをお願いできませんか
void listView1_Loaded(object sender, ListViewItemSelectionChangedEventArgs e)
{
if (listView1.SelectedIndices[0] >= 0)
{
ListViewItem item = (ListViewItem)(listView1.Items[listView1.SelectedIndices[0]]);
item.Focused = true;
}
//イベントハンドラを削除
listView1. -= new ListViewItemSelectionChangedEventHandler(listView1_Loaded); //←ここがわかりません
}
Loadedでそういうのはダメかも
>>317 本当は
listView1.Items[0].Selected = true;
listView1.focus()でアイテムが選択状態になってフォーカスが当っているのがいいんですが
別の方法ってありませんか?
それWPFのサンプルじゃん
WPFの開発してるの?
>>321 移植したらいいのかなと思ってまして すいません
>>320 何だよまたひっかけ問題かよ
listviewの SelectionModeをSingleに…
すいませんFocusedっていうのを使ったらフォーカスが当りました
>>323 こういうのもあるんですね
ありがとうです
winforms item.Focused=true;
WPF SelectionMode=Single;
結局さらされたブログの人が恥ずかしいだけになった
沢山の短いWAVファイルをあらかじめ設定したタイミングでズレないように再生するにはどういう手順が良いですか?
全部ミックスした音源を再生する
そんなトンチみたいな回答は
ぶっちゃけ
>>328は正論だよ
ただし単一WAVの合成はプロセス内でやらないと要件にマッチしないけど
ストップウォッチが作りたいのですが
c#で0.01秒ごとに処理(ラベルの書き換え程度ですが)を行い、
ボタンを押したら正確に止められますか?
>>331 YO!久しぶり!メトロノームの調子はDO-DAY
ストップウォッチっていうクラスあるよね
まぁ無理だと思っていいよ
System.IO.FileのCopy,Move,Deleteを行った場合のctrl+zのようなやり直しはどう実装したらよいのでしょうか?
関係ないけどメトロノーム重りと針と円弧の座標の計算がめんどくさくて途中でやめたわ
>>335 操作を覚えておけばいいでしょ
操作:MOVE ~を~へ移動した
操作:COPY ~を~へコピーした
って
Deleteはどこかに取っておかないと駄目だけどね
面倒くさいならShell使った方がいい
338 :
デフォルトの名無しさん:2012/01/22(日) 23:20:25.68
テキストボックスにファイルを保存するフォルダを書くこととしてて、でも
うっかり指定してなかった場合を想定して、マイドキュメントを指定してやろうとしてます。
if (textSaveFolder.Text == string.Empty) {
textSaveFolder.Text=Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); }
if文の条件ってこっちのほうがいいかなぁ
if (string.IsNullOrEmpty(textSaveFolder.Text))
センスの問題?
俺ならうっかり指定してなければフォルダ選択させるかなその場で
>>331 100fpsとか高望みにも程がある
>>338 未入力チェックならString.IsNullOrWhiteSpace
>>340 毎回入力することを想定していなければ、入力欄の近くに
相対パスならマイドキュメント以下(空欄はマイドキュメント)
のように明記するのはあり
nullとemptyと どうちがうんだっけ?
nullは文字列データが存在しない
emptyは長さ0の文字列
ちなみにstring.Emptyはリフレクションで再代入ができるので(Mono環境だとできないが)
空文字列かどうかを調べるのにstring.Emptyとの比較は微妙
string.Emptyをいじることはないと思うけどな
なんでリフレクションでmscorlibを弄られた場合の耐性なんて論じる必要があるんだ?
そんなことを言いだしたら他のフィールドも全部信用できないだろ
""
" "
使ってると、化石扱いされるの?
の?
まで読んだ。
の?
まで読んだ。
全部読んでるんじゃねぇかw
>>342 ラベルのText書き換えるだけなら100/sくらい全然余裕だろ
どうせ表示できないけど
お世話になります。
作成したアプリケーションに関連付けしたファイルをダブルクリックすると、作成アプリが起動しファイルを読み込むようにしたのですが、現在このアプリは二重起動を禁止しています。
このアプリが起動中に、別の関連付けファイルをダブルクリックした時に、既起動中のアプリで新たなファイルを開きたいのですが、どのようにするのでしょうか?
二重起動禁止を解除するともちろん複数のアプリが起動してしまうのですが、そうではなく、既に起動中のアプリに読み込むことができません。
ご教授願えますでしょうか?
よろしくお願いいたします。
ご教授~
実行ファイル名やウィンドウタイトル等から既に起動したプロセスのウィンドウを特定してプロセス間通信
この場合開いたファイルパスだけ送りゃいいだろ
二重起動のチェックをしてるところで読み込めばいいだけでしょ
は?
ああわかった。OSの関連付けで起動プログラムが指定されるから
二重起動をさせずに2つめの関連付けされたファイルを起動済みの
プログラムに渡すにはどうすればいいか?って意味ね。
じゃあソケット通信で
プロセス間通信が必要だよ
ここでさらっとコード貼ったりできる程度じゃない
面倒なのでMicrosoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase使う
sendmessageで送って受信側に受け取りのイベントを書けばいいだけじゃないの?
ちょっと上の方にWCFのサンプルもあったし、全然難しくないよ
プログラムを2つに分ける。
1.関連付けで起動されるアプリケーションスタブ
2.アプリケーション本体
アプリケーション本体には、二重起動チェックはそのまま入れておく。
関連付けで起動されるスタブは、アプリ本体が起動されていなければ
起動して引数にファイル名を渡す。
アプリ本体がすでに起動されていればプロセス間通信でファイル名を
渡す。プロセス間通信というかスタブからのメッセージPOSTを受ける
だけでいい気もするけど。
ファイルで渡せばいいよ
秀丸のマクロから呼び出せるDLLはC#では作れないとご助言を受けたのですが
C#でもCみたいにexternする裏技みたいなのは無いのでしょうか?
無いから無理だと言ってんだろカス
プロセス間通信が理解できてるなら聞いてくるような内容じゃないだろ
お前には無理でFA
treeViewで隠し属性を表示させない方法はないでしょうか?
隠し属性ってなんだよハゲ
>>369 もしかすると「TreeViewでフォルダーツリー作っているんだが、hidden属性のフォルダー無視する方法ない?」って質問かな?
はげてないよ
ふっさふさだよ
>>374 hidden属性のフォルダーかチェックしてhiddennなら追加しない
>>368 varで書くのはいいけどぱっと見で重要なオブジェクトかどうかわかりづらい
基本構造について理解が妨げられるような感じ
オブジェクト平等主義なんだろうけど定数の様な物や
stringはvarじゃないほうがいいような気がするなあ
本題でもねえところに一々突っ込んでくんなよ
触るな
そうするよ
language:がC++ (gcc-4.3.4)だとかどうでもいい
>>365 C# で書いたDLLをCOMに見せかける機能はあるので、
C++ で一段階ラッパー書けば使えるとは思う。
結構大変(情報全然出てこない)と思うけど。
382 :
デフォルトの名無しさん:2012/01/23(月) 14:15:35.43
ツールボックスの中にあるフォルダダイアログって表示したままフォームの一部に貼り付けておくことって出来ないですか?
LoadLibraryで.netのdllを呼んでくれるラッパーおれも欲しいで
>>381 まじすか
これ需要あるますので有料でもいいのでほしいですよ
ラッパーほしいとか有料でも欲しいと言ってる人は誤解している
なぜよ?
C++/CLIで作ればいいだけじゃないか
ネイティブDllでは
CLIいれられないよ
DllImportじゃダメなん?
そのimportする対象のDLLが作れないってことだよ
本当クソだなC#
C++/CLIって何のためにあるんだw
C++/CLIはいらない子、害悪
>>394 変わるけどな?
先頭大文字なのが気になるけど、、、ちゃんと呼んでる?
大文字なのはリンク先だった、失礼
縦スクロールバーの処理入れると割と面倒だったな
>>395 あれ?おかしいな?何でだろう
ヘッダーにwidth = -2にってやると100%で表示されるんですが
これだと画面の大きさや項目を変更したときには反映されないので困りました
ちなみに.Net4.0なんですけど項目は全部半角英数でaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaを10行挿入しました
ヘッダーめいはabcdeって入れてます
>>389 やりたいことはその逆だからダメだろ。
>>392 ネイティブなものを .NET から使うためだよ。
今はその逆の話で、それは C++/CLI でやることじゃない。
まあ普通のDLL作ってそれがExeをキックすればいいな。
>>400 ありがとう
もしよろしければこのリンク見てアフィリエイトふみまくるので誰か作ってください
>誰か作ってください
まだ意味が解ってないみたいだな…
c#で作った独自プログラムをCOM化してやって
それを使った中間ネイティブDLL作るんだよ
間に何かあって勝手にネイティブ変換してくれるもんじゃない
自分で作るもんだぞ
つまり自分で作ったdllの中でそういう作業をしないといけないって事すか
秀丸マクロでDLLを呼び出したらHello Worldを返すだけの処理なんですがサンプルお願いできませんか?
秀丸マクロのつくり方のページをまじめに読んでいたら
そういうお願いは無駄だと感じるはずだけどなあ
何かあったら金をちらつかせたり
他人に頼みごとをして解決する人は嫌いです
ksなスレですねここは
C++/CLIは.NETの上でC++を使いたい人用なんじゃないの。
ただのC++より安全だとは思うけどC++使うならネイティブの
ほうがいい。
ごちゃごちゃ抜かさずCかC++覚えろ
>>410 一番の用途はネイティブコードを .NET から参照する用よ。
.NET 使いたいだけなら素直に C# に移る方がよっぽど楽。
つうかよ秀丸でC#のDLLを呼べるようにするのが一番いいよな
もういいよ
まだ4000YENの話を続けなきゃいけないのか?
MS製品ですら未だVB Scriptだからねぇ。
昔からあるものを、今のものに対応させるって大変。
4000YENとか、金額の問題じゃないだよ
どうしても金払いたいなら
日当三万払ってプロに頼めよ
string[] a = {"a","b","c","d","e"};
という配列があって
インデックスAを指定して、指定した位置Bに移動する方法を伝授してください
例えばインデックス3を1の位置に移すなら
{"a","d","b","c","e"};
という結果にしたいのです
string n = a[2];
a[3] = a[1];
a[1] = n;
これを書きたくないと言うならC#向いてないから今すぐ止めてくれ
よく見ると処理内容が違ってるだろw
list<string>使えと言う回答はダメですかw
>>419 止めるべきはお前だったな
ListならInsertで済むのにな
Listはメモリガーとか言う人かね
後はまあ地道に、後ろにずらして行くしかないね
string b=a[3]
for (int i=2;i>=1;i++) {
a[i+1]=a[i];
}
a[1]=b;
string[] a = {"a","b","c","d","e"};
a = new string[]{"a","d","b","c","e"};
天才が出たぞ
一時退避変数にインデックスの場所の値を入れておく
そこから後ろをArray.Copyで1個ずつ前にコピー
移動先を含めてArray.Copyで1個ずつ後ろにコピー
移動先に一時退避変数を代入
これでいいのか?
余りにも身も蓋もないからちょっと改良
string[] a = {"a","b","c","d","e"};
a = new string[]{a[0],a[3],a[1],a[2],a[4]};
リングバッファーではないよね。
64バイトの中々ダブらない文字列を作るにはどうやれば良いですか?
GUIDのテキスト表記からハイフン抜いて2つつなげる
っていうか64バイトもいらんだろ
00000000
00000001
00000002
という感じで使える文字の範囲で順番に作ればダブらないよ
GUID使うなら4つ必要じゃん
guidって128ビットだった気がするんですが....
33~126の乱数をcharに変換して64個並べる
435 :
429:2012/01/23(月) 21:10:36.50
2進数のテキスト表記で32文字x2ってこと
436 :
429:2012/01/23(月) 21:11:20.84
すまん16進数の間違い
>>431 Guid自体は128bitだけど文字だと32文字→とりあえず32バイト→2つ必要
ってことなんじゃね?
>>419 何だそのしょぼコードは!
おまけに結果が変だろ!
dがないだろ!
{"a","c","c","b","e"};
guidを調べて見ます。どうもありがと
いやいやいや
どういう仕様なのか分からないからあれだが
普通にGUIDをそのまま使えよ
64バイトもいらん
64バイト使って256ビット分の情報量ってすごくもったいない感じだね
んなこと言い出したらテキスト中の数値は全部バイナリにしないといけなくなるぞ
テキスト中の数値はテキストとして価値があるだろ
今回UUIDを文字列にする価値があるのかは知らんが
listViewのチェックを変更させないようにしたいのでchangedイベントで前の状態に戻すように書いたのですが
スタックオーバーフローになってしまいますがよい書き方や設定があったら教えてください。
Checkedイベントでチェック状態変更したらループするだろ
チェック状態変更する前にフラグ立てて、2回目以降のCheckedイベントを回避しろ
できた^-^ありがとん
あるかないか分からないファイルを沢山削除したいのですが、
fileExistsで確認してから削除するのととりあえずdeleteでエラーを受け取るのではどっちが良い(早い)ですか?
そうですか、できないですか
困りましたね…
そんなもんファイルが無い確率によるわ
5000個のうち5-10%無いかもです
じゃあExists使っとけ
そうする
例外が嫌ならP/InvokeでDeleteFile打ちまくれば?
良し悪しで言えば最悪だろうけど
全てを消し去ってくれる
僅かな速さの違いを気にするような案件とは思えないな
クライアントが神経質って要件があるやも試練
お前らまた騙されてるな
ファイル無くてもDeleteでエラー出ないぞ…
PInvokeとInvokeとどっちがボケなの?
普通、例外のコスト<Existsのコストなんじゃないの
何というか最近ハメ質問ばかりだな
川俣でもいるんだろうか…
ほら一応MSDNから
File.Delete メソッド
指定したファイルを削除します。指定したファイルが存在しない場合、例外はスローされません。
listViewのチェックの状態を別スレッドで知りたいのですがどうやって書けば良いですか?
チェックを付けたり外したりするdelegateはできましたが戻り値を受け取る方法がわかりません。
つまり
>>449はそのままDeleteで削除する
Webページを取得してるんですけど
例えばこんなURLで
hoge.com/hoge?id=1
id=1~nまでのデータを取得したいんですけどどうすればいいですか?
最近の初心者は文字列操作より先にWebClientが使えるようになるのか?
URLのケツの数字をどうにかして書き替えるプログラムをまず書きます
↓
WebClientでもなんでも使ってURLのリソースをGetします
↓
Perfect!
頭より手が動いてるんだろう
あとティンコ
その方法教えろって言ってんだろくずが
string filename = @"C:\sample.txt";
こんな感じの固定したい変数がたくさんあるんですが、
コード中の各メソッドにちりばめられてます
後で変更するときにきついのですが
これはどのように管理したらよいでしょうか?
>>469 >>数字をどうにかして
どうすればいいんですか?
よく分からないがフィールドに置いたらいかんのか?
メソッドの中にしか変数を置けないと思っているのなら入門を読み直した方がいい
>>473 とりあえず=の後ろを切り取って、数字を付け直せばいいんじゃないのかな
そのくらいは調べてできるよな
>>475 はい。 仮に今idが1~10まであって
突然11までとかになったら自分で修正するしかないのですか?
>>474 classの真下に
private string filename = @"~";
って各方法以外にありませんか?
Cでいう構造体みたいなのができればいいんですが
固定したいのか変更したいのかハッキリしなさい
>>466 できたありがと。
でもデリゲート意味わからなすぎ
>>478 あとでコード修正しやすいように1ブロックにまとめて管理したいんです
internal static class XXX
{
internal static readonly string filename1= @"~";
internal static readonly string filename2 = @"~";
internal static readonly string filename3 = @"~";
internal static readonly string filename4 = @"~";
}
って感じでまとめれば
フィールドだけ集めたクラスを作ったら同じように使えないかい
483 :
476:2012/01/24(火) 00:39:59.24
返事待ってます!
分かる方お願いします!
そこはenumじゃないのか
>>483 アホらしいから何も言わなかったんだけどな
プログラムが「突然11になった」ことを認識できるように書けば自動化することもできるだろう
お前がAIを造ればいいんだよ
486 :
476:2012/01/24(火) 00:42:33.16
そうだな、さしあたり人工知能関係の本でも読めばいいんじゃないか
488 :
476:2012/01/24(火) 00:45:38.15
不可能ということですか?
自動化するのに「必要なもの」があるなら
その「必要なもの」を入手する部分を自動化する
その「「必要なもの」を入手する部分を自動化するために必要なもの」があるならそれも自動化する
これを必要なものがなくなるまで繰り返してようやくあなたは仕事から解放される
490 :
476:2012/01/24(火) 00:50:56.01
うーん。
+1を付け足しといたらいいんですかね
その11って数字をどこからか探してこれるなら不可能じゃないさ。
どこから取ってくればいいかって?そんなことは知らん。
492 :
476:2012/01/24(火) 00:52:21.14
うーん。意味ないっすね
難しいですね><
winFormから別のスレッドを実行して
MessageBox.Show(this,"ほげ");
でモーダルなメッセージボックスを出したいのですがこれだとエラーになりますが
正しい書き方を教えて頂きたいです。
495 :
476:2012/01/24(火) 01:43:02.69
なんとかして出来そうな気がするんですけどね
for 使えばできますよ。
497 :
476:2012/01/24(火) 06:49:56.59
Forじゃできないと思うのですが、どういうことでしょうか?
1から10までってわけじゃないのですが
…
499 :
476:2012/01/24(火) 07:08:31.00
相手が更新しなければ、うれしいんですけど。
うーん。突然idが20までになったら、、10以降のデータを取得てぎないんですよね。難しい。
>>499 Accumulated PAIN revarse to you!!
503 :
476:2012/01/24(火) 07:28:52.65
え・・犯罪なのですか・・・
しりませんでした
ありがとうございます
>>503 コレで鯖が止まったらどういう言い訳するんだよ。営利妨害じゃないか?
岡崎図書館事件か
逮捕されて有罪になったんだっけ?
落ちる原因がなんであれ、侵入した事実があれば逮捕で臭いメシ食えるよ、やったね!
506 :
476:2012/01/24(火) 07:47:33.54
リンクタグをパーサしたら出来そうな気がするんですけど
じゃあそうすればいいじゃん
508 :
476:2012/01/24(火) 07:51:45.65
専ブラ使っても2chが落ちないのはなんでだろう。。
>>508 2chの鯖結構高性能なんだぜ。あとは専ブラ作者とユーザに良識があるからだな。
情報取りに行った鯖がMMXPentiumで運営してて、落ちたらどうするんよ。
相手が貧弱でした!って言って通るのかよ。
専ブラは、dat だけ取ってきてHTML化はローカルでやるから、むしろ軽いのよね、普通にウェブブラウザーで見るよりも。
スレ一覧とかも、総当たりで取ってるんじゃなくてインデックス読んでるし。
念のため通報しました
意味不明なんだけど
ここまでの流れ詳しく…
初心者向けに何かフォームプログラムのお題をください
>>513 どのくらい初心者かわからんが、全くの初心者なら関数電卓とか
ちょっとかじったことあるならペイントとか静止画⇔動画変換とか
アナログ時計もいいかもね
関数電卓をぐぐって見たんですが
1+(2*3)+(4/5*(6/3))みたいに括弧が出てくるとどのようにパーサして計算していいのか分からず
JavaScriptみたいにevalってないんですね
これは初心者にはキツイです
静止画と動画はおもしろそうですね
アナログ時計なら出来そうです
二分木ね
>>516 C# eval とか検索すればいいのに。
アセンブリや型を生成せずにC#のコードを実行する方法は無い
オーバーヘッドがものすごいしメモリリークする
別プロセスにすればリークは問題にならないな
AppDomainは動的コンパイルのリーク回避に使えなかったっけ?
何でC#には数式のパーサライブラリがないんだろ
カッコや演算子の優先順位くらいなら再帰下降パーサ手書きで案外簡単にできるよ
でも少なくとも初心者向けではないし頑張って勉強して作ったとしてもあんまり役に立たん経験
Visual C# 2010 Expressなんですが、対象のフレームワークを「.NET Framework 4」に固定する方法はありますか?
毎回プロパティから変更するのは面倒&保存しなければならないので
お金払えばできるよ
なんてこった
横だが、Expressはデフォが4.0だと思ってたw
普通に前回使用したフレームワークになってないか? >Express
そもそも4.0しか選べないし
俺のは開いたら4.0Clientになってる
>>529 え?・・・え?
「パーサする」じゃなくて「パースする」って言って欲しいなあ
IMEの状態を知りたいのですが、自分にフォーカスがない状態や
何にもフォーカスがない状態でも知る方法を教えて頂きたいです
数式をちょろっと計算したいだけならXPathNavigator.Evaluateあたりを流用すれば出来るんじゃね?
すいませんDOSでdirの結果を取得したいのですが
なんてライブラリをusingして使うのでしょうか?
System.Diagnostics.Process
そしてStdoutをリダイレクトして受け取る
そこでコード書くの?
まずそんなとこにそんな処理を書くな
まず
・fileListUpTestはフォームが閉じてメッセージループが終了してからしか呼ばれない
こう書いても理解できないと思うけど。
上の画像のフォームの何もないところダブルクリックすると
Form1_Loadというメソッドが作られるからそこにfileListUpTestの中を切り取って張り付けろ
・STAThreadをMainから剥がすな
・素直にForm1内に書け
・一応そこからでもtextBox1にアクセスできなくはないが、実用性は無い
Form1を右クリック→コードの表示
素直も何もForm1の下に書くのを知らないんだと思うが
文法は結構いくらでもあるんだが、まとまったFormsとかの入門になると川俣の駄文くらいしかないんだよな
とりあえず21と22の間でいいよ
staticの意味を正確に答えられるようになるまでstaticを書くな
>>547 今書こうとしてるのがFormを継承したForm1クラスなので
その中に入れないとw
>>548-550 ありがとうございます。21と22の間に
public void fileListUpTest() { textBox1.Text = "okok"; }
で動きました。
前に同じコードを別の場所に複数書いたらダメと教えてもらいましたが
使う箇所は20箇所くらいあるものですが3行くらいのコードでもまとめないとダメですか?
>>552 どういう処理かわからんけどクラスが別なら場合によっては分けるしかないんじゃないの?
あくまでも決定を下すのはあなたの正義
555 :
デフォルトの名無しさん:2012/01/24(火) 22:59:39.02
>>552 関数の呼び出し自体は複数なってもいいぞ
ロジックを複数書くのはおかしいけど
Cバカみたいに1行マクロみたいなことはしなくていい
>>552 内容によるね
これは○○を~する処理って明確にわかってるなら
メソッドに書き出したほうがいい
例えそれが一行だとしても明確な名前を付けてメソッドにしたら
確実にプログラムの理解度が上がるし後で変更しやすくなる
こういう話は入門書では扱わないから
初心者は戸惑うよね
559 :
デフォルトの名無しさん:2012/01/24(火) 23:15:35.49
>>558 Cのころだとどこかのソースに関数置いておいて使うところでヘッダー取り込んで
使うっていうのが普通だったけどオブジェクト指向となるとその辺をどう吸収するかって
初心者は悩みそう
まあ悩んだら機能を持たせるクラスを作ってそこへほうりこんで必要になったら
newして使えばいいんだけどね
System.IO関連のクラスのような感じで
こういう視点から見ると今の入門書はすべて落第点
プログラム入門と歌いながら他言語から移ってきた人用にしか見えない入門書ばかり
561 :
デフォルトの名無しさん:2012/01/24(火) 23:19:33.78
そこらへんは人のコード見て覚えた方が速いんだけどね
下手に考えながらやっても時間かかるだけ
最初は考えるより学ぶのが重要
>>560 一応そういう本も擁護しとくと、「プログラミング入門」と「C#入門」はまた話が別。
まあそうは言っても、あえてそこを曖昧にしてたり、前書きにはっきりプログラミング初心者を
読者対象と書いてあるのに中身は全然そうなってない詐欺的な本とか実際あるね
気になるならTargetedPatchingOptOutAttributeでも貼れば?
564 :
デフォルトの名無しさん:2012/01/24(火) 23:23:26.70
オブジェクト指向と一言で済ますけど
オブジェクト指向じゃない言語をやって
初めて理解できるものだと思う
ピクチャーボックスが20個あってクリックしたらそれをボタン名にするというものなのですがどうでしょうか
if (e.Button == MouseButtons.Left)
{
button1.Text = "1";
}
の4行か下の呼び出しの1行か
void setButton1Text(MouseEventArgs e,int num)
部分的なコードはるな
でもC#はまだましな方だな。
Androidの本は本当に酷いのが多い。っていうか、まともな本ってあるのかな。
よく分からんがループ内でクロージャ使ったイベントハンドラ作れば対処できそう
>>565 その様子だと、個々のPictureBoxごとにイベントハンドラを用意してそうだなw
まずそれを1つにまとめることを考えた方がいい。
>>565 setButton1Text
この名づけ方はただやってることをそのまま名前にしただけだよね
もっと意味のある言葉で書き換えられないの?
俺はそのソース見てないけど
何のためにあるボタンに
なんでテキスト変更してんのかわからない
選択した画像に何か処理するためのボタンじゃないかと思うけど
PictureBoxを継承すればいいじゃまいか
>>565 そういう機能があるカスタムコントロールを作ればいいじゃん
もしくは、ピクチャボックス作成時に、イベントハンドラを登録するとか
var pb=new PictureBox();
pb.Click=new EventHnder(rename())
>>565 書き捨て
つまりもう二度と変更しないならそのままでいい
ただしこれは今のレベルでの話
偉そうに言ってる奴らが一番ズレてるなw
いくつか方法があるみたいですね
>個々のPictureBoxごとにイベントハンドラを用意してそうだなw
が気になります。object sender, MouseEventArgs eを丸投げして一まとめはわかりますが、
イベントプロシージャが20個要らない書き方があるということですか?
名前の付け方はいつもこんな感じでやってることを書くようにしてますが処理の内容を書くべき?
でもそうすると処理をするメソッド名が困るような気が・・
>>576 >イベントプロシージャが20個要らない書き方があるということですか?
あるよ
どういう目的の物を作ってて現状どういうコードなのかとかわかれば
アドバイスもしやすいんだが・・・
>>576 うん、今の段階で君が最初に調べて覚えるべきことは、
コードでコントロールのイベントをメソッドに紐付けする方法。
あとのことはそれから考えればいいよ。
ピクチャーボックスが20個あってクリックするとbutton1.Textが「nの画像を縮小する」になって
それを押すと縮小して保存するというものなんですが・・
>>578調べてみます
webプログラムからC#にきたんですけど
フォームアプリケーション製作にMVCで作成できますか?
フレームワークをググってもasp.netばっかり引っかかってしまうので
581 :
デフォルトの名無しさん:2012/01/25(水) 00:11:29.74
MVCぽいことをやる場合はWPFかな?
winformは・・・
javaといえばMVC
c#も言語的には大して変わらない
WPFは地獄w
>>582 なんでインデックスが1からはじまってるんだろう・・・。
なぜfor文を使わないんだろう・・・。
585 :
デフォルトの名無しさん:2012/01/25(水) 00:30:07.25
>>582 静的に設置してあるpictureBoxのインスタンスを配列に入れるのは譲ったとしても
その後のClickイベント割り当てはせめてループにしろw
あ、ほんとだ^^これはforでいいですね
インデックス番号はコントロール名と統一してみました。
でも大体正解みたいでよかったです。こんなまとめ方は想像もしてなかったのですごく良いことを知った気分です♪
using されているのに
button.MouseDown += new MouseDown(button_Click)
としないのはなんで。自分で完全修飾名書いたのか。
俺は冗長なのが嫌いだから new MouseDown もかかないで、暗黙の型変換に任せるが。
まあ、これは人によると思うけど。
+= のあとに tab 2 回押せばコードスニペットっていう機能で勝手に
メソッドが追加される。
あと、こういったコードを書くときは短形編集機能を知っておくといい。
alt 押しながらマウスなりキーボードなり (Shift + 矢印) で選択すると短形編集ができる。
あと、テスト・サンプルコードかもしれないけど一応突っ込んでおく。初心者スレなので。
Load イベント内でイベントを登録するのはよろしくない。
Form1 ってことは MainForm だろうから問題はおそらくでないが、
一般に Form.Load イベントは 1 回しか呼ばれるとは限らないから。
今後の拡張も考慮して、コンストラクタ内で追加するようにしたほうがいい。
public Form1() {
. InitializeComponent(); // コントロールの初期化部分。この後に記述する。
. RegisterEvent(); // イベント登録するメソッドとしてまとめるほうが多分いい。
}
private void RegisterEvent() {
. p[1] = pictureBox1;
. ...
VC# 2010 Expressを使ってます。
メインフォームとサブフォームで「Listviewをcsvファイルに保存する」という
同じメソッドを使うのですが、やはりクラスファイルなどを別に作って呼び出した方が
良いのでしょうか?(と言ってもその方法がわからないのでこれから勉強するのですが)
それともこれくらいならわざわざ別ファイルを作るのはかえって効率悪いのでしょうか?
どう考えてもフォームクラスからは分離するべき。
ファイルは同じでもいいがせめてクラスは別にしなさい。
>>589 別のファイルに分けた方がよい
当然クラスも別物が必要になる
ただ小規模で単機能の共通関数をいくつか使うだけなら、あえて専用のクラスにしなくても、
MyCommon みたいな共通関数格納用のクラスをあらかじめ作っておき、
そこに関数だけを追加していく手もある
static class ListViewHelper {
public static void SaveAsCSV(ListView listview, string fileName);
}
みたいなの作るとか。拡張メソッドにしてもいい。
データを持つクラスがあるならそこにメソッド書いたほうが見通しがいいかもしれない。
すいません、589じゃないけど便乗です。
589が言ってるみたいに複数のフォームから呼び出す場合は別クラスでいいとして、
1箇所こっきりしか使わない場合でも別クラスにすべきでしょうか?
正直、クラスの作り方とか概念は理解できても、どういう場合にクラスを分けるかって
ところで毎回迷います。入門書みたいに、従業員クラスがあってどうのこうのみたいな話だと、
ついフォームクラス複数+データ保持クラス1個みたいなとこで満足してしまい結局はフォーム
クラスが肥大化しがちで、これでいいのか迷ってます。
すいませんなんか抽象的な話で。
public PictureBox[] p = new PictureBox[21];
p[1] = pictureBox1;
:
p[20] = pictureBox20;
VB脳…
595 :
589:2012/01/25(水) 02:49:39.45
皆さんありがとうございます。
>>590 やっぱり分離すべきですよね。
>>591 なるほど、そういう方法もあるのですね。
関数の分だけクラスファイルを作るのはどうなんだろうと思っていたので
良い勉強になりました。
>>592 なるほど。詳しく説明していただいてありがとうございます。
とりあえず「格調メソッド」をggってきますw
魔法の言葉
#region
>>593 良くないよ。
フォームには、「このボタンが押されたらこの処理を呼ぶ」みたいなルーティングと、
「データが更新されたらしいので描画しなおす」って処理以外書かない方が無難。
処理の実体は分離。
別に複数のフォームから使うから別クラスにするわけではなくて、
関係したものをクラスとして扱う。
関係ないものがそのクラスにあるのは気持ち悪いと思うべき。
だから、クラス名とそのメソッドの処理内容がかけ離れていないかを基準とする。
例えば、ListView を CSV 化するメソッドはリストビュー関連または、
そのデータ関連のクラスに書かれるべきだ。Form ではなく。
(プロジェクトが小さいのならば余り考えなくてもいいと思うが)
特に、見た目と処理部分を分けることをビューとモデルの分離といい、
MVC, MVVM とかいったパターンがあるくらい重要な概念。
だから最終目標は、UI (見た目)クラスには UI 関係のみが書かれていて、
イベントで処理メソッドを呼ぶだけ、とすること。
まあ、数年勉強してから勉強するのがいい。難しいと思う。
まずは、関連性からクラスを分け、private なりを駆使して
他のクラスから使いやすいようにする。
次に見た目の部分も、UserControl でパーツ分けをするといい。
この時、TextBox.Text とかは直接公開するのではなくプロパティを使う。
UserControl を作るころには必然とデータとビューが分離してくる。はず。
あとは region 使ってまとめる。
クラスとしてまとまっていると気持ちいい、そうでしょ?
他人に使ってもらうことを意識するといい
MS以外の他の人の作ったライブラリ使ったことがあると
結構勉強になると思う
これは何でこんな場所だ とか この名前はちょっと
とか その逆もまたしかり
配列をランダムに入れ替える関数の作り方を教えてくれ
a[0]=3、a[1]=1,a[2]=5で
randomarray(a)
ってやったら
a[0]=5、a[1]=1、a[2]=3
みたいに配列の内容がぐちゃぐちゃになる関数です
配列のシャッフルでぐぐれ
いったん全部Listに突っ込んで乱数で一個ずつ取り出してListから削除して配列に前から順に入れるのがわかりやすい
ちょっと工夫すればインプレースでもできるけど考え方は全く同じ
>>604 というか配列なんて使わないでList<T>そのまま使ったほうがリアルなシャッフルに近くなるけどね
乱数ででた数字の場所を抜き取って後ろにつけるとかやっていけば
それやるならリスト使わずにそのまま配列でやればよくね
>>606 使った奴消さないと何回も同じ奴選んじゃうでしょ
for(i = 0;i < n;i++)
{
j = 乱数(0~n-1)
array[i]とarray[j]を交換
}
>>608 OrderByは同値の時に順序が残るから
同値の場合に元の配列の前にある方が前に来るので
完全なランダムになってないと思う
for(int i = array.Length - 1; i >= 0; --i)
{
var r = rand.Next(i + 1);
array[i] = array[r];
}
これでいいはず
これが正解でしょ
違うわ
for(int i = array.Length - 1; i >= 1; --i)
{
var r = rand.Next(i + 1);
var temp = array[i];
array[i] = array[r];
array[r] = temp;
}
こうかな
適切なのはあっても正解なんざねぇよwww
614 :
デフォルトの名無しさん:2012/01/25(水) 15:57:58.16
そうだな
プログラムにあるのは参考例であって正解はないよ
結果的に目的の動作をすれば極端な話どんなコード書いてもいいし
動けばいいんだよ
ただそれだと困るので参考例は必要だけどw
実数の限界があるから何をどうやったって偏りは残るわい
選択して抜いていく方式の場合はすべての要素を等確率で選ばなければいけないが
丸めのせいで無理
俺だったらiはカウントアップするな
ソートの逆のような感じ
丸めどうこう以前に、擬似乱数は均等に分布しないだろ。
とりあえず今日は何もコード書いてません
何か地震雲が発生したらしいじゃないですか
何で先輩方はやる気あるんですか
2ちゃんねるの専ブラを作りたいのですが細かい機能は省くとして
初心者がやると手間取ったり難しそうな処理はどんなのが考えられるでしょうか
620 :
デフォルトの名無しさん:2012/01/25(水) 18:51:59.69
乱立してるからいまさら公開しても誰も使ってくれないだろうな
逆に使われだすと今度はキチガイユーザーの粘着に耐えられるかがポイント
今から参入してもお金にならないので僕はこんなのやりたいと思いませんね
あるもの使えばいいじゃない
ファイルを読み込んで1行ずつ配列にすることはできませんか?
PHPのfile関数と同じことがやりたいのです
よく分からんが、File.ReadAllLines
richTextBox1.SelectionColorでColor.Blackみたいに指定するのではなくて
rgb 0,0,0と数字で指定する方法をご教示お願いします
つ Colorのメンバ一覧
Color.FromArgb メソッド
>>627-628 補完だしたらBlackとかRedのところにそういうもの混じってたんですね
どうもありがとうございます
Form1_Loadの中からフォームにキーダウンイベントを入れたいのですが
エラー 1 デリゲート 'System.EventHandler' に一致する 'form_KeyDown' のオーバーロードはありません
っていうエラーが出てしまいます
どうやってイベントを登録したらよいでしょうか?
this.KeyPreview = true;
this.KeyDown += new EventHandler(formEvent_KeyDown);
private void formEvent_KeyDown(object sender, KeyEventArgs e) { }
自己解決
KeyEventHandlerって打ったらできました
>>620 ブログって記事見難いんだよなー
そこもブラウザの記事見たくてもまとまってないからみれないし
Form1_Loadから
private void formEvent_KeyDown(object sender, KeyEventArgs e) { }
を出す
それから入門書を読む
最近のVSならthis.KeyDown+=って打ってからTab連打すると勝手にハンドラー作ってくれなかったっけ?
アドインの機能かもしれないけど
WinFormのwebBrowserはIEをアップデートすると一緒に新しいものになりますか?
637 :
デフォルトの名無しさん:2012/01/25(水) 21:58:36.32
教えてください。
クラスのプロパティにインデクサを利用したい場合、どのように実装するのが一般的でしょうか。
・やりたいこと
xml 形式の設定ファイルを用意し、このファイルを管理するクラスを作成する。
必要な要素にはプロパティを用意してファイルを意識させないように参照/設定を行う。
参照する要素にはノードの属性値を利用したい項目があり、この属性値をインデクサで指定したい。
・対策案
a. プロパティの型として専用のクラスを用意し、[] 演算子のオーバーロードを実装する。
‥‥ただ、基本的にはデータ型は string でやりたいのだけど、この代理クラスを用意すると
プロパティへの参照をクラス経由で行うことになり煩雑? operator= があればなぁ。。。
b. ファイルの内容をあらかじめ Dictionary なりに読み込んでおき、この Dictionary を直接外部公開してしまう。
あるいは代理クラスを用意してそのインデクサを Dictionary のキーとして参照する。
‥‥必要ない項目をあらかじめ読むのもなぁ。。。
強引に書けばいくらでもやり方はありそうなんですが、なんだか美しくないような気がします。
美しいかどうかは別にいいとしても、一般的にわかりにくくなってしまっては面白くないので、どうしたものかと。
普通にメソッドにする
C++脳みたいな妙なこと考えないで素直にするのが一番一般的にわかりやすい。
640 :
デフォルトの名無しさん:2012/01/25(水) 22:18:47.26
VC#の右下のプロパティから設定してもフォームデザイナに反映されないのに
コードからプロパティを設定すると反映されるプロパティってありますよねreadonlyプロパティとか。
やっぱりプロパティって右下で設定しないものでしょうか?
>>638 いまいち要領を得ないんだが、operator implicitで良くない?
XLinq系のように
属性値をインデクサで指定しないが正解っぽい
#000000と0xFF000000って同じ?
禅問答か
プログラムを終了するときにApplication.Exit();だと確実に終了できないって電車の中で盗み聞きしました
どのようにして終わらすのでしょうか?
649 :
デフォルトの名無しさん:2012/01/25(水) 23:07:50.24
c++/bliのwinフォームだとマネージ型classってexternできなかったんですが、
C#のwinフォームではマネージ型classをexternして別ファイルで参照。
みたいな事って出来るんですか?
後、できない場合、他の方法で上の条件を満足する動きをするように組むにはどうしたら良いですか?
最後に、今日からC#改めてやり始めようと思ってるんだけど、C++みたいなノリでは書けないですよね
意味がわかってないかもしれない。すまん。
DLL にして(クラスライブラリを作成して) static なインスタンスとして
どっかに保持しておけばいいと思う。
そもそもマネージ型しか C# にはない。
>>650 c++を使えて
c#やったら幸せになれる
c#のバージョンと.netのバージョンって対応関係あるんですか?
c#4.0には、.net4必須みたいな。
654 :
650:2012/01/25(水) 23:48:16.20
>>649 すいません、説明が足りませんでしたね。
外部からリソースを読み込んで、
その内容をclassに突っ込んで
他の.csから上のclassのメンバを参照しながら云々くんぬん処理してくって質問です。
いまんところC#のバージョン=.NETのバージョン
少なくとも整数バージョンはね
656 :
650:2012/01/25(水) 23:50:14.49
>>652 連レス申し訳ない。
なるほど。
二刀だとかなり良いみたいですね!
一度挫折しましたがもう一度頑張ってみます
webBrowserでサイトを表示してファイル名の入力欄の隣にある参照というボタンを押したいのですが
DOMのエレメントの中には含まれないようなのでClickイベントを発生させられないみたいです
マウスポインタを操作する以外でほかに方法があったら教えてください。
>>656 おれは
>>652 じゃないけど、
C++ レベルで言語を知っていると C# を使う際にも効率的なコードが書けるよ、
という意味であって、C++ を頑張れという意味ではないと思うんだ。
もしくは、高速化のために部分的に C++ を使えるからいいという意味か。
マネージ型云々言うってことは、.NET 触っているのだろうけど、
それならば素直に C# 使うほうがいい。
660 :
638:2012/01/25(水) 23:56:21.77
>>639,644,645
ありがとうございます。
operator implicit は知らなかったのですが、試してみます。
インデクサを使わずにメソッドを使うというのも選択肢ではあるのですが、
既存部分がプロパティを使ってるのと、自分の 趣 味 で。
前言と矛盾してますね。すみません。
>>658 それC#の質問じゃないと思うけど、FileUploadはJavaScriptからロクに弄れないから無理だと思うよ
663 :
650:2012/01/26(木) 00:06:50.01
>>659 回答ありがとうございます。
それはわかっていたつもりです。
C→C++とやってきてC#やってみようかな
と昔思った時にC#の本を借りてきたんですけどすぐ挫折してしまって
で、今またC#が必要っぽい状況になったので改めて学び直そうと思ったという事です。
C++ ではなくて C# に挫折したのか。勘違いだったわ。ごめん。
すいません、comoさんのところのサンプルコードなのですが、
var thumb = sender as Thumb;
if (thumb == null) return;
var parent = thumb.Parent;
if (parent == null) return;
double x = Canvas.GetLeft(parent);
if (double.IsNaN(x)) x = 0;
double y = Canvas.GetTop(parent);
if (double.IsNaN(y)) y = 0;
Canvas.SetLeft(parent, x + e.HorizontalChange);
Canvas.SetTop(parent, y + e.VerticalChange);
というコードを実行するとParentに対して
'System.Windows.DependencyObject' から 'System.Windows.UIElement' に変換できません
というエラーが帰ってきます。親要素を取得したいのですが、どうすればいいのでしょうか?
思っていたとおりだ。
Parent は DependencyObject という型だから、UIElement 型に変換しないといけない。
実際に、親要素はなんなのかな。
まあ、
if (parent == null) return; のあとに
parent = parent as UIElement; とでもしておけ。
実際のUIツリーはVisualTreeHelperで調べるんだよ
ごめんミスった。
var uiElement = parent as UIElement;
として、以降 parent -> uiElement
それじゃだめだろ
var parent = thumb.Parent as UIElement;
としないと
(UIElement)で例外出す方が後の工程にやさしいと主張しておきたい
>>670 returnされるならそれはそれで正しい動作だろ
あとでCanvas.GetLeft(parent);やってんだから
おお、みなさん有難う御座います!とりあえずヒントもとにcomoさんのサンプルが再現できるよう頑張ってみます!
>>669さんのやり方でコンパイルは通りましたが後の処理がうまくいかないです…
>>666さん、
>>669さんのやり方試して見ます!本当に有難う御座います!
Thumbだからドラッグアンドドロップでもやってんだろ
だめですちょっと上手く動きません…みなさん本当にすいません。お力添えいただいたのですが完成させることできませんでした…
本当に本当にありがとうございました!
Parent の中身がわからないと対応できないと思う
ステップ実行とか、ブレークポイントを覚えるといい
後は、というより前提として文法を覚えたほうがいい
サンプルコードで勉強したいんだろうけど
そのサンプルコードすら動かせない
この世界ではそんなことが日常茶飯事だよ
でもめげないでね
そうですね…知識、足りないですね。ExplessionBlendばっかりにかまけてて…
もっと勉強してきます!ありがとうございます!
var parent = thumb.Parent;
Console.WriteLine(parent.GetType());
かなんかやると出力ウインドウに本当の型名が出てくるから
それをコピペしてググるといいよ
Console.WriteLineって書いてある行でF9を押して行を赤くしてから実行するとそこで止まるから
そうなったらparentにマウスカーソルを合わせても情報が見れる
>>680 ありがとうございます!別の課題に当たってからもう一度やってみようと思います。その時参考にさせて頂きます!
C#ユーザーの為のAndroidプログラムの本とかってないのかな
queue はオワコン
ないでしょ。
あなたが本の著者なら、そんな読み手をわざわざ限定するような本を書くでしょうか?
それもAndroidバブルの時に
MONO for AndroidってGUIはXMLでしか編集できなくて端末内ライブラリがアプリ無しで50MBぐらいあるのな
INotifyPropertyChangedの実装を簡単にする方法はありますか。
今は下のように書いてます。プロパティごとに毎回こんなの書きたくないです。
public string Hoge { get { return _hoge; } set { if (_hoge != value) { _hoge = value; if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("Hoge"); } }
↓みたいなマクロを使えたら嬉しいんですが。
#define MAKE_PROPERTY(NAME, TYPE) \
private TYPE _##NAME; \
public TYPE NAME { get { return _##NAME; } set { if (_##NAME != value) { _##NAME = value; if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(#NAME); } }
MAKE_PROPERTY(Hoge, string)
コードスニペットでも登録すれば
>>682 ありがとうございます。そのページのコードは問題なくどうさするんですけど、問題は次のオブジェクトを並べる部分で…
自分で
.Net4.0がインストールされてるかどうか調べる方法はありませんか?
.net4でコンパイルしたのに3.5でも動くのはなぜ?
692 :
690:2012/01/26(木) 10:53:51.96
>>691 それって.Net4.0の新機能を使ってないからじゃないですか
>>692 そうか。新機能を使ってなければ3.5でいいのか。
ありがとん。
初心者で文法は終わったくらいなんですが、上達するには何をしたらいいですかね?
XNAでゲーム作りたくて、C#からプログラミング初めました
文法はわかってるつもりですが、でかいものを作ることができません
少ないコードのサンプルがいいんですが、何かいいホムペとかないですか?
自分が欲しいツールを作っていくのが一番
文法わかっているなら、少ないコードのサンプルなんて不要だろ
DOBONで十分
他人のソースを読むことは大変勉強になる
海外ではオープンソースのコードがいっぱい落ちてるからそれでも読んだらいい
codeprojectなどがいいかもしれない
理想的なコードだけじゃなく、酷いコード読むのも勉強になるしなw
まずは小さいものを大きくしていくのをやってからでいいのでは?
読んでばかりじゃ自分のものにならない。
みなさまありがとうございます。
>>695です
なんというかプログラマ的思考法に慣れてないようでかなり苦手意識感じてるんで少ないコードのって話になっちゃいました
幸いxnaのサンプルがあるんでそれが近道のようなので読んでみます ありがとうございます
ちょこっとした物も作れないようなスキル者がいきなりXNAでゲームなんか作れるわけないじゃん
作れるとしたら単なるコピペで動かせるようになるだけ
public MainWindow()
{
InitializeComponent();
_mediaelement = new MediaElement();
_mediaelement.Source = new Uri(@"D:\test\test.mp4");//テスト用の動画を指定。長さは30分
_mediaelement.ScrubbingEnabled = true;//シーク中の動画が描画されるように設定
_mediaelement.LoadedBehavior = MediaState.Manual;//再生・一時停止・停止が行えるように設定
_mediaelement.Position = new TimeSpan(0, 10, 0);//動画を10分までシーク
_mediaelement.Pause();//動画が描画されるように一時停止。
MediaArea.Children.Add(_mediaelement);
}
この後、ボタンをクリックして _mediaelement.Play();を呼び出すようにしたのですが、なぜか10分から再生されず、動画の最初から再生されてしまいます。
どこがいけないのでしょうか。
Positionは再生後にしかいじれない
それより…
コンストラクタに渡すパラメータのチェックって呼び出し元ですべきですか?それともコンストラクタ内でやるべきですか?
DbC的には呼び出し元
外部に公開しないのならパラメータのチェックをする必要性すらない
失敗したらバグと見做すチェックは呼び出し先でやる
それをあらかじめ回避するのは呼び出し元の責任
DbCは契約が守られなければAssertするんだから内部でチェックしてないってのとは全く違う
新規プロジェクトでクラスライブラリを作成して
ライブラリを使うプロジェクトでは既存のプロジェクト追加して使うのが簡単
呼び出される側がチェックするのは事後条件と不変条件
パラメータのチェックは呼び出し側の仕事
保証されていることを確認すんのは誰だよマヌケ
コンストラクタ内でパラメータエラー見つけたら
例外を投げないといけない
呼び出し側はパラメータの細かい条件なんて知らないでしょ
同じ人が書いてるならいいんだろうけど
リリースコードに入らないだけでDebug.Assert(String.IsNullOrEmpty(name));が並んでいる
staticのCreateメソッドでも作っとけよ
総武ソフトウェア推進所ってなんやねん
VC#2012って出ますか?
2008から2010って3年で出てるのでもしかして出ますか?
今から2010を入れて勉強するのはやめるべきでしょうか?
2012が出たって基本は何も変わらないと思うけど
2008以降そんなに変わってないよねC#
VS2012って何?VS11とは違うもの?
2012は出るよ
次のバージョンのC#は非同期サポートがはいるのでものすごく変わる
「別スレッドからフォームにアクセスできません><」
これは変わらない
別スレッドで処理が一区切りついたらUIスレッドに戻って更新して別スレッド処理を再開して…
のよくある流れが自然に書けるようになるからBeginInvokeを使う機会は減るんじゃないの
ちゃんと理解してないと使えないのは変わらないだろうけど
XPだと使わしてくれないんだよな、次verからは
すみません。質問いいですか?
コンボボックスにテーブルをバインドしてDisplayメンバとValueメンバを割り当てています。
そのValueメンバとある文字列が一致したDisplayメンバを得たいのですが
どうしたら効率がいいでしょうか?
お願いします。
その程度の処理に効率もクソもないだろ
うん
コンボボックスに一度に表示できる程度の常識的な数なら線形検索でも全く問題ない
一応DataRowCollection.FindとかDataView.Findは気持ち効率的ではある
DataTable.Selectはダメだぞ
LINQ to DataTableは知らん
ありがとうございました。
foreachでやる方法でいいですかね?
n=>n=とある文字列
Windows 用アプリケーションとASP.netってのがありますけど
ここはWindows用アプリケーションのことを質問するスレですか?
>>731 いいえ、C#のことを質問するスレです
>>732 var dataObj = new DataObject( DataFormats.StringFormat, filename );
var e = new DragEventArgs( dataObj, 0, 0, 0, DragDropEffects.All, DragDropEffects.Copy );
かな
だけどこんな糞な呼び出し方しないで、
画像を文字列で設定するメソッドを書いて
それをpictureBox1_DragDropとbutton1_Clickの両方で呼ぶ方がいいよ
ああ違うわ
DataFormats.FileDrop形式でデータオブジェクトにデータをセットしないといけないんだけど
それはグローバルメモリ確保したりCOMの知識がいるからこのスレ的にはほぼ無理
735 :
650:2012/01/27(金) 08:28:14.01
ちょっとC#の入門ページみれば
ref修飾子がありました。
やりたい事にうってつけの動作でした。
ありがとうございます。
refはすごく便利だからなぁ
よくわからんかったらとりあえずrefでいいし
でも、ちゃんとoutも理解しておくんだぞ
c++の人はすんなりoutわかるだろ
>よくわからんかったらとりあえずrefでいいし
おま・・・なんて恐ろしい事を・・・
正直refの使い道は少ないし
多用するべきではない
>>738 あ、dllの挙動がわからんかったら、とりあえずrefで渡して値が変わったか確認しろって意味ね
言葉足らずですまん
dllの挙動ってDllImportのことか?
>>733の方法でできました。
どうもありがとうございます
Graphics.DrawImageについて教えてください。
マルチスレッドで、各スレッドの中でDrawImageを多用します。するとどうしても
CPU使用率が25%前後(クアッドコアなので1スレッドぶん)しか稼働しません。
いろいろ調べると、下記のサイトで全く同様の症状の人がいらっしゃったのですが、
どうも最終的には解決していないようです。ここにあるnew Bitmap(filename)で
ファイルをひらくのはやっています。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=42683&forum=7 また調べるとBitBltを使う方法もあるようですが、機能的にどうしてもGraphics
クラス、またはそれと同等の回転縮小平行移動が自由にできる機能が欲しいです。
高速化に良い方法ありませんか?
DirectXかWPFを使う
ソフトウェア描画は遅いもの。どう頑張ってもGPUアクセラレーションには全然敵わないから
速度を求めるなら無駄な努力するよりWPF使ったほうがいいよ。
本当に画像の回転縮小平行移動だけでいいなら直Direct3Dも難しくないけど。
ownerって前もいたな
またお前か
注意力散漫だぞ
すぐそうやってWPFを薦めるが、本当に速いと思っているのか?
WPFはGPU描画って鵜呑みにしてんじゃないの
750 :
743:2012/01/27(金) 22:30:03.87
みなさんアドバイスありがとうございます。
GPUアクセラレーションより遅いのは仕方ないとして、1スレッドぶんしか動かない
ことが問題だと思っています。まさに
>>747が指摘再現してくれているとおりです。
で、オススメしてくれたWPFはちょっと描画全体書き直しになりそうなので敬遠して
DirectXを調べてみようかと思います。今まで使ったことないのでまた苦労しそうだけど。
ちなみにDrawImageは画面描画のためではなくて画像処理だけに使うので、本当に回転
縮小平行移動しか使いません。
>>746の難しくないという言葉をはげみに頑張ってみます。
そもそもDirectXも仮想化レイヤ(GDIよりドライバに近いというだけ)だから、
DirectXを使用している=ハードウェア支援が受けられるではない。
画像の線形変換付き描画だけならWPFは速いよ
ビットマップキャッシュをオンにすれば直接Direct3Dと遜色ない速度が出る
>>747 Bitmapをファイルパス指定のコンストラクタで作るとロックがかかるから1スレッドしか動かんって
>>743に書いてあるでしょうが
ASPで、新しいタブで同じASPを表示したら同じセッションになってしまいます。
別のセッションにしたい場合はどうすればいいですか?
Abandonしたら元のタブのセッションも消えてしまいました。
そういう仕様のブラウザをデプロイしてあげる
>>754 同一マシンなら当然だろ…
タブ変えたら別セッションにしてたら通信できないだろ
あるdllを参照に入れてから
そのdll用のusing System.○○をコードに書いてます
もしdllがない場合はエラーで例外とか強制終了になりますと思いますが
プログラム起動時にdllの存在を確認してなければエラーダイアログを出して終了させるという処理はForm_Loadに入れればいいのでしょうか?
>>753 SetPixelは100%行くっていってんじゃん
人の話はちゃんと把握しろよ?
>>757 プロジェクトの参照に追加しているのなら
プログラムのMainに入る前にロードの処理をやるから
確認する暇は与えられない
いっそのことローカルコピーをtrueにしちゃえば
サイズはでかくなるけど
だいたい
>>743に書いてあれば正しいって頭おかしいんじゃねえか?
実測が最も正しいに決まってんだろ
そもそも
>>743にすら
>Bitmapをファイルパス指定のコンストラクタで作るとロックがかかるから1スレッドしか動かん
などと書いていない
>using (FileStream fs = File.OpenRead("イメージファイル"))
>
>ここでファイル開いてますよね?
>そして、using句を抜けるまで、開きっぱなしってことですよね。
>この行をなくしたら、非同期になりません?
>
>Bitmap bitmap = new Bitmap("mypicture.jpg")
>
>とかならOKかと思いますが。
全然逆じゃねえか
ロックされたくなければnew Bitmap(fileName)使えといってんだよこいつは
自分が参照した文書すらまともに確認せずに人様にケチつけるとはどういう了見だ?
死ね
二度と俺に話しかけるな
そんなことくらいでキレ過ぎw
初心者スレなんだから、回答者にもしたり顔の初心者くらい混じってるよ。
話に口を挟んだ挙句、それが間違ってるとなれば、腹が立つことは否定しないけど。