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

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

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

前スレ

ふらっとC#,C♯,C#(初心者用) Part29
http://pc11.2ch.net/test/read.cgi/tech/1216734995/
2デフォルトの名無しさん:2008/08/20(水) 17:19:16
[プログラム板] C#, C♯, C#相談室 Part47
http://pc11.2ch.net/test/read.cgi/tech/1214038282/

WPF(XAML,XBAP,.NET3.5)GUIプログラミング
http://pc11.2ch.net/test/read.cgi/tech/1211453941/

Live2
http://pc11.2ch.net/test/read.cgi/tech/1203674757/

初心者のためのプログラミング言語ガイド Part11
http://pc11.2ch.net/test/read.cgi/tech/1218282605/
3デフォルトの名無しさん:2008/08/20(水) 17:20:08
4デフォルトの名無しさん:2008/08/21(木) 08:21:56
おっつ
やっぱり立てたのね
5デフォルトの名無しさん:2008/08/21(木) 10:38:34
C#と直接関係ないのですが、マニュアルを書くときにメニューの
展開時の画面をキャプチャーするにはどうすればよいでしょう?
展開時に別のキャプチャー用の画像取り込みソフトを操作すると
展開していたメニューが引っ込んでしまいます。これを取り込むため
には通常はどのような方法で行うのでしょう。よろしくお願いします。
6デフォルトの名無しさん:2008/08/21(木) 10:49:26
キーでトリガにするとか、時間で撮ってくれるソフトとかあるよ。
まあオレはWindows標準の機能(PrintScreenキー)使ってるけど
7デフォルトの名無しさん:2008/08/21(木) 12:29:30
いちもつ
8デフォルトの名無しさん:2008/08/21(木) 12:56:45
普通にAlt + PrintScreenだろ普通は。
ソフト使うにしても>>6の言うようにホットキー設定すればいいし。
つかそんなことも分からんやつがC#で開発なんかできるのか?
C#どころかWindows質問スレレベルだし
9デフォルトの名無しさん:2008/08/21(木) 13:00:57
>>6>>8
>Alt + PrintScreen

わかりました。ありがとうございました!
10デフォルトの名無しさん:2008/08/21(木) 13:39:23
まあAltはメニュー出してるときは無理だけどなw
マルチディスプレイでAlt無しで2画面分丸ごととって切り取る。
118:2008/08/21(木) 14:40:41
>>10
あ、ほんとだ盲点だわw失礼。
まあ全画面キャプチャから欲しいところだけ切り取ればいいよね。
12デフォルトの名無しさん:2008/08/21(木) 21:14:53
>>11
そんな面倒なことをしないための方法を聞いているのだろ。
そんなことも分からんやつがC#で開発なんかできるのか?してんのか?
C#どころかWindows質問スレレベルに答えられていない。
13デフォルトの名無しさん:2008/08/21(木) 21:37:34
じゃあキミが答えてやれよ
質問者は満足して帰っちゃっただろうけど
14デフォルトの名無しさん:2008/08/21(木) 21:51:41
面倒だからビデオにでも撮れ
15デフォルトの名無しさん:2008/08/21(木) 22:42:01
ファイルにデータを追記しようと思うのですが、
ファイルの先頭に追記するのと末尾に追記するのではどちらが負荷がかかりますか?
また、新規ファイルに書き込むのと比べてどちらの負荷が大きいでしょうか?
よろしくお願い致します。
16デフォルトの名無しさん:2008/08/21(木) 22:43:44
>>15
先頭には追加できない。
17デフォルトの名無しさん:2008/08/21(木) 23:05:58
先頭に追加しようと思ったら、残りを全部後ろにずらさなきゃならない。
ってことだ。
分かるよな。
18デフォルトの名無しさん:2008/08/22(金) 00:30:29
自分からテスト専門です、って宣言してる派遣テスターって何なの?

将来プログラマとかSEになりたい、とかならわかるけど。
向上心ないよね、頑固だし。
そういう派遣テスターって、仕様書は読めない、
テスト仕様書も作れない、テストプログラムも作れない
やれることは「テキトーにプログラムを触る」ことだけ。

俺は派遣プだけどさ、こういう派遣テスターがいると
派遣全体がバカにされるんだよ。
テスト専門派遣なんて氏んで欲しいよ、まったく。

今日も正社員の人が派遣テスターに仕様書を読んで
テスト仕様書を作ってください、って説教してたよ。
その派遣は頑固に「何故、仕様書が必要なんですか?」って
反論してたから、きっとテスト専門派遣テスターだな。
仕様書も読まず、テスト仕様書も作らず、ただテキトーに
プログラム触るだけで給料もらおうなんて頭おかしいんじゃねーの?

あ〜あ、あの派遣テスターが3ヵ月後に切られるまで、
仕様書も読まねーでテキトーにテストしたバグ票がまわってくんのかよ。
そんな糞なもん、読んで処理する派遣プの身にもなってくれよ。
うわ〜、しかもそいつが切られる3ヵ月以内に中間納品あるじゃねーか!
テスト仕様書もなしにテキトーにテストして納品か。
中間納品後にソッコウクレームでデスマ必至だな。俺の休みも返上かよ。

派遣専門テスターさんよ、少しは向上心持てよ!
頑固な性格直して仕様書読めよ!テスト仕様書作れよ!
19デフォルトの名無しさん:2008/08/22(金) 07:43:23
コピペ君が多いな
20デフォルトの名無しさん:2008/08/22(金) 14:49:01
>>15
ファイルの大きさや
>末尾に追記する
の方法による。下手すりゃ
>新規ファイルに書き込むのと
と同じになる。
21デフォルトの名無しさん:2008/08/22(金) 15:05:59
今あるファイル(■)がディスク上に
◆◆■■■■■◆◆ってあったら、ここに追記したら激しく断片化しない?
それとも、◆◆■■■■■□◆◆の様に常に余裕をみて割り当ててるの?
多少空き領域は断片化するかもしれないが、ファイルは断片化しにくいと思って毎回新しいファイルとして作ってた(その方が楽だし)
◆◆□□□□□◆◆■■■■■■■■
22デフォルトの名無しさん:2008/08/22(金) 15:14:04
結局全部読むならいっしょやん
23デフォルトの名無しさん:2008/08/22(金) 15:25:39
>>21
ただ記録しておくだけのログみたいなものなら別に断片化してもかまわないし、
後から何度も読むにしても断片化した大きなファイルを読むのと、
バラバラに配置された複数のファイルを読むのとでは時間にそれほど差はないと思うよ。

読み出すのに少しでも速度が必要ならば、予めある程度の大きさの領域を確保しておく他ない。
24デフォルトの名無しさん:2008/08/22(金) 15:26:21
>>21
お前さんがうだうだ考える程度のことはファイルシステムの設計者やWin32APIの設計者は考慮済みだと思うよ
25デフォルトの名無しさん:2008/08/22(金) 15:37:45
>>21
     [゚д゚] ・・・・。
     /[_]ヽ
      | |
◆◆□□□□□◆◆■■■■■■■■
26デフォルトの名無しさん:2008/08/22(金) 15:39:18
>>21
どうせ新しく書き出すなら、一旦別の名前で書き出してから
(古いのを削除し)本来の名前に変えるようにしたほうがいい。

こうすると、もし書込み中に死んでしまっても、古いファイルが残っていて安心できる。
27デフォルトの名無しさん:2008/08/22(金) 16:34:02
断片化を気にする男の人って・・・・
28デフォルトの名無しさん:2008/08/22(金) 16:36:48
そんなことより、きっちりかっちりシンメトリーかどうかを気にしろよ
29デフォルトの名無しさん:2008/08/22(金) 17:06:28
普通の男なら気になるだろw
30デフォルトの名無しさん:2008/08/22(金) 17:07:30
>>1
31デフォルトの名無しさん:2008/08/22(金) 19:06:29
ListBoxのオーナードローで、各項目に
UserControlを貼り付けるようなことってできるのでしょうか?
32デフォルトの名無しさん:2008/08/22(金) 19:20:22
>>31
WPFを使えば簡単にできるよ。オススメしたい。

オーナードローで多分できるとは思うけど、クリックイベントの処理とか面倒臭そう。
俺はオーナードロー使ったことないからあくまで想像だけど。
33デフォルトの名無しさん:2008/08/22(金) 19:35:33
知らないなら黙っててください
他の方お願いします
34デフォルトの名無しさん:2008/08/22(金) 19:42:01
>>32
ありがd
WPFちょっとさわってみます
35デフォルトの名無しさん:2008/08/22(金) 20:37:08
>>33何か面白いのか知らんが
うざいだけだからもうやめろ
36デフォルトの名無しさん:2008/08/22(金) 20:39:32
想像でラクガキするのも同罪と思うな
37デフォルトの名無しさん:2008/08/22(金) 20:43:15
俺様棚上げクンw
38デフォルトの名無しさん:2008/08/22(金) 20:44:36
ほんと、知らなきゃ黙ってろって事、よくあるよね。
どんな神経してるんだろ。初心者スレで不確かな事言ってなんになるの?
39デフォルトの名無しさん:2008/08/22(金) 20:54:20
猫でもわかるC#のホームページにC#フォーム編があるんですが、
これってVS2005の時にかかれたものみたいなんですが、VS2008でも
フォームを作るデフォルトは代わってないですか?これより、VS2008
のフォームを作る勉強したほうがいいですか?
40デフォルトの名無しさん:2008/08/22(金) 21:00:18
>>39
変わってないから安心しんさい
4139:2008/08/22(金) 21:06:47
>>40
ありがとうございます。このページは結構親切にのっていて、
本を1冊やると同じくらいいいので、得しました。
多謝です。2000円浮いた〜。
42836:2008/08/22(金) 21:51:13
前回の>858
返事がだいぶ遅くなってしまいました。
3行目だけほしいという処理で、ぜんぶを読めといわれたので、なんとかトライしてみました。
が、どうしてもぜんぶを読めずにいます。
ソースは次のとおり。iとsとsrの名前を変えただけです。
ご呈示いただいたところだけだと、読み込みファイル名がなかったりするので、それを足したりしました。
アドバイスよろしくお願いします。

43836:2008/08/22(金) 21:53:05
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Diagnostics;
using System.Text.RegularExpressions;

class ReadWrite{
[STAThread]
public static void Main(string[] args) {
string fileName = args[0]; //引数をファイル名とします。
string[] lines = ReadAllText(fileName); //ReadAllTextは現在のコンテキスト内に存在しないそうです。どう定義したらいいんでしょう? それともこの行は不要?
using(StreamReader readContents = new StreamReader(fileName, System.Text.Encoding.Default));

{
string line = null;
int lineNumber = 0;
do {
line = readContents.ReadLine(); //readContentsは現在のコンテキスト内に存在しないそうです。定義の位置が問題でしょうか?
if(lineNumber == 3) {
Console.WriteLine(line);
break;
}
lineNumber++;
} while (line != null);
}}}
44デフォルトの名無しさん:2008/08/22(金) 21:59:26
ReadAllTextとreadContentsを定義しろよ
45デフォルトの名無しさん:2008/08/22(金) 22:10:18
ワロタ、usingの最後に余計なものが…
46デフォルトの名無しさん:2008/08/22(金) 23:25:52
>>43
1. ReadAllText を Google
2. 前スレ858をあと100回読む
47デフォルトの名無しさん:2008/08/23(土) 00:06:37
デリゲートってオブジェクト志向的には有りなんですか?
なんか積極的に使っていいのか分からんのだけど。
48デフォルトの名無しさん:2008/08/23(土) 00:15:03
オブジェクト指向の暗黒面に囚われてないかい?
49デフォルトの名無しさん:2008/08/23(土) 00:21:46
>>47
オブジェクト指向って何だと思ってるの?
50デフォルトの名無しさん:2008/08/23(土) 00:32:53
とりあえず「有り」か「無し」で。
51デフォルトの名無しさん:2008/08/23(土) 00:35:08
とりあえず、『とりあえず「有り」か「無し」』かを迫るような
単細胞な質問は「なし」だな。
52デフォルトの名無しさん:2008/08/23(土) 00:42:48
必要性があるから存在するにきまってるだろう
53デフォルトの名無しさん:2008/08/23(土) 00:43:09
2択にしても難しい問題だったんだ・・・
54デフォルトの名無しさん:2008/08/23(土) 00:46:53
使わないと実現できない処理がある以上「有り」としか言いようがないでしょ。
「オブジェクト指向だから,これは出来ません」って通らないよね?
55デフォルトの名無しさん:2008/08/23(土) 00:50:29
どうして「無し」と思うのか述べてみろよ。
56デフォルトの名無しさん:2008/08/23(土) 01:08:35
暗黒面ってなんだよw
手続きの方がよっぽどカオスじゃんw
57デフォルトの名無しさん:2008/08/23(土) 01:09:45
>>50
この「無し」ってのは君が理解してないだけ
58デフォルトの名無しさん:2008/08/23(土) 02:26:13
UMLであらわせるれるかどうかと基準ならプロパティやenumだってなしだな。
59デフォルトの名無しさん:2008/08/23(土) 07:51:57
>>47オブジェクト志向的に……

有りだとする。
→オブジェクト指向万歳ってことでどんどん使え。

無しだとする。
→C#はオブジェクト指向だけじゃないマルチパラダイム言語だから、
オブジェクト指向に捕らわれずどんどん使え。
60デフォルトの名無しさん:2008/08/23(土) 08:03:11
プロパティの中身はメソッドの自動生成機能だし、
enumはクラスの自動生成機能でしょ?
delegateもメソッド1つのインターフェース作ったりするのと
同じじゃない?
ただの便利機能じゃないのか。
61デフォルトの名無しさん:2008/08/23(土) 08:46:36
 delegateは関数ポインタに近い機能と思えばよい、と何処かに書いてあった。
→ ということは、過去の遺物を引きずっているのではないか?
→ 俺の知ってる最新鋭のオブジェクト指向言語に似合わない!

ごめん、思考のトレースに失敗した。色々と無理があった。ごめん。
62デフォルトの名無しさん:2008/08/23(土) 09:11:11
結局、全ては機械語の構文糖衣なんだよ。
63デフォルトの名無しさん:2008/08/23(土) 09:17:22
オブジェクト指向の既存の機能を使って実現したものでも、
それがオブジェクト指向であるかどうかとは無関係。
例えシンタックスシュガーであっても概念的に違うものになりえる。
64デフォルトの名無しさん:2008/08/23(土) 09:19:54
>>62
それはいいすぎ
機能を実現するかどうかか、ではなくて、
どれだけ生産性を向上するかどうかがオブジェクト指向を使う意義なんだから
65デフォルトの名無しさん:2008/08/23(土) 10:22:04
つまり、delegateはオブジェクト指向の概念と合わない?
66デフォルトの名無しさん:2008/08/23(土) 10:24:54
なんでそうなるんぞ
67デフォルトの名無しさん:2008/08/23(土) 10:29:31
delegateは、関数ポインタをクラスでラップしたものだね。
68デフォルトの名無しさん:2008/08/23(土) 10:51:16
女の子はデリケートだぞっ!
69デフォルトの名無しさん:2008/08/23(土) 11:07:20
関数ポインタというより委譲モデルを簡略化したと考えれば
オブジェクト指向から外れてないと思うけどね。
javaのlistener/adapter型の委譲モデルも意地悪を言えば、
内部クラスや匿名クラスはオブジェクト指向かどうか疑わしいよ。
70デフォルトの名無しさん:2008/08/23(土) 11:17:50
そうそう、関数ポインタって説明はあまり良い方向ではないと思う。
「処理」をカプセル化してオブジェクトとして扱えるようにしたもの
という方向の方が、今時の思想にマッチしてる。
もちろん単純に関数ポインタイメージで使うことはできるが。
71デフォルトの名無しさん:2008/08/23(土) 11:22:59
デリゲートに好きして
72デフォルトの名無しさん:2008/08/23(土) 11:25:16
デリゲートのスコープの外の変数もちゃんと見れて、そのまんまで、あちこち受け渡しできるんだもんな。
すげーよ。
73デフォルトの名無しさん:2008/08/23(土) 11:26:50
>>72
どういうこと?
詳しく
74デフォルトの名無しさん:2008/08/23(土) 11:32:29
クロージャということ、これはさすがにオブジェクト指向というより関数型。
75デフォルトの名無しさん:2008/08/23(土) 11:36:39
レキシカルクロージャとかいうやつ?
よくしらんけど
76デフォルトの名無しさん:2008/08/23(土) 12:00:31
クロージャってオブジェクト的とも見ることができる
詳しくはSICP
77デフォルトの名無しさん:2008/08/23(土) 14:48:31
オブジェクト指向とは・・・ただの言葉じゃ
78デフォルトの名無しさん:2008/08/23(土) 15:23:01
オブジェクト指向=良いもの
オブジェクト指向との合致度が高い言語=いい言語

そんな盲目的な思い込みが罠なんだ
79デフォルトの名無しさん:2008/08/23(土) 16:19:42
関数ポインタに毛が生えて好き物ってのでいいよ。
80デフォルトの名無しさん:2008/08/25(月) 10:33:34
オブジェクト指向もパフォーマンス悪いし、匙加減が重要
81デフォルトの名無しさん:2008/08/25(月) 11:34:37
C#でMDI フォームアプリを作成しています。

子フォームを最大化すると親フォームのメインメニューにアイコンが
表示されるのですが、これを非表示にするにはどうすればよろしいでしょうか?
82デフォルトの名無しさん:2008/08/27(水) 11:29:13
Dictionary<key,value>で、valueを指定してkeyを探すことはできますか?
83デフォルトの名無しさん:2008/08/27(水) 11:43:02
.Firstとか.Selectとか
あとはforeach
84デフォルトの名無しさん:2008/08/27(水) 11:45:08
SelectじゃなくてWhereだった…
85デフォルトの名無しさん:2008/08/27(水) 12:00:28
>>83
ありがとうございます。
FirstやSelectは初めて知りました。
しかし、なんでDictionaryにはFindやFindAllが無いんだろう
86デフォルトの名無しさん:2008/08/27(水) 12:09:43
Key使わない検索じゃDictionaryの旨みが無いから?
87デフォルトの名無しさん:2008/08/27(水) 21:56:40
まあ、検索スピード欲しけりゃ逆引きの方のDictionaryも用意すべきだし。
88デフォルトの名無しさん:2008/08/27(水) 22:59:26
class 逆引きつきDictionary<TKey, TValue> : IDictionary<TKey, TValue>{
private Dictionary<TKey, TValue> 順引き辞書;
private Dictionary<TValue, TKey> 逆引き辞書;

void Add(TKey key, TValue value){
順引き辞書.Add(key, value);
逆引き辞書.Add(value, key);
}
bool Remove(TKey key){
TValue v = 順引き辞書[key];
逆引き辞書.Remove(v);
return 順引き辞書.Remove(key);
}
TKey 逆引き(TValue value){
return 逆引き辞書[value];
}

}

これはねーか
89デフォルトの名無しさん:2008/08/27(水) 23:05:56
valueが重複したらアウトじゃねえかw
90デフォルトの名無しさん:2008/08/27(水) 23:50:12
なるへそじゃあ
void Add(TKey key, TValue value){
if(逆引き辞書.ContainsKey(value))
throw new valueが重複してますよExeption();
順引き辞書.Add(key, value);
逆引き辞書.Add(value, key);
}
っていう風になるのか?
91デフォルトの名無しさん:2008/08/28(木) 08:06:34
>>90
それか、逆引きの側は Dictionary<Value, HashSet<Key>>。
92デフォルトの名無しさん:2008/08/28(木) 13:34:59
フォーム内にWebBrowserコントロールを追加しているのだが、
その中の任意のポイントにクリックを発生させるにはどうしたらよいのだろう?

Cursor.Position = webBrowser1.PointToScreen(new Point(webBrowser1.Location.X + 50, webBrowser1.Location.Y + 50));
のような感じでマウスカーソルを希望するところに持っていくことはできたのだが、
そこにクリックを発生させる方法がわからない。

もしかしたらSendMessageでLEFTDOWN->LEFTUPでクリックを送ればいいのかと思ったけど、
今度はwebBrowser1のいわゆるhWndを取得する方法がわからない。

誰かお助け下さい。
93デフォルトの名無しさん:2008/08/28(木) 13:38:18
SendInputが一番楽じゃね
94デフォルトの名無しさん:2008/08/28(木) 13:52:00
Flashなどの組み込みオブジェクトではなく単にリンクやボタンなどのHTMLエレメントなどを
操作したいというのであればHTMLDOMつかってInvokeMember(マネージDOMの場合)で
Clickメソッドを実行したほうが楽と思われるが。
まあ、わざわざマウスクリックをしたいといってるから組み込みオブジェクトの可能性が高いなw
SendMessageではなく、mouse_eventというAPIを使ってみれば?こっちだとhWnd不要だから
95デフォルトの名無しさん:2008/08/28(木) 14:05:03
>>93
なるほど、そんな関数があったのね。
http://homepage3.nifty.com/midori_no_bike/CS/index.html?userIO.268
ここを見て、うまくいきました。
ありがとうございます。
96デフォルトの名無しさん:2008/08/28(木) 14:20:30
private setの自動プロパティにreadonlyが付けられたらいいのに
コンストラクタで初期化して以降変更しないものでも
自動プロパティが便利だからついreadonlyフィールド使わなくなっちゃうんだよね
独り言
97デフォルトの名無しさん:2008/08/28(木) 14:22:28
aho
98デフォルトの名無しさん:2008/08/28(木) 16:35:53
{0}をコンソールに表示する方法おしえてください
99デフォルトの名無しさん:2008/08/28(木) 16:40:24
Console.Write("{0}");
100デフォルトの名無しさん:2008/08/28(木) 16:43:46
エスケープの方法はヘルプの「複合書式設定」参照
101デフォルトの名無しさん:2008/08/28(木) 16:54:47
public struct MyStruct
{
public MyStruct(long value)
{
this.TotalValue = value;
}
[FieldOffset(0)]
public long Total;
[FieldOffset(0)]
public short Value1;
[FieldOffset(2)]
public short Value2;
[FieldOffset(4)]
public short Value3;
[FieldOffset(6)]
public short Value4;
}

//コンパイルエラー
フィールド 'Value1~4' は、コントロールが呼び出し元に返される前に割り当てられている必要があります。




ちゃんと割り当てられてるじゃんね。意外とコンパイラもお馬鹿さんだな。
まーどーでもいいことなんだけど、過疎ってるからネタを投下してみた
102デフォルトの名無しさん:2008/08/28(木) 16:56:14
struct MyStruct{
public MyStruct(long value){
this.TotalValue = value;
}
[FieldOffset(0)]
public long TotalValue;
[FieldOffset(0)]
public short Value1;
[FieldOffset(2)]
public short Value2;
[FieldOffset(4)]
public short Value3;
[FieldOffset(6)]
public short Value4;
}

コードミスったのはご愛敬で
103デフォルトの名無しさん:2008/08/28(木) 16:57:24
[StructLayout(LayoutKind.Explicit)]
struct MyStruct{
public MyStruct(long value){
this.TotalValue = value;
}
[FieldOffset(0)]
public long TotalValue;
[FieldOffset(0)]
public short Value1;
[FieldOffset(2)]
public short Value2;
[FieldOffset(4)]
public short Value3;
[FieldOffset(6)]
public short Value4;
}

属性付け忘れもご愛敬で。。。
スレ汚しすまない
104デフォルトの名無しさん:2008/08/28(木) 17:02:22
いや、コンストラクタで初期値セットせな
105デフォルトの名無しさん:2008/08/28(木) 17:04:39
Console.Writeline("{{0}}", 10);



{10}

を期待したところ

ぶーぶー

言われました

>>100さん、ありがとうございます
おかげさまで解決しました

>>99さん、二度とくんな
106デフォルトの名無しさん:2008/08/28(木) 17:06:11
98 :デフォルトの名無しさん [↓] :2008/08/28(木) 16:35:53
{0}をコンソールに表示する方法おしえてください

105 :デフォルトの名無しさん [↓] :2008/08/28(木) 17:04:39
>>99さん、二度とくんな

wwwwwwwwwwwwww
107デフォルトの名無しさん:2008/08/28(木) 17:10:40
>>99はたしかに{0}が出力される。
引数無いとそのまま出るみたいよ。
よって、>>98の質問の答えにはなってる。
108デフォルトの名無しさん:2008/08/28(木) 17:11:20
つーか最初から>>105の内容で質問すりゃいいのに。
109デフォルトの名無しさん:2008/08/28(木) 17:20:27
100の先もエスケープには限界あるから分けて出力する必要があるかもよって書いてるしな
110デフォルトの名無しさん:2008/08/28(木) 17:28:45
夏だねぇ
111デフォルトの名無しさん:2008/08/28(木) 18:24:32
>>110
そのセリフはちょびっと遅いぞ。
言ってみたかったの?
来年またトライしてみよう!
112デフォルトの名無しさん:2008/08/28(木) 19:24:54
一生懸命勉強して、大きなプログラマになるんだ!
113デフォルトの名無しさん:2008/08/28(木) 20:14:11
System.Security.AllowPartiallyTrustedCallersAttribute
というエラーが出てJScriptからDLLを呼び出せません…

呼び出せるDLLと呼び出せないDLLがあるのですけれども
どこが違うのでしょうか?よろしくお願いします m(_ _)m

http://www.isla-plata.org/wiki/pukiwiki.php?%B3%AB%C8%AF%A5%EA%A5%BD%A1%BC%A5%B9%2FJScript%2F%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8%A4%AB%A4%E9.Net%20Framework%A5%AF%A5%E9%A5%B9%A4%F2%CD%F8%CD%D1%A4%B9%A4%EB%A1%CA%A5%CE%A5%A6%A5%CF%A5%A6%CA%D4%A1%CB
114デフォルトの名無しさん:2008/08/28(木) 20:35:51
・セキュリティ上好ましくない為、部分的に信頼されたアセンブリは、厳密な名前付きのアセンブリを呼び出す事ができない。
それだと不便なのでAllowPartiallyTrustedCallersAttributeが付いた物に限り、利用可能になっている。

詳しくはMSDN見て来い
115デフォルトの名無しさん:2008/08/29(金) 02:06:09
 public int hoge(ここでエンターキー)

    ↓

 public int hoge
 {

 }

上のようにエンターキーでブロックが自動挿入されるように出来ないでしょうか?
VBから移行してきたばかりなので入力に手間取ってしまいます。
116デフォルトの名無しさん:2008/08/29(金) 02:09:24
一生VBやってればいいよ
こっちくんな
117115:2008/08/29(金) 02:11:02
自己解決しました
自動で複数行ブロックが挿入されるようにすると全部複数行になってしまうんですね・・・
118デフォルトの名無しさん:2008/08/29(金) 02:12:01
>>116
はじめまして。
119デフォルトの名無しさん:2008/08/29(金) 02:27:04
C#はいちいち面倒なことが多くて、やっぱりVBの方がいいですよ。
120デフォルトの名無しさん:2008/08/29(金) 02:28:40
ID出してくれええ
121デフォルトの名無しさん:2008/08/29(金) 02:49:25
誰だお前?死ねよ
122デフォルトの名無しさん:2008/08/29(金) 03:59:15
言語に優劣をつける気はないが、VBの
If a = b Then
だけはどーーしても違和感&不安になる
123デフォルトの名無しさん:2008/08/29(金) 04:00:27
自分の場合、ときどきIf a == b Thenって書いちゃうよ。
124デフォルトの名無しさん:2008/08/29(金) 09:15:44
VBの場合>>115みたいな機能が無いとタイプ量が多すぎるからな
C#でもifとかforとか使うときにコードスニペットが使えるよ
125デフォルトの名無しさん:2008/08/29(金) 10:08:03
c# から Windows のスタートメニューを開きたいのだけれど、どうやったらできますか?
SendKeys.Send("^{ESC}");
としても開けませんでした。
126デフォルトの名無しさん:2008/08/29(金) 10:28:05
>>125
[DllImport("user32.dll")]
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
const uint WM_SYSCOMMAND = 0x112, SC_TASKLIST = 0xf130;
private void button1_Click(object sender, EventArgs e) {
 SendMessage(this.Handle, WM_SYSCOMMAND, new IntPtr(SC_TASKLIST), IntPtr.Zero);
}
127デフォルトの名無しさん:2008/08/29(金) 10:40:16
>>126
早々にありがとうございますm(__)m
ばっちりです。
128デフォルトの名無しさん:2008/08/29(金) 18:06:00
TcpClient の受信処理で1024Byteずつ受信してメモリストリームに書き出しています。
NetworkStreamのDataAvailableが続きのデータがあるにもかかわらず、
FALSEを返して受信が終了してしまいます。
下記サイトでも同じ問題が記載されています。
http://www.niseko.or.jp/BlogX2/categoryview.aspx/UPnP

現在do〜while間にSleep(50)を入れると正常に受信できるのですが、
他にも解決策はありませんか?

  //クライアントとの間の通信につかうストリームを取得
  NetworkStream ns = server2.GetStream(); //server2は、TcpClient

  //クライアントから送られたデータを受信する
  System.IO.MemoryStream ms = new System.IO.MemoryStream();
  byte[] resBytes = new byte[1024];
  int resSize;
  do
  {
    //データの一部を受信する
    resSize = ns.Read(resBytes, 0, resBytes.Length);
    //受信したデータを蓄積する
    ms.Write(resBytes, 0, resSize);
    Thread.Sleep(50); //ここで50ミリ秒スリープさせると正常に受信できる
  } while (ns.DataAvailable);
  string responsStrings = enc.GetString(ms.ToArray());
129デフォルトの名無しさん:2008/08/29(金) 18:12:45
Readの返値で判断するのが吉
130デフォルトの名無しさん:2008/08/29(金) 18:15:22
リンク先見ずに書いたけどリンク先でもそう結論してんじゃんか
何が悲しいのかさっぱり理解できないが

DataAvailableがtrue返すのは多分その時点でネットワークからは読み取り終わってるから
Read前なのでバッファには残ってる
131デフォルトの名無しさん:2008/08/29(金) 18:18:51
なんか適当なことを書いてしまった
DataAvailableがtrueになるのはバッファにデータが溜まってるとき
Read連続で呼び出すとネットワークからの読み取りが遅れた場合にfalseを返すのは当然
132デフォルトの名無しさん:2008/08/29(金) 18:34:28
MSDNを正確に読めよ
133128:2008/08/29(金) 18:55:56
>>129
Readの返値で判断するのが吉

このReadの返り値は自分で用意したバッファサイズが返るだけのようですが・・
(resBytesのサイズ)

>>131
了解です。
100分の5秒遅れただけでfalseでは使えないと言うことですね。
MSDNのサンプルに騙されたか・・

1byteずつ読んでエンコードしてCONTENT_LENGTHを読んだ方が確実ですね。
134デフォルトの名無しさん:2008/08/29(金) 19:00:56
もっぺんReadの解説読んでこい
135デフォルトの名無しさん:2008/08/29(金) 19:02:06
Visual C# 2008 Expressを使ってるんですけども
デバッグビルドとリリースビルドはどうやって切り替えるんでしょうか
136デフォルトの名無しさん:2008/08/29(金) 19:13:05
MSDNはたまに意味不明なところもあるけど、それは君の技術力が足りなすぎていて理解できないだけ
137デフォルトの名無しさん:2008/08/29(金) 19:17:07
>>135
FAQだね
Expressをインストールしたらまずやるべきこと
ツール→オプション→すべての設定を表示 にチェック
プロジェクトおよびソリューション
→ビルド構成の詳細を表示・常にソリューションを表示・作成時に新しいプロジェクトを保存
にチェック
138デフォルトの名無しさん:2008/08/29(金) 19:19:54
NetworkStream..::.Read メソッド

パラメータ

buffer
型 : array< System..::.Byte >[]()[]

Byte 型の配列。NetworkStream から読み取られたデータを格納するメモリ内の場所です。

offset
型 : System..::.Int32

データの格納を開始する buffer 内の場所。

size
型 : System..::.Int32

NetworkStream から読み取るバイト数。

戻り値
型 : System..::.Int32

NetworkStream から読み取るバイト数。
139デフォルトの名無しさん:2008/08/29(金) 19:20:17
APIぐらいちゃんと読めよ
140デフォルトの名無しさん:2008/08/29(金) 19:27:44
>>138まだ続きがあるだろ。
解説
このメソッドは、データをbufferパラメータに読み込み、正常に読み込まれたバイト数を返します。
読み取ることができるデータが存在しない場合、Readメソッドは0を返します。
Read操作は、sizeパラメータで指定されたバイト数に達するまで、使用できるデータをすべて読み取ります。
リモート ホストが接続をシャットダウンし、使用できるデータがすべて受信されると、
Readメソッドはすぐに完了して、0バイトを返します。
141128:2008/08/29(金) 19:30:03
おわ!理解不足だったか
MSDNからコピってきました。
なにがいけないんだろう?

// Examples for CanRead, Read, and DataAvailable.

// Check to see if this NetworkStream is readable.
if(myNetworkStream.CanRead){
  byte[] myReadBuffer = new byte[1024];
  StringBuilder myCompleteMessage = new StringBuilder();
  int numberOfBytesRead = 0;

  // Incoming message may be larger than the buffer size.
  do{
    numberOfBytesRead = myNetworkStream.Read(myReadBuffer, 0, myReadBuffer.Length);

    myCompleteMessage.AppendFormat("{0}", Encoding.ASCII.GetString(myReadBuffer, 0, numberOfBytesRead));

  }
  while(myNetworkStream.DataAvailable);

  // Print out the received message to the console.
  Console.WriteLine("You received the following message : " + myCompleteMessage);
}
else
{
  Console.WriteLine("Sorry. You cannot read from this NetworkStream.");
}
142128:2008/08/29(金) 19:41:00
あ、Readの解説ありがとうございます。

resSize = ns.Read(resBytes, 0, resBytes.Length);
if (resSize == 0)
  break;

とすればいいわけですね。
これは>>131さんが言っている、
Read連続で呼び出すとネットワークからの読み取りが遅れた場合にfalseを返す
に対応できますね。

みなさまありがとうございます。
50にもなって初めてのプログラミング、何もかもが分からないことだらけです。
143デフォルトの名無しさん:2008/08/29(金) 19:51:36
年齢は関係ないだろ
144デフォルトの名無しさん:2008/08/29(金) 20:03:15
うむ、年齢は関係ないな。学ぼうとする気持ちが大事。
145デフォルトの名無しさん:2008/08/29(金) 20:09:01
新手の煽りか?
146デフォルトの名無しさん:2008/08/29(金) 20:59:39
50歳からのプログラミング
147デフォルトの名無しさん:2008/08/29(金) 21:11:58
暴れる50代は多いな。
http://pc11.2ch.net/test/read.cgi/tech/1204552981/738
148デフォルトの名無しさん:2008/08/29(金) 21:25:12
>>137
遅レスですがありがとうございました
149デフォルトの名無しさん:2008/08/31(日) 01:13:19
VBから移動組だけどはコードがシンプルでいいなあ
インテリセンスがもうちょっと使いやすかったらよいんだけど
150デフォルトの名無しさん:2008/08/31(日) 01:52:54
VC++からの移行組としてはインテリセンスがちゃんと効くだけで満足です
151デフォルトの名無しさん:2008/08/31(日) 02:31:56
JavaやらVBやらやってきたけど、Javaは言語の構造というかなんかすきになれなくて
VBは簡単すぎて(;´д`)ってかんじがしてたんだけど、ようやく自分に最適な言語をみつけた。
152デフォルトの名無しさん:2008/08/31(日) 02:37:52
そうですか。
153デフォルトの名無しさん:2008/08/31(日) 03:11:32
>VBは簡単すぎて
の意味がわからん。簡単な方がいいだろ
154デフォルトの名無しさん:2008/08/31(日) 03:31:52
そのJavaは言語の構造ってのは何のこと?
謎が多い奴だ・・・
155デフォルトの名無しさん:2008/08/31(日) 03:42:29
Javaは周辺技術を追いかけるのに疲れたってのはあるな。
156デフォルトの名無しさん:2008/08/31(日) 03:47:38
C#も凄いけどな。それよか、VBは追いかける必要なく得て、いつも言語に組み込んじゃう。だからVBの追いかけなくていいし、面倒ないからいいかなと思うよ。
157デフォルトの名無しさん:2008/08/31(日) 04:22:32
VBでなれちゃうと他に乗り換えるのがめんどくさくなってくる。
158デフォルトの名無しさん:2008/08/31(日) 04:37:42
それはない
159デフォルトの名無しさん:2008/08/31(日) 04:48:31
>>156
C#はMSだけ追いかけていればいいけど、JavaはSun以外からもいろいろ
出てくるのがしんどい。
160デフォルトの名無しさん:2008/08/31(日) 05:41:00
もうDしかない!
161デフォルトの名無しさん:2008/08/31(日) 07:06:41
private void 終了XToolStripMenuItem_Click(object sender, EventArgs e)
{

}

↑から↓を呼び出すにはどう書けばよいのでしょうか?

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
}
162デフォルトの名無しさん:2008/08/31(日) 07:19:10
フォームデザイナでイベントを定義してあれば、勝手に呼ばれるだろ。
163デフォルトの名無しさん:2008/08/31(日) 07:30:39
Linq to xml の事で少し手ほどきしてください
XmlSerializer 等を使うと、適当に作ったクラスを一発でシリアライズできますが
同様な感じで、適当に作ったクラスから XElement を作る方法で良い方法はありますでしょうか?
またその逆も簡単にできそうであれば教えてください。
現状ではXmlSerializerをStringWriterを経由させているのですが、なんとなくバカっぽいので・・・
164デフォルトの名無しさん:2008/08/31(日) 07:34:47
>>162
デザイナで終了XToolStripMenuItem_Clickのプロパティから
Clickイベントのドロップダウン一覧にForm1_FormClosingが出てこないので
定義できないのですが、ほかに方法があるでしょうか?
165デフォルトの名無しさん:2008/08/31(日) 07:38:22
>>164
デザイナでフォームのイベントを見てみ
ここでイベントを割り当てれば、イベントハンドラ定義が追加される。
フォームデザイナでどういうことをすると、どういうコードが追加されるのか
確認してみるといいよ。
166デフォルトの名無しさん:2008/08/31(日) 07:44:32
終了XToolStripMenuItem_Clickからフォームを閉じたいって言うこと?
でもe.Cancel=true;って書いてるし何がしたいんだかよくわかんね
167デフォルトの名無しさん:2008/08/31(日) 07:48:10
>>163
ぐぐったらこんなのがヒットした。
ttp://www.hanselman.com/blog/MixingXmlSerializersWithXElementsAndLINQToXML.aspx

XDocumentのCreateWriterメソッドがポイントみたいね。
168デフォルトの名無しさん:2008/08/31(日) 07:53:43
>>165
>>デザイナでフォームのイベントを見てみ

これはデザイナのプロパティウィンドウのイベントボタンを押したときの一覧ですよね?
>>161はここからダブルクリックで追加したコードですが
終了XToolStripMenuItem_ClickもForm1_FormClosingもどちらにも
お互い出てこないのでイベントハンドラを共有できないのですがどうすれば良いですか?
169デフォルトの名無しさん:2008/08/31(日) 07:59:03
>>164
ボタンからは普通にフォームを閉じるなりアプリを終了するなりすればいい。
>>165ができていれば、フォームが閉じられる前にFormClosingを拾えるはず。
で、イベントがキャンセルされてフォームは閉じられない。

何がしたいんだ?
170デフォルトの名無しさん:2008/08/31(日) 08:11:58
>>166
実際にはかなり複雑な分岐処理が書かれているので、ほとんど省略してます。

>>169
VBだと

Form1_FormClosing(sender,e)

で行けた様な気がしたので気になってDesigner.csでEventHandlerを直接いじっても
FormClosedも共有できないみたいだし、C#の仕様ということでしょうか?
171デフォルトの名無しさん:2008/08/31(日) 08:25:58
ボタンから閉じないけど同じ処理をしたいのなら別な関数として書いてそれを両方から呼び出したほうがよくね?
172デフォルトの名無しさん:2008/08/31(日) 08:28:48
片方が
EventArgs
もう片方が
FormClosingEventArgs
つまりそういうことだ
173デフォルトの名無しさん:2008/08/31(日) 08:37:04
>>170
Form1_FormClosingにブレークポイントを設定したら、フォームを閉じるときに
ちゃんと呼ばれるか?
呼ばれるなら、終了メニューにApplication.Exit();とかthis.close();とか書けば
いいっしょ。
174デフォルトの名無しさん:2008/08/31(日) 11:28:13
KeyedCollection使うときにGetKeyForItemをオーバーライドするためだけに
それぞれ派生クラス作るのってアホらしくない?
デリゲートでキーを返す派生クラスを一つだけ作るとか?
175デフォルトの名無しさん:2008/08/31(日) 18:44:33
それでもいいと思うが ObjectModel 内のクラスの存在理由とかそんなの
勘違いしてないか?
176デフォルトの名無しさん:2008/08/31(日) 22:06:54
日本語対応のフォントのみを取得する方法ってあります?
FontFamilyでインストールされてるフォントを全部取得することはできたんですが
そこから欧文フォントとかを除く方法がわかりません。
177デフォルトの名無しさん:2008/09/01(月) 14:03:41
>>170
クラスとキャストの概念が分かってないみたいだねぇ。さすがVB。

Form1_FormClosing(sender,new FormClosingEventArgs())

やりたいのはこれかな?
178170:2008/09/01(月) 18:00:03
>>171
やっぱりそれが一番勝手が良いですね。

>>172
ようするに、キャストできない型なのでそのままだと呼び出せないということでしょうか。

>>173
なんか一番わかりやすいのでthis.close();を使ってます。

>>177
例えば
Form1_FormClosing(sender, new FormClosingEventArgs(CloseReason.None, true));
見たいにコンストラクタを初期化してやるとエラーにならないんですが
引数なしだとエラーになります。
型が違うイベントを呼び出すときは、毎回コンストラクタを初期化しないと
呼び出せないということでしょうか。
クラスとキャストの概念がわかってるかどうかは自信がありませんがキャストは出来ませんよね?
179デフォルトの名無しさん:2008/09/01(月) 19:28:40
>>178
>>177の言ってることもトンチキだから気にしない。
君が分かってないのは>>177の言ってるようなことじゃない。

君が分かってないのはイベントとイベントハンドラだよ。

イベントハンドラ(例えばForm1_FormClosing())というのは、
イベント(例えばフォームが閉じられた)時に「呼ばれる」ものであって、
それを呼び出すと何かが起こる(例えばフォームが閉じる)わけではないよ。

VBの人にありがちな倒錯だね。
原因と結果が逆立ちしてる。
180170:2008/09/01(月) 19:46:54
>>179
あー、そうか
一般論としてはイベントとイベントハンドラについて理解してるつもりだったけど
今回の件に関しては全く理解できてなかったということですね (^^;
ものすごく本末転倒なことを聞いてましたね、精進します
みなさん、有難うございました
181デフォルトの名無しさん:2008/09/01(月) 19:47:29
VS2008sp1のインテリセンス日本語化はいつなんでしょうか?
182デフォルトの名無しさん:2008/09/01(月) 19:54:20
>>178
とりあえず新規のWinFormプロジェクトを作る。
フォームデザイナでフォームを選択し、イベントハンドラの
FormClosingをダブルクリックする。
Form1_FormClosingにMessageBox.Show("FormClosing");
を書く。
実行する。

メニューを追加し、終了メニューにthis.close();と書く。
実行する。

これでイベントの流れの概略がわかるか?
FormClosingをダブルクリックする前後にForm1.Designer.csも
見てみるといい。
183デフォルトの名無しさん:2008/09/01(月) 21:01:50
usingについての質問です

ネットワークプログラミングをしているのですが、通信が終わったときにNetworkStreamを閉じようと思い、以下のようなコードを書きました。

using( NetworkStream Stream = new NetworkStream(socket, true) )
{

事前の処理

Thread newthread = new Thread(Func);
newthread.Start(new object[] { Stream, newthread });
}

このような場合、NetworkStreamはどのように扱われるのでしょうか?
# threadの処理が終わるまで保持される?
# newthread.Startが呼ばれたあとにDispose()されてStreamはnullになる?
184デフォルトの名無しさん:2008/09/01(月) 21:16:20
スレッドを作り終わった瞬間に削除される。
185デフォルトの名無しさん:2008/09/01(月) 21:16:42
>>183
どう考えてもすぐに破棄されるに決まってる。
186デフォルトの名無しさん:2008/09/01(月) 21:17:47
まあnullになるは意味不明だけどな。
187デフォルトの名無しさん:2008/09/01(月) 21:28:43
匿名デリゲートを使うと、nullにならない事が確認できるよ
188デフォルトの名無しさん:2008/09/02(火) 10:48:39
>>187
usingに使う変数の宣言は()内じゃなくてもいいんだよ
ローカル変数でもフィールドでもおk
189183:2008/09/02(火) 15:24:14
皆様ありがとうございました。
# nullにならない、usingの使い方に関しては大変勉強になりました。

もう一つ質問させてください。

上のようなコードで、例えばFunc内で、

void Func(object obj)
{
NetworkStream newStream = (NetworkStream)((object[])obj)[0];

byte[] abBuffer = new byte[256];
newStream.Read(abBuffer,0,256);

}

などの操作を行った場合、NetworkStreamは既に破棄されており、利用できないのでしょうか。
190デフォルトの名無しさん:2008/09/02(火) 15:31:18
そんなわけない
191デフォルトの名無しさん:2008/09/02(火) 15:34:06
まあほとんどの場合Disposedだろうな
192デフォルトの名無しさん:2008/09/02(火) 15:35:58
objが
193デフォルトの名無しさん:2008/09/02(火) 16:45:03
>>190
お前はプログラミングするんじゃねーぞ
194デフォルトの名無しさん:2008/09/02(火) 16:51:02
ローカル変数が何時までも残ってたらローカルじゃないでしょ
195デフォルトの名無しさん:2008/09/02(火) 16:53:58
>>194
何の話?
196189:2008/09/02(火) 18:44:51
ありがとうございました。

thread内でNetworkStreamを閉じるなど、コードを書き換えて検討し直してみます。
197デフォルトの名無しさん:2008/09/02(火) 19:07:50
適当なディレクトリ内のファイルを列挙して、キューにどんどん突っ込んでいきたいのですが、
Directory.GetFilesなどではそのディレクトリのファイルを全て列挙するまで結果を得ることが出来ません、、、
ファイルを1つずつキューに入れていくためには、WinAPIを呼ぶしかないのでしょうか。
198デフォルトの名無しさん:2008/09/02(火) 19:13:27
どんなストレージ使ったら問題になるのか分からないがまあその通り
フロッピーとかか
199デフォルトの名無しさん:2008/09/02(火) 19:14:25
>>196
いや、ちゃんと調べたほうがいい、間違いが混ざってる。
200デフォルトの名無しさん:2008/09/02(火) 19:51:37
質問です
1.findControlを使用して、コンテンツページからマスタページのDataListを取得
2.staticなメソッドに取得したDataListを渡して、DataListへの設定を行う。
3.画面表示

こうすると、DataListへの設定が反映されません。
staticなメソッドで行わずにコンテンツページ内でDataListへの設定を行った場合は
問題なく動くのですがなぜでしょうか。
201デフォルトの名無しさん:2008/09/02(火) 20:28:54
若干怪しい部分はあるが、具体的なコードがないとわからない。
特にstaticメソッド辺り。
202デフォルトの名無しさん:2008/09/03(水) 12:02:08
List<string,string> ls = new List<string,string>();
というような二次元の動的な配列を作りたいのですが
どうすればいいのでしょうか。
203デフォルトの名無しさん:2008/09/03(水) 12:12:52
List<List<string>>
要素にアクセスするときはls[r][c]
204デフォルトの名無しさん:2008/09/03(水) 12:17:42
有り難うございます。試してみます。
205デフォルトの名無しさん:2008/09/03(水) 19:50:51
すみません、質問いいですか?

複数端末から同一ファイルをFilesystemWatcherで監視します。
んでファイルが来たらファイルを読みたいんですが
この場合、排他制御はどうしたらベストでしょうか?

お願いします。
206デフォルトの名無しさん:2008/09/03(水) 21:31:03
何いってんのかわからん
207デフォルトの名無しさん:2008/09/03(水) 21:34:08
おまえうざいんですけど
208デフォルトの名無しさん:2008/09/03(水) 22:10:33
正直俺にも何言ってんのかわからんよ。
ぼんやりとは伝えたい方向が推測できないわけではないが。

プログラミング勉強する前に日本語できちんと自分の意図を
伝える練習した方がいいんじゃないのか?
209デフォルトの名無しさん:2008/09/03(水) 22:14:03
おいおい>>205の文章は普通に言ってることはわかるだろw
サーバサイドの話でしょ。
俺はそっち方面知らんから答えられんけど。
210デフォルトの名無しさん:2008/09/03(水) 22:14:49
>>205
やりたいことの説明が足りないのは確かだな。
1) 書き込まれたファイルを複数の監視しているPCのうちどれか1台が処理する。
2) 全部で処理する。
3) 全部で処理するが並列では処理させない。
並列処理といってるから1か3の可能性が高いが、
ファイルを書き出すのが完了した状態を判断したいということかもしれない。
211デフォルトの名無しさん:2008/09/03(水) 22:32:29
>>209

なんだよ 「サーバサイドの話」ってww
FileSystemWathcerクラスは確かにUNCパスも使えるけど、基本的に
IOの話であって、「ローカルサイド(嗤)」の話だがな。

第一、FileSystemWatherが監視するのはディレクトリであって、ファイルじゃ
ないし。

そもそも「複数端末から同一ファイルを」監視しているはずなのに、「ファイルがきたら」
「ファイルを読みたい」って全く意味不明。ファイルは存在しているの?存在している
なら「ファイルがくる」ってどういう意味? 存在していないなら「同一ファイルを監視する」
っていったいどういうこと?

あ、なんかだんだんわかってきたぞ!!
たとえば \\server\dir を複数マシンから監視して、hoge.txt ファイルが新しく
作られたら、それを読み込みたいんだけれど、複数マシンからアクセスするので
排他制御をなんとかしたいということなんだろうか????

Created イベントで新しいファイルの名前がhoge.txtだったら、単純にreadモードで
FileStreamに読み込めばいいだけだと思うんだが…。
212デフォルトの名無しさん:2008/09/03(水) 22:35:48
かなり意地悪だけど、

複数の端末が接続されている計算機において、
それぞれの端末から起動したプロセスで
あるファイルを監視(FileSystemWatcherを利用)。
ファイルが作成されたら、何らかの排他制御をしつつ
そのファイルの読み取りを行う。

というマルチユーザ環境での話と解釈できなくもない
213デフォルトの名無しさん:2008/09/03(水) 22:51:52
>>209
お前の言ってることが一番分からんわ!
214デフォルトの名無しさん:2008/09/03(水) 22:53:33
多分最初に処理を開始した一台だけが処理する制御ってことなんだろうな、多分だがな。
215デフォルトの名無しさん:2008/09/03(水) 22:57:45
IPを変えるのってどうやればいいか教えてください!!
216デフォルトの名無しさん:2008/09/03(水) 22:58:20
回線切って考えてみればいいと思うよ
217デフォルトの名無しさん:2008/09/03(水) 23:42:00
だいたい皆さんのおっしゃる通りです。

言葉足らずすみませんでした。

\\server\のテキストファイルを複数の端末から監視し
(生成タイミングはサーバー次第)
生成されたら読み込んでフォームに表示したいのですが
複数の端末が同時にファイルアクセスするので例外が出てしまいます
(すべての端末で読み込みはしたい)

こんな感じですが・・・
218デフォルトの名無しさん:2008/09/03(水) 23:47:11
普通に読み取り共有で開けないんだっけ?
219デフォルトの名無しさん:2008/09/03(水) 23:51:41
同時にファイルアクセスって聞いただけで冷や汗が出てくる
220デフォルトの名無しさん:2008/09/03(水) 23:52:51
ファイルアクセスされているかどうか調べられるんですか?
221デフォルトの名無しさん:2008/09/04(木) 00:02:27
リードオンリーなら、同時にアクセスしても、普通に読めそうな気がするけど。
222デフォルトの名無しさん:2008/09/04(木) 00:10:28
ファイル管理するクラスなりなんなりを置いて、それに読んでもらう方がよくね
リモートで呼び出しして
223デフォルトの名無しさん:2008/09/04(木) 00:27:58
>>211

おまえ、きも、しね
224デフォルトの名無しさん:2008/09/04(木) 00:32:59
共有モードを指定する。
これでファイルをメモ帳で開いてる場合でもエラーにならない。
new FileStream("file", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)

write側とread側の間の排他はいろいろ方法はあるが、
別名で書き出して書き出しが終わったらrenameというのが一番無難。
rename後の名前で監視しておけば書き出し途中は見えない。
225デフォルトの名無しさん:2008/09/04(木) 00:38:33
そのためにわざわざサービスあげるのかい
226デフォルトの名無しさん:2008/09/04(木) 06:16:43
RichTextBoxの改行の幅って調節できますか?
改行すると、一文字分くらい空いてしまうんですが。
227デフォルトの名無しさん:2008/09/04(木) 07:49:01
自演で回答に導くとはなかなかやるな
228デフォルトの名無しさん:2008/09/04(木) 18:59:32
エンターブレイン、ツクール最新作「アクションゲームツクール」を発表、XBOX360/XNAにも対応
http://news4xbox.blogspot.com/2008/09/xbox360xna.html
229200:2008/09/04(木) 19:26:48
>>201
レスありがとうございます
自己解決しました

別ページに遷移した場合、前ページのcsでセットしたものは
リセットされるという事を知らなかったのが理由でした
マスタページの初期処理で必ず処理を行うようにする事で解決しました

・・・が、遷移する度に毎回処理ってなんか無駄だよなぁ・・・
上のやり方以外で前ページでセットした内容を次ページに持ち越す事って出来ないのでしょうか
230デフォルトの名無しさん:2008/09/04(木) 19:39:17
何をしようとしてるのかよく分からない…
単にページ間でのデータ引き渡し?
231デフォルトの名無しさん:2008/09/04(木) 19:42:18
これって
http://codezine.jp/article/detail/2930

良さそうだけど使った人いる?

http://grid.g1sys.com/

動画を見る限り簡単そう。

でも、掲示板に何も情報ないし。
http://grid.g1sys.com/bbs/patio.cgi
232デフォルトの名無しさん:2008/09/04(木) 22:13:34
宣伝乙以外に感想がありません
233デフォルトの名無しさん:2008/09/04(木) 22:17:11
なんかCodeZineってすっかり企業の宣伝記事ばっかりになっちゃったね。
翔泳社らしいというか、往時のVBマガジンを彷彿とさせるものがある。
234デフォルトの名無しさん:2008/09/04(木) 22:26:15
private void button_Click( object sender, EventArgs e)
{ private Thread demoThread = null;

this.demoThread =
new Thread(new ThreadStart(this.ThreadProcSafe));

this.demoThread.Start();
}

private void ThreadProcSafe()
{
this.TextBox.Text = null;
}

”有効ではないスレッド間の操作 コントロールが作成されたスレッド以外のスレッドからコントロール アクセスされました”
これが出たからmsdnで簡単そうだった対策をやったんだけど
また出る
なんで?あんまり意味はわかってない
235デフォルトの名無しさん:2008/09/04(木) 22:30:19
GUIスレッド以外のスレッドからコントロールにちょっかい出しちゃいけません
236デフォルトの名無しさん:2008/09/04(木) 22:44:57
じゃあプログラム中にテキストボックスの中身変えたいときはどうすりゃいいのよ?
237デフォルトの名無しさん:2008/09/04(木) 22:47:10
GUIスレッドからやるかInvokeすればいいじゃない
238デフォルトの名無しさん:2008/09/04(木) 22:47:16
invokeしろぼけ
239デフォルトの名無しさん:2008/09/04(木) 22:50:10
>これが出たからmsdnで簡単そうだった対策をやったんだけど
>また出る
>なんで?あんまり意味はわかってない

ちゃんとできてないんだろうとしか言いようがない。
どうやったのか書いてみそ。
240デフォルトの名無しさん:2008/09/04(木) 22:56:06
ちょwwinvoke見たけどよくわかんね
GUIスレッドって何かわからない、スレッドに分けてないと思うんだけどフォーム.csに全部書いてるし
どうやったかって書いてるとおりだと思うんだけど・・・
241デフォルトの名無しさん:2008/09/04(木) 23:05:21
Thread つくって Start してるのに分けてないとはお前はなにを
言っているんだ
242デフォルトの名無しさん:2008/09/04(木) 23:08:05
スレッドの勉強あんまりしてないよ・・・
なんでテキストボックス2にnullを代入できないんだよ・・・
多分2回目のループの時だと思うんだけど・・・
243デフォルトの名無しさん:2008/09/04(木) 23:09:56
>>240
ここにわかりやすく書いてある。
「Windowsフォームで別スレッドからコントロールを操作するには?」
http://www.atmarkit.co.jp/fdotnet/dotnettips/312ctrlinvoke/ctrlinvoke.html
244デフォルトの名無しさん:2008/09/04(木) 23:12:01
>>243
ありがとう。でも今見てた。
メソッドの呼び出しみたいな例なんだけど
俺は単純にヌルを代入したいだけなんだけど
それにフォーカスが関係あるの?
245デフォルトの名無しさん:2008/09/04(木) 23:18:45
>>244
フォーカスじゃない、スコープ。
246デフォルトの名無しさん:2008/09/04(木) 23:19:04
いちいちうるせえなあ。
ここで得られた回答が理解できないのは
偏に己の不勉強が原因なんだから精進しろよ
247デフォルトの名無しさん:2008/09/04(木) 23:19:57
243のコードは別のスレッドからGUIのフォーカスを変更したい場合の例で、フォーカスは関係ない。
248デフォルトの名無しさん:2008/09/04(木) 23:33:25
今ちょっとやってみたんだけど次はラベルで出た
テキストとかラベルとか一個一個全部メソッド作ってデリゲートで呼び出さないといけないの?
249デフォルトの名無しさん:2008/09/04(木) 23:38:42
つラムダ式
250デフォルトの名無しさん:2008/09/04(木) 23:40:03
>>249
ありがとう。もう明日にするわ
251デフォルトの名無しさん:2008/09/04(木) 23:40:59
ラムダ式とかwww
より混乱を招くだろ
>>250
おやすみ
252250:2008/09/04(木) 23:42:04
>>251
ちょww何??
簡単な方法あるんだったら教えてよ
253デフォルトの名無しさん:2008/09/04(木) 23:42:58
多分スレッドを作らなければいいだけだと思うけど
254デフォルトの名無しさん:2008/09/04(木) 23:46:32
マルチスレッド禁止
255デフォルトの名無しさん:2008/09/04(木) 23:54:44
 スレッドとか消して
ボタン1の最初でテキストボックスにヌルを代入
のがループ2週目でまた”コントロールが作成されたスレッド以外のスレッドからコントロール 'textBox2' がアクセスされました”
なんで2週目なの?どうすりゃいいの?
256デフォルトの名無しさん:2008/09/04(木) 23:55:50
うるちゃい
257デフォルトの名無しさん:2008/09/04(木) 23:59:29
1周目と2周目で何が違うのか全くわからん
デバック無しだとどうもならないのにデバック有りだと止まるし
258デフォルトの名無しさん:2008/09/05(金) 00:00:19
スレッドは理解するんじゃない、感じるんだ
259デフォルトの名無しさん:2008/09/05(金) 00:03:03
ちゃんと再コンパイルしてるか?
260デフォルトの名無しさん:2008/09/05(金) 00:10:02
だめだやっぱりできない
再コンパイル?ビルドはしてる
なんで順番どうりに代入してるはずなのに・・・2週目から・・・・
261デフォルトの名無しさん:2008/09/05(金) 00:10:52
Control.CheckForIllegalCrossThreadCalls = false;
262デフォルトの名無しさん:2008/09/05(金) 00:27:13
ソースさらせよ
263デフォルトの名無しさん:2008/09/05(金) 00:36:40
プログラミングが下手な人って大抵説明や質問も下手だよね
264デフォルトの名無しさん:2008/09/05(金) 00:54:28
君には向いてないとしか言い様がない
265デフォルトの名無しさん:2008/09/05(金) 00:55:31
思考の整理ができないんだろ。
自分の頭の中がぐちゃぐちゃなのに、
コンピューターの中なんて理解できるはずがない。
266デフォルトの名無しさん:2008/09/05(金) 01:04:31
初心者を煽る奴は死ぬべき
267デフォルトの名無しさん:2008/09/05(金) 01:05:54
と初心者が申しております。
268デフォルトの名無しさん:2008/09/05(金) 02:33:05
カッコつけてC#からやるからじゃね?やっぱ、基本はVBっしょ。
269デフォルトの名無しさん:2008/09/05(金) 02:37:02
書き方違うだけで基本はほとんど同じだから。
270デフォルトの名無しさん:2008/09/05(金) 02:38:14
いや、ポインタとか安易に使うと危ないよ
271デフォルトの名無しさん:2008/09/05(金) 02:47:28
VBの話をする奴はスレを荒らしたいだけ
272デフォルトの名無しさん:2008/09/05(金) 03:14:25
なんでそんなこまごまと別スレッドからコントロールにアクセスする必要があるんだ。
いろいろやるならひとまとめでメソッドにして、メソッド自体をInvokeで呼ぶとかできるだろ。

ま、いまだに何がしたいのか良く分からないんだけどな。
273デフォルトの名無しさん:2008/09/05(金) 03:46:56
ちょっとこれを見てくれ
ニコニコ動画のアカウントが必要かもしれんが

http://com.nicovideo.jp/search/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0?mode=t
274デフォルトの名無しさん:2008/09/05(金) 05:14:38
ん、C#コミュ作れと?
それとも、なぜかJavaがDとC#を敵視してる所について突っ込むべきか?

って、C,C++もないのか。
275デフォルトの名無しさん:2008/09/05(金) 05:26:06
見て欲しかったらアカも置いてけ
276デフォルトの名無しさん:2008/09/05(金) 06:32:16
Perl,Python,Java,Ruby,D言語があってC#がなかったら
なんか負けた気になるじゃないか
277デフォルトの名無しさん:2008/09/05(金) 10:56:16
教えてください。
カスタムボタンクラスで派生したカスタムボタンコントロールで
CustButton.PerformClick();
を実行してもクリックイベントが発生しません。
どうしたらイベントが発生する様になるのでしょうか?m(_ _)m
278デフォルトの名無しさん:2008/09/05(金) 10:58:09
OnClickオーバーライドしてるとか
279デフォルトの名無しさん:2008/09/05(金) 11:02:25
OnClickはオーバライドしてません。
ボタンをマウスで直接クリックしている場合は問題ありません。
PerformClick();を実行してもイベントが発生しないのです。
280デフォルトの名無しさん:2008/09/05(金) 11:04:54
変数名でも間違えてるんじゃねーの?

CustButton1.PerformClick()とか
281デフォルトの名無しさん:2008/09/05(金) 11:09:58
直接Buttonから派生してるんだったら変なことしてない限りは
なにも変わらないはずだけど
282デフォルトの名無しさん:2008/09/05(金) 11:13:09
Enabledがfalseだとか
283デフォルトの名無しさん:2008/09/05(金) 11:13:58
原因みつけました。(はじめから見つけられないお馬鹿な私TT)

public CustomButton()
{
// この呼び出しは、Windows.Forms フォーム デザイナで必要です。
InitializeComponent();

// TODO: InitComponent 呼び出しの後に初期化処理を追加してください。
//this.SetStyle(ControlStyles.Selectable, false);
}
こうしました。クラスを作った際、自動生成された様です。
this.SetStyle(ControlStyles.Selectable, true);
ご迷惑おかけしました。ありがとうございました。
284デフォルトの名無しさん:2008/09/05(金) 12:00:37
namespace Wbhbh
{
public partial class Form1 : Form
{
private static System.Timers.Timer timer;

public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
textBox1.Text = null;

timer = new System.Timers.Timer(30000);
timer.Enabled = false;
Random rnd = new Random();
string a = rnd.Next(1, 5).ToString();
textBox1.Text = a;

昨日のなんだけど、これで2週目にtextBox1.Text = null;ここで
有効ではないスレッド間の操作: コントロールが作成されたスレッド以外のスレッドからコントロール 'textBox1' がアクセスされました。
ってなるんだけどどうして?どうしたら解決しますか?
285デフォルトの名無しさん:2008/09/05(金) 12:04:09
System.Windows.Forms.Timerを使うか、
Control.invoke
286デフォルトの名無しさん:2008/09/05(金) 12:08:33
ありがとう
invokeの使い方が昨日からよくわからないんだよな
button1_Click()にinvoke使えばいいの?
287デフォルトの名無しさん:2008/09/05(金) 12:09:03
ぐぐれよ
288デフォルトの名無しさん:2008/09/05(金) 13:35:32
つかタイマーでは何やってんの?
いまいち有り得ない使い方をしてそうだが…
289デフォルトの名無しさん:2008/09/05(金) 13:59:40
private void button1_Click(object sender, EventArgs e)
{
textBox1.Text = null;

timer = new System.Timers.Timer(30000);
timer.Enabled = false;
Random rnd = new Random();
string a = rnd.Next(1, 5).ToString();
textBox1.Text = a;
timer.Elapsed += new ElapsedEventHandler(button1_Click);
timer.Interval = rnd.Next(1, 5) * 30000;
timer.Enabled = true; // timer

上の最後の産業を飛ばしてた
invokeとか全然わからんし・・・
なんでループでテキストを書き直すのができないんだ・・・
290デフォルトの名無しさん:2008/09/05(金) 14:08:32
> timer.Elapsed += new ElapsedEventHandler(button1_Click);

一番重要なところで途切れてたのか……
291デフォルトの名無しさん:2008/09/05(金) 14:09:08
はじめまして。
OpenCVを使って書いた関数をC#で使いたいのですが、
どのようにしたらよいのでしょうか?

開発環境は
Visual Stadio 2005
Visual C# 2005
Open CV
です。
またオススメの書籍などありましたら是非教えていただきたいです。
292デフォルトの名無しさん:2008/09/05(金) 14:10:27
素直にWindows.Forms.Timer使えよ
293デフォルトの名無しさん:2008/09/05(金) 14:11:58
>>289
ループじゃなくてタイマだろ?
取りあえずSystem.Timers.Timerの解説読めばスレッド使ってんのはすぐわかる。
で例外メッセージの一部「コントロールが作成されたスレッド以外のスレッド」辺りでググれば
Invokeの使い方とか見つかるだろ。

まあ素直にSystem.Windows.Forms.Timer使えよ。
294デフォルトの名無しさん:2008/09/05(金) 14:24:04
ありがとう。
そうだ、Tickの使い方がわからなくてこっちでやったんだ
Forms.timerとの違いとかわからないんで調べてやってみる
295デフォルトの名無しさん:2008/09/05(金) 14:29:25
その前にタイマの使い方が異常
296デフォルトの名無しさん:2008/09/05(金) 14:32:45
その場しのぎの独学だから全然わからないんだ
みんなは何でこれがタイマの普通の使い方だとかわかるわけ?長い経験?
297デフォルトの名無しさん:2008/09/05(金) 14:33:11
静的メンバにタイマセットしてイベントの度に作り直してセットし直しって、裏ですごい動きになってるぞ
298デフォルトの名無しさん:2008/09/05(金) 14:37:32
でもほとんどコピーの羅列だよ?
299デフォルトの名無しさん:2008/09/05(金) 14:38:12
別に経験長くなくても分かる
と思うけど頭の悪さは人それぞれだからなケケケ

まあTimerの機能、動きを普通に理解してりゃ明らか
300デフォルトの名無しさん:2008/09/05(金) 14:39:57
コピーってなあに…?
301デフォルトの名無しさん:2008/09/05(金) 14:40:12
C初めてから4ヶ月だぜ
まさか遅いのか?
302デフォルトの名無しさん:2008/09/05(金) 14:40:52
↑おまえの頭の悪さは異常w
303デフォルトの名無しさん:2008/09/05(金) 14:41:28
コピーはmsdnの部分的なコピー

今form.timerでやったらエラー無くなったみたい。ありがとう
304デフォルトの名無しさん:2008/09/05(金) 14:51:59
>>296
普通の使い方云々はわからんが、
同じことをやるTimerインスタンスを何度も作り直してるのが不自然なのはわかる。

あと、“button1_Click”の中で自身をイベントハンドラに設定してるコードとかどうなんだろうな
305デフォルトの名無しさん:2008/09/05(金) 15:34:43
>>291
>OpenCVを使って書いた関数
というのが何をさすのか分からんが、C/C++でOpenCVの関数を呼び出しているコードを流用したいのならば
dll形式でコンパイルしてDLLImport。

C#でOpenCVの関数を扱いたいだけならManagedOpenCVかShaperCVでググれ
306デフォルトの名無しさん:2008/09/05(金) 15:45:01
部分コピーが危険なことくらい理解できるだろう?
いいから直したソース晒してみな。
高い確率でまだ異常だと思うから。

きっとみんなでよってたかって突っ込んで崖っぷちまで追い詰めてくれるぜ。
307デフォルトの名無しさん:2008/09/05(金) 16:35:54
もしも自動車の部品を適当にぶった切って適当につなげてまともに走るのなら、そのプログラムは動くだろう
308デフォルトの名無しさん:2008/09/05(金) 16:59:24
private System.Timers.Timer timer;
private Random rnd;

private void Form1_Load(object sender, EventArgs e)
{
timer = new System.Timers.Timer(30000);
timer.Elapsed += OnTimedEvent;
rnd = new Random();
}

private void button1_Click(object sender, EventArgs e)
{
timer.Enabled = !timer.Enabled;
}

private void OnTimedEvent(object source, System.Timers.ElapsedEventArgs e)
{
Invoke((Action)delegate
{
int num = rnd.Next(1, 5);
textBox1.Text = num.ToString();
timer.Interval = num * 30000;
});
}
こんな感じなことがやりたいんだと俺は予想するぜ
309デフォルトの名無しさん:2008/09/05(金) 17:03:07
>>224
このファイルの共有アクセスの制御に関して質問です。

FileStreamによる制御では読み込みや書き込みなどの自分のファイルアクセス中の
アクセス制御を行うということだと思いますが、これを「こちらがファイルを開いて読み込み、
データを変更して次に書き込むまでの間」、ずっと誰にも書き込みさせないようにしたい
場合は、

そのFileStreamでOpenした状態をそのまま維持(=開きっぱなしに)しておくということで
実現することになるかと思いますが、その場合は何か弊害が起こりうるものでしょうか?

その場合は弊害がない(開きっぱなしにしないような)方法があるでしょうか?ありましたら
その方法を教えてください。

なお編集中という情報をどこかの専用ファイルに書いておいてそれを読んで先客がいたら
書き込まない、というような方法ですと、他のソフトで編集された場合は制御できないため
そうした方法ではなく、目的のファイルに対して直接アクセス制御する方法であることが
望ましいのでした。よろしくお願いします。
310デフォルトの名無しさん:2008/09/05(金) 17:09:17
>>309
Lock
Unlock
311デフォルトの名無しさん:2008/09/05(金) 17:19:57
public partial class Form1 : Form
{
static System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer();

public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
textBox1.Text = null;
Random rnd = new Random();
myTimer.Tick += new EventHandler(button1_Click);

string a = rnd.Next(1, 5).ToString();
textBox1.Text = a;

myTimer.Interval = rnd.Next(1, 5) * 30000;
myTimer.Start(); Application.DoEvents();

これ直したコードです
もうエラーでてないけどおかしいところツッコミまくってください
312デフォルトの名無しさん:2008/09/05(金) 17:25:53
>>310
どうもです!

FileStream.Lock メソッド
FileOpen 関数(VB用)

などあるようですが、いずれも読み取り中など、Openしている間の
アクセス制御のように思われるのですが、FileStream.Close() を
実行した後でもLockが効いている状態が実現できるでしょうか?
313デフォルトの名無しさん:2008/09/05(金) 17:36:53
>>311
おかしすぎてワロタ
後で時間があったらつっこんでやるw
314デフォルトの名無しさん:2008/09/05(金) 18:38:36
>>273-276
作れと?
なら、作るとも。
http://com.nicovideo.jp/community/co4785
315デフォルトの名無しさん:2008/09/05(金) 20:34:43
よくわからんがどうすりゃいいんだよ岩永さん
316デフォルトの名無しさん:2008/09/05(金) 21:55:32
作っただけだから放置でもいいと思う。
317デフォルトの名無しさん:2008/09/05(金) 22:12:09
>>311
とりあえず、ランダム使っちゃうと何が起こってるか把握できなくなるから、いったん除去って、

{
 //textBox1.Text = null;
 //Random rnd = new Random();
 myTimer.Tick += new EventHandler(button1_Click);

 // 変化がわかるように変更
 textBox1.Text += "a";

 myTimer.Interval = 10000;
 myTimer.Start(); // Application.DoEvents();
}

くらいに変更してみると、おかしいところの一部が分かると思うんだ……
もし、この動作を狙ってたとしたら余計なお節介失礼。
318デフォルトの名無しさん:2008/09/05(金) 22:46:20
Timer作り捨てするとメモリリークするんじゃなかったっけ
319デフォルトの名無しさん:2008/09/05(金) 23:47:28
>>308がちょっとかわいそう
320311:2008/09/06(土) 07:07:18
>>317
俺は+=使ってないけど・・・内部ではそうなってるってこと?


要するにメモリ的に問題があると?
321デフォルトの名無しさん:2008/09/06(土) 07:15:28
+=は脆弱性があるから使わないべき
322311:2008/09/06(土) 07:31:30
じゃあタイマのメモリが問題なの?
323デフォルトの名無しさん:2008/09/06(土) 08:20:49
>>321
まじ?
324デフォルトの名無しさん:2008/09/06(土) 09:02:01
>>320
> textBox1.Text += "a";
のことを言ってる? これは何が起こるかわかりやすくするためかと……

イベントハンドラにイベント足し続けてるから、
発生してるイベントが指数関数的に増えてるよ、ってことを言いたいのだと思うのだけど、
実行してみた?


……>>319 も言うように、>>308 が綺麗なコードを書いてるので読んだらいいと思うよ、うん
325デフォルトの名無しさん:2008/09/06(土) 09:27:50
>>323
釣られるな
326311:2008/09/06(土) 09:48:08
317やってみたら時間が経ったらバグった
おんなじことがイベントハンドラで起こるってこと?
イベントハンドラの意味とかよくわかってないけど
327デフォルトの名無しさん:2008/09/06(土) 09:56:39
>>326
>>311 でも同じような倍倍ゲームになってるというのは分かる?
328デフォルトの名無しさん:2008/09/06(土) 10:18:01
>>327
ボタン1実行中にボタン1が実行で・・・って事ですか?
329デフォルトの名無しさん:2008/09/06(土) 10:21:31
タイマー時刻が来るたびに += してたらそりゃなぁ。
330デフォルトの名無しさん:2008/09/06(土) 10:25:45
てことは+=じゃなくて=ならいいの・・・かな?
331デフォルトの名無しさん:2008/09/06(土) 10:30:51
>>330
eventだから = はできない。delegateむき出しならできるのだけど。
332デフォルトの名無しさん:2008/09/06(土) 10:37:15
難しいな〜
結局>>308のやり方が正解なの?
333デフォルトの名無しさん:2008/09/06(土) 10:52:20
・初期化の時
・ボタンを押した時
・タイマーで指定した時間が来た時
にそれぞれやることが混ざってるので、まずはそれを分けるべし。自分なりでいいから。
334デフォルトの名無しさん:2008/09/06(土) 11:01:25
つまり、タイマーで時間が来た時
×ボタンをくりかえす
○ボタンそのものでなく、ボタンの中のやりたいことをくりかえす
ってことか
335デフォルトの名無しさん:2008/09/06(土) 11:03:11
いや冷静にやりたいこと整理しなって。
毎回イベントハンドラに追加する必要がどこにある?
じゃ追加はだめなら=ならいい?って発想がもうおかしい。
=でいったい何するつもりだ?
336デフォルトの名無しさん:2008/09/06(土) 11:04:12
JavaScript しか使ったことないのかな?

JSと違って、タイマーStart後は一定周期で毎回デリゲートが呼ばれる
タイマーを設定するのは最初の1回(Loaded中)のみでOK
ボタンの押下時にタイマー始めたいなら、+= を Loaded に、Start() を ButtonClick に
あるいは、if(timer.Tick == null) timer.Tick += xxx
337デフォルトの名無しさん:2008/09/06(土) 11:07:58
そもそもタイマーはデザイン画面で貼りつければすむ話。
そしたらどっちのタイマーでも問題ない。
まWindowsタイマーでいいけどな。

イベントハンドラもデザイン画面で作ったらそれでしまい。
338デフォルトの名無しさん:2008/09/06(土) 11:10:12
>>336それもちょっとおかしいぜ?
339デフォルトの名無しさん:2008/09/06(土) 11:35:08
もうVBAでいいよ。やるきあるならVBだな。
340デフォルトの名無しさん:2008/09/06(土) 11:48:12
何が違うんだよw
VBでも同じ結果になるのは目に見えてる。
341デフォルトの名無しさん:2008/09/06(土) 11:49:13
JScriptもあるよw
342デフォルトの名無しさん:2008/09/06(土) 11:51:24
VBならイベントを宣言的に作れる点?
343311:2008/09/06(土) 12:11:25
private void button1_Click(object sender, EventArgs e)
{
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
textBox1.Text = "a";
}
もしかしてツールからフォームだしてダブルクリックして
これでいいの?
344デフォルトの名無しさん:2008/09/06(土) 12:16:09
>>343
その状態で、Form1.Designer.csの
InitializeComponent()の中で何をやってくれているか観察してみ
345デフォルトの名無しさん:2008/09/06(土) 12:19:52
>>343
意味はないけどそれであってるw
System.Windows.Forms.TimerはInvokeいらないよ
346デフォルトの名無しさん:2008/09/06(土) 12:32:14
>>344
おおすげえwwこんなのがあったのかww

ちなみにこれの違いってなんなの?
this.button1 = new System.Windows.Forms.Button();
private System.Windows.Forms.Button button1;
347デフォルトの名無しさん:2008/09/06(土) 12:44:46
上は式で下はメンバの宣言だから全く別種の要素だけど
348デフォルトの名無しさん:2008/09/06(土) 14:01:14
>>343
そういうのがまあたいていの場合の普通のやり方。
ちょっといろいろデザイナ触ってみた方がいいんじゃないかな。
349デフォルトの名無しさん:2008/09/06(土) 14:38:49
File.Move()って一つ一つファイルを移動しても
まとめて移動するのに比べてオーバーヘッドありませんか?
350デフォルトの名無しさん:2008/09/06(土) 19:44:46
       r――――――‐ 、
       |なにして遊ぶ?|
       `ー――v――― ''
           ∧,,∧  ∧,,∧
      ∧,,∧ (´・ω・) (・ω・`). ∧,,∧    r――――――――‐ 、
     ( ´・ω).(O┬O) (O┬O) (ω・´ )  < 公園でかくれんぼ!|
     ( O┬O ∧,,∧. ∧,,∧)┬O )   `─――――――─‐ '
      ◎-J┴◎(  ´・) (・`  )┴し-◎
           ( .__ l) (l __ )
              `uロu'. `uロu'
       r―――.ヘ―────―‐ 、
       |じゃあ公園まで競争だ! |
       `ー―――――────‐ '

351デフォルトの名無しさん:2008/09/06(土) 21:43:31
Visual C# 2008 でアプリケーションを作ったんですが、
うちでは動くのに、友人のPCだと動きません。

.NET Frameworkのバージョンが、うちは3.5で、
友人のPCが2.0なのが原因じゃないかと思うんですが、
下位バージョンの.NET Fameworkでも動くアプリを作るには、
どうすればいいのでしょうか?
352デフォルトの名無しさん:2008/09/06(土) 21:45:26
プロジェクト→プロパティ
対象のフレームワーク
353デフォルトの名無しさん:2008/09/06(土) 21:56:34
それやっても向こうに2.0 SP1入れるかバージョンリダイレクトかけるかしないと動かなくないか?
354デフォルトの名無しさん:2008/09/06(土) 22:18:24
素直にsetup作ればいいのに。
なんだか昔のVBerみたいな偏屈に見えるよ。

ちなみに、SP1の機能使ってなければSPなしの2.0環境でも動くんじゃないの?
つーか2.0はWin2000や98用が今のところ用意されてないSP2とかもうグダグダだな。
355デフォルトの名無しさん:2008/09/06(土) 23:24:16
C#でのASP関連の質問はどこで聞けばいいの?WebProg板にASP.NETスレあるけど、やたら過疎ってるみたいなんだけど。
356デフォルトの名無しさん:2008/09/06(土) 23:45:26
C#でASP……できたっけ?

てのはともかくここでもそこでも好きにすりゃ良いんじゃね
357デフォルトの名無しさん:2008/09/06(土) 23:55:57
>>353
なんでやねん
まあSPでの変更点に引っかかる可能性はわずかにはあるが。
358396:2008/09/07(日) 08:59:27
エクスプローラの機能限定版(ドラッグ&ドロップが出来ないエクスプローラ)
的なファイル管理ツールを作ろうと思っています。
サンプルとなるものってどこかに無いでしょうか?
開発ツールはC#(VS2008)です。
359デフォルトの名無しさん:2008/09/07(日) 09:13:23
C#とは直接関係ないですが、ユーザーコントロールの件。

VisualStudio のソース用のテキストエディタには左側にブレークポイントを
置くエリアがありますが、あれはPanelコントロールのようなものなんでしょうか?
あのような機能のものを作ろうとした場合、ソーステキスト側のスクロール、
Fontのサイズ、行間距離、折り返しの有無とその変化などにすべて対応する
必要がありますが、簡単に実現する方法はないものでしょうか?
360デフォルトの名無しさん:2008/09/07(日) 09:37:16
やった事無いけど、テキストボックスにSendMessageで

EM_SETRECTで左に余白を作り
EM_GETFIRSTVISIBLELINEで先頭行の番号を取得し
EM_GETLINECOUNTで表示されてる行数を取得して・・とかやればいけるんじゃね?
361デフォルトの名無しさん:2008/09/07(日) 10:55:56
>>359
煽るわけじゃないが、そんな調子でそんな高機能なユーザーコントロールを
作ろうと思ってるわけ?

ちょっと考えれば分かると思うが、たまたま君が実装したいと思っているに過ぎない機能を
都合よく「簡単に」実現してくれる既存のコントロールなんてあるわけないじゃん。
362デフォルトの名無しさん:2008/09/07(日) 11:01:53
>>361
まだ夏休みですか
363デフォルトの名無しさん:2008/09/07(日) 12:45:30
>>362
消えろゴミ
364デフォルトの名無しさん:2008/09/07(日) 12:53:25
>>362
ところであなたは大学卒業しました?
365デフォルトの名無しさん:2008/09/07(日) 13:02:04
フフ、>>364は大卒じゃないのよ
366デフォルトの名無しさん:2008/09/07(日) 13:05:22
>>365=中卒ニート
367デフォルトの名無しさん:2008/09/07(日) 14:28:28
Fラン共うぜぇよ
368デフォルトの名無しさん:2008/09/07(日) 15:13:02
↑Gラン
369デフォルトの名無しさん:2008/09/07(日) 16:02:47
Bラン
370デフォルトの名無しさん:2008/09/07(日) 16:15:35
学歴話が好きな奴の人物類型というのは

(1) 学歴コンプレックスのある人間(秋葉原の事件の容疑者タイプ)
(2) 学歴以外に縋るものがないタイプ(かなり古いが宮沢喜一系)
(3) 学歴コンプの奴を煽って楽しむタイプ(マミーなんとか的な幼稚系)

こんなところか。
どっちにしろ他人よりもむしろ「救いがない本人自身を語ってるだけ」、という
簡単で明白な事実に気づくだけの知能が欠けているのは全てのタイプに共通しているようだな。
371デフォルトの名無しさん:2008/09/07(日) 17:01:36
>>359
>簡単に実現する方法はないものでしょうか?

ありません。

".NET エディタ コントロール"で検索してみると
みんな苦労してるのがわかると思う。
372デフォルトの名無しさん:2008/09/07(日) 17:23:37
>>370
そういうあなたは中卒ですか?
373デフォルトの名無しさん:2008/09/07(日) 18:52:58
ごめんなさい、脳卒中です
374351:2008/09/07(日) 23:10:19
>>352
>>353
>>354
遅くなりましたがありがとうございます。
プロパティから対象フレームワークの設定はできました。
友人のPCで試してみます。
375デフォルトの名無しさん:2008/09/08(月) 02:07:17
何この自演臭い酷い流れは
376デフォルトの名無しさん:2008/09/08(月) 02:09:34
黙れ自演厨
377デフォルトの名無しさん:2008/09/08(月) 06:29:54
早く前の流れに戻らないかしら。
378デフォルトの名無しさん:2008/09/08(月) 06:34:38
>>373
×ごめんなさい、脳卒中です
○ごめんなさい、中卒脳です
379デフォルトの名無しさん:2008/09/08(月) 14:31:04
>>371
>ありません

やはりそうでしたか。

>".NET エディタ コントロール"で検索してみると
>みんな苦労してるのがわかると思う。

わかりました。どうもありがとうございました。ではまた。
380デフォルトの名無しさん:2008/09/08(月) 15:38:29
C#2.0で質問です。

Winアプリを作成しようとしています。
WEBアプリであればSessionのコレクションに特定のKey名でシリアライズできるオブジェクトを入れて
各画面で遷移した後も使いまわせるようにできると思うのですが
Winアプリで同じようなことを実現するにはどのようにすればよいでしょうか?

エントリポイントの
static void Main()
{
}

この辺りでRunさせる前に作成して保持しておきたいのです。
何か良い方法があればご教授いただけませんか?
381デフォルトの名無しさん:2008/09/08(月) 16:16:44
静的なHashtableにでも入れときゃいいんじゃない?
俺はやらんけど。
382デフォルトの名無しさん:2008/09/08(月) 17:00:07
>>380
遷移実行は遷移を管理するObjectに依頼する。
画面は遷移引渡し用Method、遷移元取り込み用Methodを用意する。
383デフォルトの名無しさん:2008/09/08(月) 17:24:44
>>381-382
レスありがとうございます。

>>381
その方法だとすごく簡易にできそうです。

>>382
画面で順々に渡していくわけですね。
遷移絡みで一元管理ができそうです。

今回は一寸時間もあるので>>381+>>382の手法を組み合わせて
勉強しながら進めてみようと思います。

ありがとうございました。
384デフォルトの名無しさん:2008/09/08(月) 18:12:38
>>378
ちょwwくそワロタww
385デフォルトの名無しさん:2008/09/08(月) 18:32:55
何この糞ップリww
386デフォルトの名無しさん:2008/09/08(月) 23:08:02
一般に、大卒以上の学歴を有しながら、中卒以下の人間を指す
387デフォルトの名無しさん:2008/09/08(月) 23:23:51

にっぽんサイコー!:?BS11「にっぽんサイコー!」第1回2008/3/9(日)放送
http://www.team-nippon.com/team_nippon/cgi-bin/player.pl?channel=j_channel&order=25&mode=0&self=1

まあ一辺聴いてみてください。いかに日本が自民党に巻き上げられて官僚やゼネコンに配ってるかwわかります。
いかに口うまく騙されてるかwわかります。

日本Channel:築地があふれた!!壊すな築地7.12東京大行進
http://www.love-nippon.com/cgi-bin/player.pl?channel=j_channel&order=1&mode=0&self=0

ソトコト 憂国呆談
http://www.sotokoto.net/yukokuhodan/yukoku_2.html#upside2

断固田中康夫を首相にしましょう!!

388デフォルトの名無しさん:2008/09/08(月) 23:34:08
VC#2008Express SP1でプログラム書いてるんですが、PerformanceCounterが思ったとおりに動いてくれません。

CategoryName : Processor

CounterName : % Idle Time

CounterName : % Processor Time
などの値を取得すると「0」しか返ってこない。

MemoryのAvailable MBytesや% Committed Bytes In Useなどは正しい値が返される。
正しい値とは、perfmon.exeで表示している値との比較。
Processorの% Idle Timeなどの常に「0」と表示される値は
perfmon.exeでは全部0以外の値が表示されている。

という状況です。
ソースの該当部分は
PerformanceCounter pc1;
pc1 = new PerformanceCounter();
pc1.CategoryName = "Processor";
pc1.CounterName = "% Idle Time";
pc1.InstanceName = "_Total";
Console.WriteLine(pc1.NextValue());
です。

どこかの掲示板で同じ症状で悩んでる人がいたんですが、誰もレスつけてなくて解決できたのかもわからない状況…
なにか間違っているところありますか?
389デフォルトの名無しさん:2008/09/08(月) 23:55:35
while(true){
Console.WriteLine(pc1.NextValue());
System.Threading.Thread.Sleep(100);
}

ちょい試してみな
390388:2008/09/09(火) 00:01:03
>389
あぁぁぁぁorz
わかりますた…
% Idle Timeとかって初期値が必ず0なのね…
はずかしぃぃぃ
391デフォルトの名無しさん:2008/09/09(火) 00:51:30
System.Environment.CurrentDirectory;
のような感じでファイル名も取得したいのですがどうしたらいいでしょうか?

System.Environment.CurrentDirectory ディレクトリの情報しか取得してくれないんです
392デフォルトの名無しさん:2008/09/09(火) 00:52:50
>>391
何のファイル名を取得したいの?
393デフォルトの名無しさん:2008/09/09(火) 00:56:06
実行ファイルのパスなら、
Application.ExecutablePath
394デフォルトの名無しさん:2008/09/09(火) 00:56:24
>>392
説明不足ですいません
ttp://dobon.net/vb/dotnet/system/explorecontextmenu.html
ここを参考にして、右クリックメニューからプログラムを開くようにしたんですが、
その右クリックしたファイル名を取得したいんです。
どうしたらいいでしょうか。
395デフォルトの名無しさん:2008/09/09(火) 03:53:27
>>394
右クリックメニューからどのプログラムで開くように設定したの?
登録したプログラムが君の作ったプログラムだったらMain関数の引数がまさしくファイル名になるけど、
たとえばnotepad.exeで開くようにしたのだったら当然ファイル名を取得することはできないよ?
notepad.exeは君の作ったプログラムじゃないから当たり前なんだけどさ。

何がしたいのか全然想像できん。
相当初心者みたいだから、もっと具体的に説明してくれないと答えにくい質問だわ。
396デフォルトの名無しさん:2008/09/09(火) 05:21:33
>>394

ようわからんが

Main(string[] args)
{
string fileName = args[0];
}

でいいんじゃね?
ちなみに、リンク先の方法は「フォルダ」をプログラムに関連づける方法だから、
「ファイル」を関連づけたいなら
http://dobon.net/vb/dotnet/system/associatedapp.html
こっちの方だと思うんだけど。
397デフォルトの名無しさん:2008/09/09(火) 12:06:27
List<string> a = new List<string>();
a.add("aaa");
・・・

ときて、aの要素すべてを"\\"で連結してひとつの文字列にしたい
398デフォルトの名無しさん:2008/09/09(火) 12:12:30
String.Join
399デフォルトの名無しさん:2008/09/09(火) 12:19:25
サンクス

string.Join("\\", a.ToArray());
でできた
400デフォルトの名無しさん:2008/09/09(火) 13:42:05
>>395はリンク先読んでからレスしろよw
401395:2008/09/09(火) 15:08:47
>>400
当然読んだに決まってるじゃん。
リンク先のサンプルは右クリックメニューにオリジナルメニューを追加させるようなアプリのサンプルなんだから、
右クリックで開かれるファイル名を取得したいという質問自体が意味不明なんだよ。
あくまでレジストリにキーを追加するだけのアプリと、コマンドライン引数を取得することは全く結びつかない。
コマンドライン引数を取得したいのならばそう言えばいいだけで、リンク先の記事は何の意味もなさないんだよ。
402デフォルトの名無しさん:2008/09/09(火) 15:40:12

 政治板にあった的確なAAを紹介します!!
          ↓

【選挙前】 郵政民営化に賛成か否か 国民投票です

    自民党↓ 小泉
    , - ,----、
    (U(    )  
    | |∨T∨   
    (__)_)    国民様、へへへーっ
          ↓
          ↓
【選挙後】
自民党↓   ガソリン暫定税率維持
         後期高齢者制度制定
   ∧_∧    日雇い派遣 制限撤廃
  ( ´∀`)     郵政造反組復党
  (   /,⌒l     & 天下り先独法の特別会計ジャジャ漏れは完全に温存 !!
  | /`(_)∧_0.  & 二人の総理投げ出し他人事で辞任!
  (__)(´∀`; )⊃⌒⊃   ← ← ← (一般民間人)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
403デフォルトの名無しさん:2008/09/09(火) 16:18:33

ageろよww
404デフォルトの名無しさん:2008/09/09(火) 19:14:16
コピペ君って馬鹿だな、まで読んだ。
405デフォルトの名無しさん:2008/09/09(火) 21:29:25
>>396
ありがとうございます。
期待していた動きをさせることができました。
406デフォルトの名無しさん:2008/09/10(水) 11:30:15
メソッドの引数にプロパティがたくさんあるクラスを渡そうとしています。
引数を渡す時に ref をつけて渡した方が、実行速度上 ( 微々たるものかもしれませんが ) 有利になるのでしょうか。
ref を付けずに渡すと、メソッドに渡す時に引数がコピーされると、プログラミング c# に書かれていました。
どうなのでしょうか?
407デフォルトの名無しさん:2008/09/10(水) 11:31:53
用途による としか言いようがない
408デフォルトの名無しさん:2008/09/10(水) 11:32:39
されない。
そう書いてあったならその本が間違ってる。
もしくは値型についての話と混同してる。
409デフォルトの名無しさん:2008/09/10(水) 11:33:50
厳密にはクラスでも引数はコピーされるが、今の話はそういう話ではないはず。
410デフォルトの名無しさん:2008/09/10(水) 11:36:47
大きな値型なら速くなる
クラスなら付けない方がたぶん速い
411デフォルトの名無しさん:2008/09/10(水) 11:37:43
そうじゃなくて、そのメソッドをよく呼ぶときに実行速度が問題となるってこと。
412デフォルトの名無しさん:2008/09/10(水) 11:42:57
>>407-411
お返事ありがとうございます。
なかなか難しいですね。

私の理解としては、メソッドの引数が、
クラスの場合→インスタンスのアドレスが渡される ( コピーされない )
値型の場合→ボックス化?され ( つまりコピーされ ) 渡される
という理解ですが、良いのでしょうか?

クラスの場合に、そのクラス中に値型のフィールドが含まれることもあるかと思いますが、そちらはよく分かってません。



413デフォルトの名無しさん:2008/09/10(水) 11:43:13
refキーワードは速度じゃなく、メンバの使われ方が問題なんだが
414デフォルトの名無しさん:2008/09/10(水) 11:44:14
よく考えなくても分かるけど、参照がコピーされたのに、参照に含まれる一部が実体とかおかしいだろ
415デフォルトの名無しさん:2008/09/10(水) 11:47:40
意味が分かりませんw
416デフォルトの名無しさん:2008/09/10(水) 11:47:47
>>414
なるほど。

では、まとめると、
クラスの場合→インスタンスのアドレスが渡される ( コピーされない )
クラスのメンバに値型が含まれる場合→インスタンスがコピーされアドレスが渡される
値型の場合→ボックス化?され ( つまりコピーされ ) 渡される
という理解ですが、良いのでしょうか?
417デフォルトの名無しさん:2008/09/10(水) 11:52:17
とりあえずいろいろコード書いて試してみりゃいいよ
418デフォルトの名無しさん:2008/09/10(水) 11:57:14
>>416

これ読んどけ。じっくり読むと理解できるから。流して読むと川俣ワールド迷走することになるが

http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_006/cs2_006_01.html
419デフォルトの名無しさん:2008/09/10(水) 12:06:54
>>414だいぶ混乱してる。
少なくとも今の話にはボックス化は無関係。
ただしコピーされるってのは間違ってない。
値型メンバはクラスのインスタンスにそのまま埋め込まれてる。
参照型メンバはクラスのインスタンスに、まあ君の理解で言うとアドレスが埋め込まれてる。
420デフォルトの名無しさん:2008/09/10(水) 12:09:11
>>416

× クラスのメンバに値型が含まれる場合→インスタンスがコピーされアドレスが渡される
○ クラスのメンバに値型が含まれる場合→インスタンスを保持している変数のアドレスが渡される


// 例

class Hoge {
private string msg;
Hoge(string s) {
msg = s;
}
public override string ToString() {
return msg;
}
static void foo(ref Hoge fuga) {
// Main関数のhogeが指しているインスタンスが別のものになる。
fuga = new Hoge("Foo");
}
static void Main(string[] args) {
Hoge hoge = new Hoge("Hello");
Console.WriteLine(hoge.ToString());
foo(ref hoge);
Console.WriteLine(hoge.ToString());
}
}
421デフォルトの名無しさん:2008/09/10(水) 12:15:25
値型は実体がコピーされる。
ただし、参照型に含まれる値型は値型の参照がコピーされる。

以上
422デフォルトの名無しさん:2008/09/10(水) 12:15:53
もう難しすぎる!
423デフォルトの名無しさん:2008/09/10(水) 12:16:01
>>413
XNA Frameworkとか覗いてみたらわかるよ
決して良い使い方だとは言えないんだけど
424デフォルトの名無しさん:2008/09/10(水) 12:23:02
そういう人が書いた記事よりもMSDNを熟読するほうがいいよ。
425デフォルトの名無しさん:2008/09/10(水) 12:24:31
そりゃC#のボキャブラリだけで考えていたら難しいだろう
Cかアセンブラで関数のメカニズム(スタックフレーム)について
勉強してから戻ってくるといいよ

そういえばMSILの逆アセンブラなんかもあったような
426デフォルトの名無しさん:2008/09/10(水) 12:30:05
でたらめが入りまじってるから、
ちゃんとした書籍で調べることをお薦めする。

ああ、ひと目でわかるとか、あんなのは駄目だぜ。
こちらはVB版だが、確か同じ間違いの記述がある。
427デフォルトの名無しさん:2008/09/10(水) 13:35:40
>>417-426
スタックやヒープなどからいろいろと勉強して理解してみます。
アドバイスありがとうございます。

逆に ref を使うときってどういう時に使ってますか?
428デフォルトの名無しさん:2008/09/10(水) 13:42:06
たまにprivateメソッドで実装の都合で使うかも
外から見えるメンバには絶対使わないな
outは稀に使うけど
429デフォルトの名無しさん:2008/09/10(水) 14:31:35
確かにrefはめったにない。
outはたまに使う。
430デフォルトの名無しさん:2008/09/10(水) 14:34:39
COMインターフェイス絡みだと[In] refなんてザラだけどこのスレ的にはあんまり関係ないな
431デフォルトの名無しさん:2008/09/10(水) 14:39:29
C#2.0 Winアプリで超基本を教えてください。

DataTableをDataSourceプロパティにバインドしたときは
ValueMemberとDisplayMemberを指定することでSelectedItemからTextとValueが別々に取得可能ですが

自分で
コンボ.Items.Add
メソドを使用して項目を追加する場合に SelectedItemからTextとValueを別々に取得できるようにするにはどのようにすればよいでしょうか?

自分でデータテーブルを作成するときに加工しておけばよいのでしょうが、
それはしない方向で実現する手段があればお教えください。

具体的には
データベースにId Name のカラムがありそれぞれ int,string の型になっています。
この先頭に * 全て という項目を入れたいのですが
DBから取得してきたDataTableのId列はint型なので先頭項目を挿入できないのです。

値を取得してきた際、*でなければ全て数値であることが保障されているという前提です。
よろしくお願いします。
432デフォルトの名無しさん:2008/09/10(水) 15:39:31
DBNullでいいじゃん?とは思うけど
stringのプロパティ二つ持ったクラス用意
DisplayMember/ValueMemberにそれぞれのプロパティ名設定
一つずつ用意したクラスに詰替え
Items.AddよりDataSourceに配列として設定した方がよくね?
433デフォルトの名無しさん:2008/09/10(水) 15:45:45
>>432

>Items.AddよりDataSourceに配列として設定した方がよくね?
確かに・・・

まず提案していただいた方法試してみます!
ありがとうございました。
434デフォルトの名無しさん:2008/09/10(水) 17:16:10
DBの項目がIntならそのまま更新できないから「全て」が選ばれたときにどうやって更新するのかは気になるところ
435デフォルトの名無しさん:2008/09/10(水) 17:26:13
ArgumentNullExceptionをスローするときに
引数名を文字列で直接指定するのって格好悪い気がするんだけどいい方法ある?
436デフォルトの名無しさん:2008/09/10(水) 17:27:24
気のせいだ
437デフォルトの名無しさん:2008/09/10(水) 17:39:51
>>435
ない。

リファクタリングと相性が悪いので、どうにかしようという話が出てたが
まだ実現していない。
438デフォルトの名無しさん:2008/09/10(水) 18:05:24
internal static Exception ArgumentNull(Delegate method, int paramIndex) {
 ParameterInfo[] parameters = method.Method.GetParameters();
 return new ArgumentNullException(parameters[paramIndex].Name);
}
void Hoge(object arg) { throw ArgumentNull(new Action<object>(Hoge), 0); }
こういうのはどうだろう
439デフォルトの名無しさん:2008/09/10(水) 18:11:12
今度は引数の数や順番の変更に弱くなるぞ
440デフォルトの名無しさん:2008/09/10(水) 22:58:27
質問です。
WinXPにてadmin権限でログイン後
作成したアプリをインストーラからインストール。
アプリは、カレントディレクトリに対してフォルダを作成したり
ファイルをダウンロードしたりします。

admin権限でログインしているときはうまく動作するのですが、
フォルダに、ユーザからのアクセス件が無いので動作しません。
以下のコードでアクセス権を付加しようとしていますがうまくいきません。
どこが間違っているでしょうか?

System.Security.AccessControl.DirectorySecurity dSecurity =
Directory.GetAccessControl(Application.StartupPath);
dSecurity.AddAccessRule(
new System.Security.AccessControl.FileSystemAccessRule(
System.Environment.UserName,
System.Security.AccessControl.FileSystemRights.FullControl,
System.Security.AccessControl.AccessControlType.Allow
));
Directory.SetAccessControl(Application.StartupPath, dSecurity);

441440:2008/09/10(水) 23:00:07
質問訂正です。
WinXPにてadmin権限でログイン後
作成したアプリをインストーラからインストール。
アプリは、カレントディレクトリに対してフォルダを作成したり
ファイルをダウンロードしたりします。

admin権限でログインしているときはうまく動作するのですが、
権限無しのユーザでログインすると
フォルダにユーザからのアクセス件が無いので動作しません。
以下のコードでアクセス権を付加しようとしていますがうまくいきません。
どこが間違っているでしょうか?

System.Security.AccessControl.DirectorySecurity dSecurity =
Directory.GetAccessControl(Application.StartupPath);
dSecurity.AddAccessRule(
new System.Security.AccessControl.FileSystemAccessRule(
System.Environment.UserName,
System.Security.AccessControl.FileSystemRights.FullControl,
System.Security.AccessControl.AccessControlType.Allow
));
Directory.SetAccessControl(Application.StartupPath, dSecurity);
442デフォルトの名無しさん:2008/09/10(水) 23:25:25
>>441
フォルダのアクセス権がないユーザーが、そのフォルダのアクセス権を変更することはできない。
当たり前のことですな。
443デフォルトの名無しさん:2008/09/10(水) 23:32:08
お前馬鹿かよ。
何やろうとしてるか冷静に考えてみろ。
444デフォルトの名無しさん:2008/09/11(木) 00:08:28
C#もVBと同じ Optional 引数は使えますか?
445デフォルトの名無しさん:2008/09/11(木) 00:27:28
いいえ
446デフォルトの名無しさん:2008/09/11(木) 00:43:03
adminとuserがひとつのアプリを共有し
ファイルディレクトリ操作を行う場合
どういう実装をすればいいのでしょうか?
447デフォルトの名無しさん:2008/09/11(木) 01:05:23
userに権利が無い操作を、できなくすればいいのでない?
448441,446:2008/09/11(木) 01:51:14
>447
自分がadminかそうじゃないかを知る方法ってあるのですか?
元々その辺から調べてたのですが全くわかりませんでした。
449デフォルトの名無しさん:2008/09/11(木) 06:02:46
>>448
WindowsIdentityとWindowsPrincipalの組み合わせで。
http://www.atmarkit.co.jp/fdotnet/dotnettips/347rolebasesec2/rolebasesec2.html
450デフォルトの名無しさん:2008/09/11(木) 11:40:40
C# 2.0のアプリケーション構成ファイルで接続文字列を設定し
DbProviderFactoriesクラスからGetFactoryメソッドを使用した上でDBへ接続を行いたいと思っています。

構成ファイルの方は設定しており
<add name="プロジェクト名.Properties.Settings.ConnectionString"
connectionString="Provider=HOGE-;Data Source=hogehoge"
providerName="System.Data.?????" />
このような記述がされております。

このときPG側から接続文字列の設定を読み取ることは標準でできるのですが ProviderName
の部分(System.Data.?????)を取得するにはどのようにすればいいのでしょうか?

設定ファイルの設定はC#の「プロジェクトの設定のエディタを使用しております。
よろしくお願いいたします。
451441:2008/09/11(木) 14:55:32
>449 ありがとうございました。ようやく前進できました。

もうひとつ質問ですが、
System.Net.WebClient でファイルのDLを行う場合、
拡張子exeのファイルは環境によっては弾かれるということはありえますか?

拡張子exeのファイルは拡張子を変えてDLしたあとリネームした方がいいのでしょうか?
それとも、zipファイルとしてDLしたあと展開するのがベターでしょうか?
452デフォルトの名無しさん:2008/09/11(木) 22:11:46
C#でWindowsの音量(マスターとか、WAVEとか、ラインインとか)を
直接操作できるような方法ってあるんでしょうか?
453デフォルトの名無しさん:2008/09/11(木) 22:16:22
Win32API
454デフォルトの名無しさん:2008/09/11(木) 22:17:24
C# api MIXIERCAPS あたりで検索して味噌
455デフォルトの名無しさん:2008/09/11(木) 22:20:22
err
s/MIXIERCAPS/MIXERCAPS/
456デフォルトの名無しさん:2008/09/11(木) 23:07:10
>>450
これ以上ないくらい普通に取れるが、どこで引っかかってるの?
457デフォルトの名無しさん:2008/09/12(金) 09:01:18
>>456
おはようございます。

Properties.Settings.Default.ConnectionString
で接続文字列は取得できるのですが
Properties.Settings.Default.ProviderName
というプロパティが存在せず取得できないということです。
458デフォルトの名無しさん:2008/09/12(金) 11:42:58
コンテキストメニュー「1」又は「2」からフォーム「A」を
開くときに、フォーム「A」はどちらのコンテキストメニューから
開かれたのか知るためにはどうすればいいのでしょうか。
459デフォルトの名無しさん:2008/09/12(金) 11:51:46
DataGridViewの表示がやたらと遅いんですが、
改善策はあるんでしょうか?
フォームにDataGridViewを置いて起動→
10行くらい適当に入力→
最小化、最大化で、上から順にズラズラと再描画されています。
PCは最近のものなのでスペックは悪くありません。
460デフォルトの名無しさん:2008/09/12(金) 13:16:45
>>458
フォームAにそういうプロパティを実装する。
あとは呼び出す前に設定するだけ。
461デフォルトの名無しさん:2008/09/12(金) 15:30:53
Form1にシリアル通信をしてオープンしている状態で、別のフォーム(Form2)を呼び出して、
そのまま通信しようとするとエラーが起きてしまいます。
どうすればよいでしょうか?
462デフォルトの名無しさん:2008/09/12(金) 15:32:27
エラー(笑)
463デフォルトの名無しさん:2008/09/12(金) 15:36:04
エラーというかポートが閉じられているとでます。
464デフォルトの名無しさん:2008/09/12(金) 16:02:51
何がでるって?
465デフォルトの名無しさん:2008/09/12(金) 16:08:04
'System.InvalidOperationException' のハンドルされていない例外が System.dll で発生しました。

追加情報: ポートは閉じられています。

です
466デフォルトの名無しさん:2008/09/12(金) 16:10:00
>そのまま通信しようとすると
って具体的に何したの
467デフォルトの名無しさん:2008/09/12(金) 16:12:08
データを送ろうとしてます。
Form1からは正常に動きます
468デフォルトの名無しさん:2008/09/12(金) 16:29:07
ズコー
469デフォルトの名無しさん:2008/09/12(金) 16:35:43
いいよいいよー
470デフォルトの名無しさん:2008/09/12(金) 17:02:41
Form2はForm1からシリアルのインスタンスもらってそれを操作しようとしたの?
スレッドは単一?
471デフォルトの名無しさん:2008/09/12(金) 17:08:46
はい
472デフォルトの名無しさん:2008/09/12(金) 18:41:45
メル欄ふざけてるの?
473デフォルトの名無しさん:2008/09/12(金) 18:55:07
はい
474デフォルトの名無しさん:2008/09/12(金) 19:27:06
>>473
違う

>>472
違う

非アクティブ状態でも、シリアルポートはOPENにしたいんだーーーーーーーーーーーーーーーーーー
475デフォルトの名無しさん:2008/09/12(金) 19:29:54
メル欄真面目なの?
476デフォルトの名無しさん:2008/09/12(金) 19:47:56
まじめです。
マジレス頼みます
477デフォルトの名無しさん:2008/09/12(金) 20:18:23
VBのMSCommじゃないんだから(いやMSComm使ったってそうだが)Formの状態と
SerialPortクラスの例外は普通は何の関係もないはずだが。

っていうかまずハンズオンか何かにあったサンプルコードを理解するところから
はじめたらどう?
478デフォルトの名無しさん:2008/09/13(土) 01:11:49
シリアルポートって1つしかOPEN出来ないとかそういう話じゃなくて?
479デフォルトの名無しさん:2008/09/13(土) 14:24:46
は?
480デフォルトの名無しさん:2008/09/13(土) 17:28:02
め?
481デフォルトの名無しさん:2008/09/13(土) 17:32:19
は?
482デフォルトの名無しさん:2008/09/13(土) 17:47:15
め?
483デフォルトの名無しさん:2008/09/13(土) 17:48:11
学?
484デフォルトの名無しさん:2008/09/13(土) 17:49:12
園?
485デフォルトの名無しさん:2008/09/13(土) 17:58:03
Windows フォームアプリで、System.Threading.Timer で一定時間ごとにある操作をしてフォームに文字列を表示しています。(30ms 毎に Timer が起動)
文字列はちゃんと表示されているのですが、フォームの他のコントロールが描画されず真っ白のままです。
System.Windows.Forms だと正しく動作するのですが、どうしたらよいのでしょうか?
486デフォルトの名無しさん:2008/09/13(土) 18:07:52
System.Windows.Forms を使う
487デフォルトの名無しさん:2008/09/13(土) 18:10:02
>>485
できた。
this.Update();
Application.DoEvents();
を追加した。
488デフォルトの名無しさん:2008/09/13(土) 18:29:34
DoEvents()が出てきたら何か考え方がおかしいと疑ったほうがよい
489デフォルトの名無しさん:2008/09/13(土) 20:28:52
>>487
残念だが多分正しくは出来てない気がする。
デバッグ実行したら例外になったりしないか?
まあ見てないから分からんけども。
490デフォルトの名無しさん:2008/09/14(日) 03:52:20
ずっと動かしてたら落ちるだろうなあ
491デフォルトの名無しさん:2008/09/14(日) 09:00:39
>>488-490
確かに表示は更新することは出来ましたが、
フォームを終了させると例外が発生しています。
タイマの delegate でフォームを更新させるために呼んでいる Invoke メソッドで InvalidOperationException が発生しました。
30ms 毎に Timer を起動していますが、行っている処理の時間がかかりすぎて、次の30ms までに終了せず、タイマが ThreadPool にたまりすぎなのだろか?
492デフォルトの名無しさん:2008/09/14(日) 11:10:13
どんな処理してるわけ?
493デフォルトの名無しさん:2008/09/14(日) 11:56:13
毎回起動しなおしてんの?
494デフォルトの名無しさん:2008/09/14(日) 12:08:16
ま、Invokeはハンドルが破棄された後に呼び出すと例外になるので、
とりあえずInvokeする前にハンドルがあるか確認するか、
確実を期するなら自前でフラグ管理と同期を行うか、
まあ少なくともどっちかは必要。

その上で他にも問題があるかはまた別の話。
495デフォルトの名無しさん:2008/09/14(日) 12:20:56
30msごとにタイマー起動してフォームを更新っていったいどんな処理しているの?
その設計自体を根本から見直す方が先決だと思うんだけれど。
496デフォルトの名無しさん:2008/09/15(月) 22:27:11
色んな要求あるんだから、お前の小さい視点でレスするな
497デフォルトの名無しさん:2008/09/15(月) 22:45:46
点に大きいも小さいもないよ。
498デフォルトの名無しさん:2008/09/15(月) 22:48:30
ん?悔しかったの?w
499デフォルトの名無しさん:2008/09/16(火) 04:08:33
デリゲートは標準でマルチキャストですが
シングルキャストデリゲートってどう作るんですかね?
500デフォルトの名無しさん:2008/09/16(火) 09:56:21
C#ってよりCLRじゃ無理
501デフォルトの名無しさん:2008/09/16(火) 10:04:09
あれってデリゲートが今みたいに積極的にイベント以外に使われるようになることを
想定してなかったんだろうな
今作り直すならイベントハンドラは別扱いとかコンテナは別にするとかになりそう
502デフォルトの名無しさん:2008/09/16(火) 19:31:30
>>501
なぜデフォでマルチキャストなのかって疑問は確かにあるけどそれはない。
だって関数ポインタの自然な発展形である以上、
その用途をイベントだけに見積もるなんてありえん。
503デフォルトの名無しさん:2008/09/16(火) 19:34:08
また俺のわからない話をする
504デフォルトの名無しさん:2008/09/16(火) 19:43:20
最初はシングルキャストと厳密に分けてたけどうざいだけでメリットがあんまなかったからやめたのさ。
505デフォルトの名無しさん:2008/09/16(火) 19:59:17
関数ポインタを引数にとるアンマネージ関数にマルチキャストデリゲートを渡しても
ちゃんと全部呼んでくれる。
神経質に使い分ける必要もないのかな。
506499:2008/09/16(火) 20:13:47
どうも
class Program
{
//計算を委託できる
public Func<double, double, double> Calc;
private double a, b;
public Program(double a, double b){
this.a = a;
this.b = b;
}
private double DefaultCalc(double a, double b){
return a + b;
}
public void Action(){
double result;
if (Calc != null)
result = Calc(a, b);
else
result = DefaultCalc(a, b);
Console.WriteLine("計算結果:{0}", result);
}
}
class Test
{
static void Main(string[] args){
Program program = new Program(12, 42);
program.Calc += ((a, b) => a * b);
program.Calc += ((a, b) => a / b);
program.Action();
}
}
507499:2008/09/16(火) 20:14:33
↑みたいなプログラムだとマルチキャストの意味が全くないし
間違えて+=で委託先を追加したら気づかずに余計な処理をさせちゃうこともあり得るので
どうせならシングルキャストを作れればいいのにと思いましたが
private Func<double, double, double> calc;
public Func<double, double, double> Calc
{
get
{
this.calc = value;
}
}
みたいなプロパティを追加すればいいだけだと気づきました、すみません
508499:2008/09/16(火) 20:15:19
setだった
509デフォルトの名無しさん:2008/09/16(火) 20:17:06
setオンリーのプロパティはガイドライン違反
SetCalcメソッドにしようね
510デフォルトの名無しさん:2008/09/16(火) 20:20:36
>>509
そんなガイドラインあったっけ?
VBなんて普通にWriteOnlyなんていう組み込みのキーワードまであるんだけど。
511デフォルトの名無しさん:2008/09/16(火) 20:23:09
512デフォルトの名無しさん:2008/09/16(火) 20:47:43
<>で囲まれてる文字列を最小一致で全部取り出すにはどうしたらいいですか?
<html><body></body></html>なら、
html body /body /htmlを取り出してリストに突っ込むようなことです
最小一致なのでhtml><body></body></htmlが取り出されると困ります
よろしくおねがいします
513デフォルトの名無しさん:2008/09/16(火) 20:57:44
>>509>>511
そうでしたか、
わざわざどうもです
>>512
char[] separator = {'<', '>'};
string str = "<html><body></body></html>";
str.Split(separator, StringSplitOptions.RemoveEmptyEntries);
っていうのはどうでしょう
514512:2008/09/16(火) 21:17:12
>>513
うまくいきました
本当にありがとうございます。
515デフォルトの名無しさん:2008/09/16(火) 22:15:33
>>512
ちなみに、.NET の正規表現的には \<.*?\> で行ける。
*? で最小一致。
516デフォルトの名無しさん:2008/09/16(火) 22:55:41
>>515
ついでに先読み、戻り読みも入れて (?<=<).*?(?=>) で

>>513>>514
Split使うなら、ゴミが入らないようにしないと
str.Split('<').Skip(1).Select(s => s.Split('>')[0])

因みに、以下の場合はおそらく構文エラーなので適当に
- 1回目のSplitで空文字列がある(ただし、#0は除く)
- 2回目のSplitで要素数が2でないか、#0が空
517デフォルトの名無しさん:2008/09/16(火) 23:05:38
横やりだけどSkip()って初めて見るけど新しく追加されたメソッドか?
518デフォルトの名無しさん:2008/09/16(火) 23:06:47
>>517
LINQ
519デフォルトの名無しさん:2008/09/17(水) 01:06:42
LINQまったく使ってないなぁ
最初は興味あったけど構文が異質すぎて使えない
520デフォルトの名無しさん:2008/09/17(水) 01:14:33
クエリ式を使わないLinqもありだよ。C#のクエリ式ではSkipはサポートされていない。
VBではサポートされている。
521デフォルトの名無しさん:2008/09/17(水) 01:28:02
ゴミって空文字かな?
StringSplitOptions.RemoveEmptyEntries
でおkのような気がす
そういう感じで行くなら
str.Split(new char[]{ '<' , '>' }).Where(s => s != "")
の方が俺好みだば

クエリ構文はまったくわからないなぁ
まったく使わなそうな気がするのでそこだけ勉強すらしてないなぁ。。
522デフォルトの名無しさん:2008/09/17(水) 01:42:24
>>521
いや、こういう事

<html><body>ゴミ</body></html>
523デフォルトの名無しさん:2008/09/17(水) 11:17:23
ああなるほど把握
524デフォルトの名無しさん:2008/09/17(水) 14:56:32
パブリックメンバにDictinaryを含むクラスをシリアライズしたいのだけど、
IDictionary実装クラスはシリアル化できないと怒られます。

KeyValuePair構造体の配列に変換してからシリアル化するのがいいのかと考えたんですが、
デシリアライズの時にどうすればいいのか・・・

どなたか助言いただけると助かります
525デフォルトの名無しさん:2008/09/17(水) 15:09:15
配列にしたとしても、KeyValuePair(のプロパティ)が変更可能でないから駄目じゃないか
俺は変更可能なKeyValuePairとDictionaryのラッパー作って対処したが
526デフォルトの名無しさん:2008/09/17(水) 15:25:42
Dictionaryでset可能なプロパティって気持ち悪いな
IXmlSerializableの実装でも書くか?
527デフォルトの名無しさん:2008/09/17(水) 15:42:24
C#でH8/3069の制御って出来ますか?
528デフォルトの名無しさん:2008/09/17(水) 15:54:41
うん
529デフォルトの名無しさん:2008/09/17(水) 16:13:30
返答ありがとうございます
もう少し具体的な質問が出来るようになるまで自分で勉強しようと思います
530524:2008/09/17(水) 17:29:27
結局パブリックプロパティで、
Dictionaryのkeyとvalueの2次元配列を取得、
Setterでは2次元配列のループでDictionaryにkeyvaluepairを格納していくような設計にしました。

やはりDictionaryはカプセル化した方が良かったですね。
ただデシリアライズ時のパフォーマンスがどうなるかは?ですが。
531デフォルトの名無しさん:2008/09/17(水) 18:49:57
>>528
え゙ ?H8向けのコンパイラ(実行環境)ってあるの?
532デフォルトの名無しさん:2008/09/17(水) 18:55:26
↑アホ
533デフォルトの名無しさん:2008/09/17(水) 19:38:33
いや、俺の方がもっとアホ
534デフォルトの名無しさん:2008/09/17(水) 19:46:40
>>531
H8は(というか今時のマイコンはほとんどそうだと思うけど)実機とIDEで
デバッグができるはず。

まあでもマイコンの開発にデバッガなんて俺はいらないと思うけどね。
少なくとも俺は使ったことも必要性を感じたこともないよ。
535デフォルトの名無しさん:2008/09/17(水) 22:42:02
タイマーで10ミリ秒毎にフォーム上のマウスカーソルの座標を取得し、
マウスに合わせて画像も一緒に移動させる。
更に、クリックした場所に画像を固定する。
ってなことをやってみたんですが、
移動時など、ものっすごい画像がチラついてしまいますorz
やっぱこういうのはDirectXなどを使ったほうが良いのでしょうか?
536デフォルトの名無しさん:2008/09/17(水) 23:06:50
本当にそれは10ミリ秒毎にする必要はあるのか?
537デフォルトの名無しさん:2008/09/17(水) 23:08:53
>10ミリ秒毎
意味あると思ってんのか?
538デフォルトの名無しさん:2008/09/17(水) 23:23:14
100fpsなんて格ゲでもやらんぜ
539535:2008/09/18(木) 00:39:58
3連発でダメ出しされるとは・・・orz
最初100ミリ秒でやったんですが、
マウスの動きに若干遅れるんで、10ミリ秒にしてみました。
意味は全然考えてませんでした。すいません。。
これは仕様から考え直したほうが良さげですね。
お騒がせしました&ありがとうございました。
540デフォルトの名無しさん:2008/09/18(木) 01:14:11
タイマでやらんでもできるっしょ。
ボードゲームのソースでも拾ってくれば?
541デフォルトの名無しさん:2008/09/18(木) 01:33:08
C#というわけではないのですが、ファイル管理ソフトでファイル内
文字列まで見て該当ファイルを見つけるという検索がありますが、
あれは文字列の形式やフォーマットあるいはエンコードなどをすべて
のケースで調べているのでしょうか?

たとえばExcelやワードなどのファイルの場合は、それをテキスト形式
で取り込んで調べるのでしょうか?
542デフォルトの名無しさん:2008/09/18(木) 01:36:38
>>541
うぜえ、なんだこいつ
場違いなんだよ消えうせろクソ餓鬼
543デフォルトの名無しさん:2008/09/18(木) 03:05:33
>>540
画像をマウスと一緒に動かすのは、とりあえず諦めました。
で、オセロとか見てたんですが、置く画像が正方形なら簡単だけど、
長方形も混在してると、途端に難しくなりますね。
ゲーム系のプログラムは全然やったこと無かったんで、
もっと単純な物も参考にしてやってみます。
544デフォルトの名無しさん:2008/09/18(木) 03:52:15
>>543
PanelとかPictureBoxとかのMouseMove/MouseClickイベントで十分ぽい匂いがした。
545デフォルトの名無しさん:2008/09/18(木) 07:56:55
struct Vect
{
    public Point[] Points;
}

private void init()
{
    Vect v = new Vect();
    v.Points = new Point[] { new Point(2, 3), new Point(3, 4) };//これだといける

    v.Points = { new Point(2, 3), new Point(3, 4) };//これだとエラーが出る
}
なぜエラーがでるのでしょうか?どういう違いがあるのでしょうか?
546デフォルトの名無しさん:2008/09/18(木) 08:00:00
Point[] Points = { new Point(2, 3), new Point(3, 4) };

こんな感じで記述するといけるんですが・・
547デフォルトの名無しさん:2008/09/18(木) 08:29:26
>>545
new Point[] を省略していいのは変数宣言の時だけ。
548デフォルトの名無しさん:2008/09/18(木) 15:22:45
省略できるのしらんかったw
549デフォルトの名無しさん:2008/09/18(木) 17:28:56
menustripコントロールで出来て、toolstripコントロールだと出来ないことってありますか?
toolstripならアイコンだけじゃなくて文字でも表示できるのでmenustripを使う意味はあるのかなと思いました。
550デフォルトの名無しさん:2008/09/18(木) 19:24:28
C#Builderのプロジェクトファイル群をVC#対応へ移行するにはどのようにするのでしょうか?
551デフォルトの名無しさん:2008/09/18(木) 21:06:14
エラー 1 型または名前空間名 'Drawing' は名前空間 'System' に存在しません。アセンブリ参照が不足しています。

どこいっちゃったのよ。
552デフォルトの名無しさん:2008/09/18(木) 21:13:25
Drawingの前にSystemつけるかusing System.Drawing;じゃないか
553デフォルトの名無しさん:2008/09/18(木) 21:18:55
スレタイに C井 が足りない
554デフォルトの名無しさん:2008/09/18(木) 21:20:07
C丼は足りてる
555デフォルトの名無しさん:2008/09/18(木) 21:24:26
.net1.0からの移植

using System.Drawing;でエラーが出た もう意味がわからない
556デフォルトの名無しさん:2008/09/18(木) 21:27:33
※ C丼: コチュジャン丼。豚肉と温野菜をコチュジャンで甘辛くした物をご飯の上に載せた物
557デフォルトの名無しさん:2008/09/18(木) 21:31:10
ソリューションエクスプローラーの参照設定にSystem.Drawing入ってるか?
558デフォルトの名無しさん:2008/09/18(木) 21:33:20
「System」だけ参照設定に入ってるけど、一つ一つやらなきゃいけないの?
なんか似たようなエラー30個もある
559デフォルトの名無しさん:2008/09/18(木) 21:35:48
なるほど解決しました
エラー減っていくのが楽しいです
ありがとう
560デフォルトの名無しさん:2008/09/18(木) 21:38:59
現金な奴だw
561デフォルトの名無しさん:2008/09/18(木) 21:40:21
じゃあ、C丼について語ろうか
562デフォルトの名無しさん:2008/09/18(木) 21:43:23
丼だけ〜 ?
563デフォルトの名無しさん:2008/09/18(木) 23:42:56
C#で、Formに張り付いているTextBoxを、
マウスドラッグされた場所に移動する場合どの
メソッドをしようすればいいでしょうか?
564デフォルトの名無しさん:2008/09/19(金) 00:41:50
メソッドは使用しない。
プロパティなら使用する。
565デフォルトの名無しさん:2008/09/19(金) 00:42:08
private bool clicked = false;
Point beforeLocation;

private void textBox1_MouseDown(object sender, MouseEventArgs e)
{
clicked = true;
beforeLocation = textBox1.PointToScreen(e.Location);
}
private void textBox1_MouseMove(object sender, MouseEventArgs e)
{
if (clicked && (beforeLocation != null))
{
Point afterLocation = textBox1.PointToScreen(e.Location);
textBox1.Left += (afterLocation.X - beforeLocation.X);
textBox1.Top += (afterLocation.Y - beforeLocation.Y);
beforeLocation = afterLocation;
}
}
private void textBox1_MouseUp(object sender, MouseEventArgs e)
{
clicked = false;
}
超適当で作ってみたけど正しいかはわかんない
566デフォルトの名無しさん:2008/09/19(金) 01:03:03
もうちょっとシンプルに
int mx, my;
bool mDown;
private void textBox1_MouseDown(object sender, MouseEventArgs e)
{
mx = e.X;
my = e.Y;
mDown = true;
}
private void textBox1_MouseMove(object sender, MouseEventArgs e)
{
if (!mDown) return;
this.textBox1.Left += e.X - mx;
this.textBox1.Top += e.Y - my;
}
private void textBox1_MouseUp(object sender, MouseEventArgs e)
{
mDown = false;
}
567デフォルトの名無しさん:2008/09/19(金) 04:36:53
msdnドキュメントをオフラインで使用したいのですが
どこでダウンロードできますか?
568デフォルトの名無しさん:2008/09/19(金) 04:42:58
Download Centre
569デフォルトの名無しさん:2008/09/19(金) 07:45:52
2005用のしかないんだけど、2008にも使えるの?
570デフォルトの名無しさん:2008/09/19(金) 09:24:58
すみません、、、質問させていただきます。


for文を利用して、偶数表示をするWEB画面を作成する課題がでました。
解答例)2,4,6,8,10

結果は、10が表示されます。デバッグしたら、
2,4,6,8もif文の中をとっているのに表示されません、、、
提出期限は昨日の夜まででした、、、ほんとに
どうしていいか分かりません。教えてください。


for (int i = 1; i <= 10; i++)
{
if (i % 2 == 0)
{
litShowAns.Text = Convert.ToString(i) + "、";
}
}


litShowAnsはliteralのIDです。
ヒントは文字列の結合らしいのですが。。。何で文字列の結合が必要なのか分かりません。
571デフォルトの名無しさん:2008/09/19(金) 09:36:30
>>570
Aという変数に2から10まで入れたとして、最後に入ってるのは10だろ?
572デフォルトの名無しさん:2008/09/19(金) 09:37:32
>>570
文字列の結合を調べましたか? 試しましたか?

i がそれぞれの値のとき、何が起こっているか自分なりに説明できますか?
573デフォルトの名無しさん:2008/09/19(金) 09:49:15
>>570
litShowAns.Text += Convert.ToString(i) + "、";
574デフォルトの名無しさん:2008/09/19(金) 09:54:16
>>570
for (int i = 2; i <= 10; i+=2)
{
  string str += Convert.ToString(i) + "、";
}
litShowAns.Text=str;
575デフォルトの名無しさん:2008/09/19(金) 09:55:15
間違えた

string str ="";
for (int i = 2; i <= 10; i+=2)
{
  str += Convert.ToString(i) + "、";
}
litShowAns.Text=str;
576デフォルトの名無しさん:2008/09/19(金) 13:56:06
Convert.ToString(i)だと良いことあるの?
ずっとi.ToString(i)を使ってたんだけどまずい?
577デフォルトの名無しさん:2008/09/19(金) 14:06:37
文字列の連結を何回もやるときはStringBuilderとかそんな話もあるけどおいといて
for文だと最後に","が入っちゃうでしょう
どうしてもforを使わなきゃならんなら最後削るか、

string str ="2";
for (int i = 4; i <= 10; i+=2)
{
  str += "," + i.ToString();
}
litShowAns.Text=str;

こうするか
578デフォルトの名無しさん:2008/09/19(金) 14:11:12
> Convert.ToString メソッド (Int32)
> 解説
> この実装は、Int32.ToString と同じです。
579デフォルトの名無しさん:2008/09/19(金) 14:31:02
for (int i = 2; i <= 10; i++) litShowAns.Text += i % 2 == 1 ? "," : i.ToString();
580デフォルトの名無しさん:2008/09/19(金) 14:55:17
litShowAns.Text = Enumerable.Range(1, 10)
.Where(i => i % 2 == 0)
.Select(i => i.ToString())
.Aggregate((s1, s2) => s1 + "," + s2);
581デフォルトの名無しさん:2008/09/19(金) 15:08:54
>>577

List<string> strListにつっこんで
ループの外で String.Join(strList.ToArray(), ",")
でいいんじゃまいか。
582デフォルトの名無しさん:2008/09/19(金) 16:02:21
>>569
10 名前:デフォルトの名無しさん[] 投稿日:2008/09/16(火) 16:23:01
ダウンロードの詳細 : MSDN Library for Visual Studio 2008 SP1:
ttp://www.microsoft.com/downloads/details.aspx?FamilyID=7bbe5eda-5062-4ebb-83c7-d3c5ff92a373&DisplayLang=ja
583デフォルトの名無しさん:2008/09/19(金) 16:42:17
>>582
ありがと
ほんとわかりにくいよねMSのページって
584デフォルトの名無しさん:2008/09/19(金) 16:52:28
そんなに見つかりにくいのかと思ったら
ダウンロードセンターのトップから3画面じゃねーか
585デフォルトの名無しさん:2008/09/19(金) 17:20:25
VBスレよりはちょっと親切なスレ
586デフォルトの名無しさん:2008/09/19(金) 17:25:33
MSのページはごちゃごちゃしててわかりにくいよ
MSDNもそう
587デフォルトの名無しさん:2008/09/19(金) 20:57:45
ダウンロードセンターって検索ボックスに文字入れて検索するだけの
ページだよな?どこが?

588デフォルトの名無しさん:2008/09/19(金) 21:55:28
>>587ではないが自分にはこう見えてる
http://imagepot.net/view/122182884044.png
589デフォルトの名無しさん:2008/09/19(金) 22:00:30
CTIのシステムを自分のソフトにも組み込んでみたいんですが
どんな感じで実現するんでしょう?

着信があってその番号から検索するのはわかるんですが、
どうやって電話を邪魔せずに番号だけ抜き出せばよいのか…・

外からの着信→PCのモデム→TEL
こんな感じでつなぎそうな気がするのですが・・・・
590デフォルトの名無しさん:2008/09/19(金) 22:14:32
なんでこのスレで質問しようと思ったの?
591デフォルトの名無しさん:2008/09/19(金) 22:18:17
>>589
ここはC丼について語り合うスレだぜw

>>591
七味の代りに山椒つかってみたら?
七味も山椒もテーブル調味料から派生してるし、Iふりかけableも実装されてるから置換できるはず
592デフォルトの名無しさん:2008/09/19(金) 22:21:42
座薬のかわりに七味をつかったら癖になりました。今度は山椒もためしてみたいと思います。ありがとう。
593デフォルトの名無しさん:2008/09/19(金) 22:24:03
>>590
あぁ・・スレ違いでしたか
逝ってきます
594デフォルトの名無しさん:2008/09/19(金) 23:51:14
しかしVBのoptional引数は便利でした
C#も導入してほすいです
595デフォルトの名無しさん:2008/09/19(金) 23:56:45
C++から入った俺はデフォルト引数なくて絶望した
なんでないんだろ
596デフォルトの名無しさん:2008/09/20(土) 00:03:58
>>594
C++ のデフォルト引数みたいなのだっけ?
同じことしたければメソッドオーバーロード使うべきってことで削られたはず。
デフォルト値を変えたとき、利用側の再コンパイルが必要になるし。

VB の場合は、名前付き引数と組み合わせると結構面白そうに思うけど、
正直 C++ のデフォルト値はオーバーロードですればいいだけの話。
597デフォルトの名無しさん:2008/09/20(土) 04:07:07
うまく説明できないのですが

1,2,3,4,5
というそれぞれの数字を
5,4,3,2,1
というように変換したいのですがどうすればいいんでしょうか?
ソートの昇順降順とかではなくて、それぞれの数字(1なら5)に変換という漢字にしたいんだけど
598597:2008/09/20(土) 04:20:37
今はこんな感じでやってます

int[] a=new int[]{5,4,3,2,1};
int x=1;
a[x-1];
599デフォルトの名無しさん:2008/09/20(土) 04:36:26
598が何を言ってるのかわからないが、

Array.Reverse( a );

で逆順にできるが、違うのか?
例が悪い。そんなソートが完了しているような数字の並びじゃ逆順としか答えられない。
600デフォルトの名無しさん:2008/09/20(土) 04:49:48
Dictionay<int, int>
601597:2008/09/20(土) 05:58:38
>>600
これでいけました。ありがとう
連想配列というものなんですね
602デフォルトの名無しさん:2008/09/20(土) 11:36:57
ただの配列で十分な件。
マッピングが連続数値じゃないなら別だけど。
603597:2008/09/20(土) 14:05:25
Dictionay使ってみたけど、値からキーが取り出せないんですね
データの追加や削除もしないし
手軽に2つのデータをスワップしたいだけなので
自作関数作ったほうがいいみたい
604デフォルトの名無しさん:2008/09/20(土) 14:16:34
そういう場合には2個使うんだよ
605デフォルトの名無しさん:2008/09/20(土) 14:25:06
いやキーと値をひっくり返したペアも突っ込めばいいだけじゃん。
それに何の意味があるのか知らんが、自作するよりは手間もパフォーマンスも
はるかに勝るだろ。
606デフォルトの名無しさん:2008/09/20(土) 14:42:21
if文をずらーっと並べればokw
607デフォルトの名無しさん:2008/09/20(土) 14:45:16
6から引けばいいだけなんじゃ…
608597:2008/09/20(土) 14:57:28
例えば、この文字列を上下で相互変換したい場合
a,b,c,d,e
1,2,3,4,5
5,4,3,2,1

Dictionary<string,int> dicStringToInt=new Dictionary<string,int>();
dicStringToInt["a"]=1;
Dictionary<int,string> dicIntToString=new Dictionary<int,string>();
dicIntToString[1]="a";

こんな感じ?

データ構造自体は変化することもないんだけど
このswap処理を大量に何度も使用するので
できるだけ、if文や演算処理をしないようにしたいんだけど
609デフォルトの名無しさん:2008/09/20(土) 15:57:09
要素数はどのくらい?
文字列の長さは?散らばり具合は?

条件によって望ましい方法は変わるわな。
610デフォルトの名無しさん:2008/09/20(土) 16:31:58
リターンキーをOKボタンに割り当てるにはどうすればいいですか?
611デフォルトの名無しさん:2008/09/20(土) 16:34:13
AcceptButton のことかな?
612デフォルトの名無しさん:2008/09/20(土) 16:37:00
デザイナで、ボタンのプロパティDialogResultをOKにする、
とかそういう話??
613デフォルトの名無しさん:2008/09/20(土) 16:38:23
>>598
のやり方で出来ているんだったら、それでいいんじゃないの?何か問題有る?

ちなみに俺だったら、こうするな。

int[] a=new int[]{0,5,4,3,2,1};
int x=1;
a[x];
614デフォルトの名無しさん:2008/09/20(土) 16:46:51
>>611
>>612
ボタンのプロパティを探してもDialogResultって無いんですが・・・
615597:2008/09/20(土) 16:47:26
>>613
文字列から数字に変換する必要もあるので
配列は使えないんです
616デフォルトの名無しさん:2008/09/20(土) 16:56:08
>>614
とりあえず使用してる環境を教えて欲しいかな。

DialogResultがないとは思えないんだけど
↓MSの説明ページを一応リンク。

http://msdn.microsoft.com/ja-jp/library/system.windows.forms.button.dialogresult(VS.80).aspx
617デフォルトの名無しさん:2008/09/20(土) 16:59:01
> 文字列から数字に変換する必要もあるので
> 配列は使えないんです

文字列を数字にしてから、数字に変換するんじゃダメなのだろうか、
と愚考してみる。
618デフォルトの名無しさん:2008/09/20(土) 17:01:45
>>616
DialogResultは>>610の要求とちょっとズレてる。
>>611の言うように、デザイナでフォームのAcceptButtonを指定するんでしょ。

>>597
正直言ってることがうなぎみたいにつかみどころがない気がする。
やりたいことを小出しに表現せずに全部詳細に書けば?
619デフォルトの名無しさん:2008/09/20(土) 17:30:51
>>615
文字列というのは、今まで例に挙げていた 1,2,3,4,5 だけじゃなく、
アルファベットとかの任意の文字が含まれるということ?それとも数字だけ?
数字だけだったら、一旦数値に変換してから >>598のやり方をすればいいんじゃない?
620デフォルトの名無しさん:2008/09/20(土) 17:50:47

分散してたらテーブルを配列で持つのは効率が悪いだろう
621デフォルトの名無しさん:2008/09/20(土) 17:57:10
範囲次第だよね。
622597:2008/09/20(土) 19:02:16
>>617
それだとif文やswitchをしなければならないので・・

>>618
ユーザーから入力された文字列(数字やアルファベットが混在している任意の文字列)を
1文字づつ決まった法則(置換用データベースは用意してます)でint型やstring型に変換したいのです

"1"なら5、"a"なら1、5なら"1" という感じです
623597:2008/09/20(土) 19:09:22
入力された文字列が "1a5ig4"なら

5、1、1、9、7、2  <-すべてint

そして、上の文字列配列をこちらからユーザーに対して出力する場合は

"1a5ig4"
624デフォルトの名無しさん:2008/09/20(土) 19:13:10
そこまで説明できて何が分からないんだ。
625デフォルトの名無しさん:2008/09/20(土) 19:24:44
>>623
要するに全単射とその逆写像を簡単に実現する方法はないか、と?

Dictionaryから派生してBijectionクラスを作って、そこに逆写像を取得する
メソッドでも書くとか。
626デフォルトの名無しさん:2008/09/20(土) 19:35:21
"1"なら5、"a"なら1、5なら"1" という感じです
って、""をつけてるのはstring型なのか?

それにその説明だと無理だろ。
エンコードされた結果が
5,1,1,9,7,2
ですべてint型というのであれば、
デコードは
"1aaig4"

"155ig4"
にしかならないだろ
627597:2008/09/20(土) 19:51:19
>>625

Bijection<string,int>

string Bijection.Keys[1]
string Bijection.GetKey(1)

こんな感じで値を渡すことでキーを取得できるようにする感じですか?

>>626
偶数番目の要素と6以上はアルファベットに変換など
いくつかの置換ルールがあるんです

なので、奇数、偶数番目用にそれぞれ別のDictionaryクラスを使用している感じです
628597:2008/09/20(土) 19:55:25
今書いてて気づいたけど、可逆的な暗号化って感じになるのかな?
実際そういうことをしたいわけではないんですが
やろうとしていることは同じかもしれません
629デフォルトの名無しさん:2008/09/20(土) 19:59:36
仕様を全て書き出すわけにはいかず
説明出来るような法則が無く、
そして一定のルーチン化が無理なら
char分解とループとIF文でゴリ押ししかないんじゃない?
630デフォルトの名無しさん:2008/09/20(土) 20:14:25
>>627
なんで情報をいちいち後出しにするんだ?
答えるほうの立場なってみろよ。
631597:2008/09/20(土) 20:17:07
最終的な出力を出すまでにはIF文などを使います
その事前処理として、ユーザーからの入力文字列を置換テーブルで数値に変換します
その後、いくつかのルール(IF文などで処理)と置換テーブルを使って数値を文字列に変換します

このすべての処理をIF無しでしたいのじゃなくて、置換テーブルを使う部分だけを効率化したいなと思っていまして

その置換の部分が

1,2,3,4,5
5,4,3,2,1
a,b,c,d,e

という風に上下の要素で相互変換していく感じです
632デフォルトの名無しさん:2008/09/20(土) 20:20:36
サポートセンターのお姉さんを泣かせるタイプだなw
633デフォルトの名無しさん:2008/09/20(土) 20:20:54
もう要素数256の配列を2つ作ればいいじゃん
634デフォルトの名無しさん:2008/09/20(土) 20:23:18
>>631
やりたい事とルールを説明できるようになってからもう一回来い
635597:2008/09/20(土) 20:30:34
ルール部分はコードがかなり長いし、説明しきれないんです

やりたいのは始めに言ったように単純にデータを変換したいだけなんです

1,2,3,4,5   1,2,3,4,5
5,4,3,2,1   a,b,c,d,e

↑をそれぞれ上下で相互変換したいだけなんです

ちょっと、これ以上どう説明していいかよくわからないので
ともかく、ご助言していただいた方々ありがとうございました
636デフォルトの名無しさん:2008/09/20(土) 20:36:36
もう二度と来るなよ
637デフォルトの名無しさん:2008/09/20(土) 20:40:16
>>635
基本は>>598の方法でいいと思う。
数値ではなく文字コードを配列のインデックスとして使うだけでいい。
”1”とか数字の場合も、あくまで’1’の文字コードで
考えればいいだけ。
638デフォルトの名無しさん:2008/09/20(土) 20:40:26
public int[] エンコ(string str)
{
List<int> result = new List<int>();
for (int i = 0; i < str.Length; i++){
if(i % 2 == 0){
result.Add(偶数用エンコテーブル[str[i]]);
}
else{
result.Add(奇数用エンコテーブル[str[i]]);
}
}
return result.ToArray();
}

public string デコ(int[] arr){
StringBuilder result = new StringBuilder();
for (int i = 0; i < arr.Length; i++){
if (i % 2 == 0){
result.Append(偶数用デコテーブル[arr[i]]);
}
else{
result.Append(奇数用デコテーブル[arr[i]]);
}
}
return result.ToString();
}
639597:2008/09/20(土) 20:56:03
>>637
おお、文字コードchar型をインデックスにできるとは知りませんでした
これはいいですね。

>>638
おおお、まさにやりたかったのはこれです
非常に簡潔ですねぇ。私のはもっと無駄に長いです
640デフォルトの名無しさん:2008/09/20(土) 21:07:12
>>639
さんざん引っ掻き回してふざけた奴
641デフォルトの名無しさん:2008/09/20(土) 21:18:04
If数個よりDictionary引く方が効率いいと思ってるおめでたいやつ

642デフォルトの名無しさん:2008/09/20(土) 21:19:59
>>641
誰に向かって言ってるのか知らんが、数個ですまなくなったらどうするつもりか。
ついでに言えば"If"ってそれVBな。
643デフォルトの名無しさん:2008/09/20(土) 21:22:33
というか、>>597>>638みたいな泥臭いことしたくないから
ここで質問してたのではなかたのか?

こんなN88BASICみたいなコードで納得していいのかよw
644デフォルトの名無しさん:2008/09/20(土) 21:26:19
>>643
ココじゃ無理って思ったから流したんじゃないの?
どうせまた後出し出てくるんだから放置でいいよ。
645597:2008/09/20(土) 21:31:27
データの変換を大量にそして早く処理しなければならないため
できる限り条件式や演算を使わないで置換で済ませたいのです

ルール部分の条件式は数個どころではないです。

>>643
まあはっきり言えばそうなんですけどね
forも展開して使っているぐらいなんで
>>638のようなやり方は実はありえないです
646デフォルトの名無しさん:2008/09/20(土) 21:42:29
釣りじゃないなら死ね。氏ねじゃなくて死ね。
647デフォルトの名無しさん:2008/09/20(土) 21:54:47
639 597 sage 2008/09/20(土) 20:56:03
>>638
おおお、まさにやりたかったのはこれです
非常に簡潔ですねぇ。私のはもっと無駄に長いです

645 597 sage 2008/09/20(土) 21:31:27
>>638のようなやり方は実はありえないです
648デフォルトの名無しさん:2008/09/20(土) 22:04:56
俺が高効率になるように処理見直してやるから、関連コードと仕様を貼れ
649638:2008/09/20(土) 22:05:48
なんか俺もハズカシイからヤメテヨー
650デフォルトの名無しさん:2008/09/20(土) 22:10:32
>>646
まあそれは言いすぎ。
確かに人をおちょくってるかのような要領を得ない質問の仕方はマジで反省して欲しいが、
たぶん説明能力が足りないだけで本人は真面目に質問してるつもりなんでしょ。

しかし、あんまり実用性がある処理内容とも思えないから
どこぞの学校の宿題なのかな。

>>649
いやあんたのエスパー能力はすごいよマジで。
それに泥臭いなんてケチをつけたけど、エンコードテーブルからデコードテーブルを
取得するメソッドをプラスすれば、ひょっとするとこれでいいのかもしれないと思いなおした。
651デフォルトの名無しさん:2008/09/20(土) 22:29:32
値をスワップしているだけだから、エンコとデコを二つ用意するのは無駄だな
652デフォルトの名無しさん:2008/09/20(土) 22:41:25
エンコード関数は単写なの?
653デフォルトの名無しさん:2008/09/20(土) 22:44:01
質問です。ふたつのテキストを比較して一致する行だけを抜き出したいと考えています。

keyword.txt
メラミン
事故米
汚染米
暴動
死刑

index.txt
/national/update/0920/OSK200809200056.html メラミン混入の恐れ、丸大が5商品自主回収
/international/update/0920/TKY200809200170.html パキスタン新大統領、米の越境攻撃を批判 施政方針演説
/international/update/0920/TKY200809200168.html 中国政府、チベット・新疆で宗教抑圧 米報告書で批判
/national/update/0920/NGY200809200008.html カビ米混入のオムレツ、愛知459校で 県教委調査

のようなふたつのテキストファイルがあるとき、keyword.txtに合致する行のみをindex.txtから抜き出すには、どのようにしたらよいでしょう?

654デフォルトの名無しさん:2008/09/20(土) 22:44:49
大まかな手順は、
(0)ダウンロード
(1)keyword.txtを読み込む。
(2)配列にして、一致するかどうか見る。
でよいと思います。(0)はできていて、index.txtができています。
(1)と(2)はどのようにしたらよいでしょう? (0)のforのなかに(1)を入れ子にするのかなと思うのですが…。

(0)ダウンロード
string anchor = "<a href=\"(?<url>.*?)\".*?>(?<text>.*?)</a>";
WebClient wc = new WebClient();
string asahi = ("http://www.asahi.com");
wc.Encoding = Encoding.GetEncoding("EUC-JP");
string html = wc.DownloadString(asahi);
wc.Dispose();

Regex re = new Regex(anchor, RegexOptions.IgnoreCase | RegexOptions.Singleline);

for (Match m = re.Match(html); m.Success; m = m.NextMatch())
{
string url = m.Groups["url"].Value;
string text = m.Groups["text"].Value;
Console.WriteLine(url + "\t" text);
}
655デフォルトの名無しさん:2008/09/20(土) 22:45:08
配列でマッピングする以外にいったいどんな方法を期待してたんだ…
そこまで速度重視かつ個数が多いならそれ以外選択肢はないだろうに。
って文字コードを元にテーブル化するという発想自体がなかっただけか…
656デフォルトの名無しさん:2008/09/20(土) 22:45:45
(1)keyword.txtを読み込む。
string keywords = File.ReadAllText("keyword.txt",Encoding.GetEncoding("Shift_JIS"));
string[] lines = keywords.Split('\n');
int lineNumber = 0;
foreach (string line in lines)
{
if (line.Contains(":"))
{
Console.WriteLine(line);
lineNumber++;
}
}
657デフォルトの名無しさん:2008/09/20(土) 22:46:32
(2)配列にして、一致するかどうか見る。
for (Match m = re.Match(html); m.Success; m = m.NextMatch())
{
string url = m.Groups["url"].Value;
string text = m.Groups["text"].Value;
string keywords = File.ReadAllText("keyword.txt",Encoding.GetEncoding("Shift_JIS"));
string[] lines = keywords.Split('\n');
int lineNumber = 0;

foreach (string line in lines)
{
if (text.Contains(line))
{
Console.WriteLine(url + "\t" text);
lineNumber++;
}
}
}

でオーケー?
658デフォルトの名無しさん:2008/09/20(土) 22:49:13
>>655
あ、質問は、ふたつの配列を総当たりで比較する方法をどうコードに書くか、ということです。
659デフォルトの名無しさん:2008/09/20(土) 22:50:30
すまんのう、>>655は別人宛なのだわ…
660デフォルトの名無しさん:2008/09/20(土) 22:55:50
grep -f keyword.txt index.txt
661デフォルトの名無しさん:2008/09/20(土) 22:58:40
>>659
そうでしたか…。すごい反応が速いなと思ったのでした。早とちり。すみません。
>>660
そうです。まさにそれをC#でやりたいのです。
662デフォルトの名無しさん:2008/09/20(土) 23:05:15
grepのソース読んで移植すればいいじゃんか
663デフォルトの名無しさん:2008/09/20(土) 23:43:29
キーワードの一覧からTrie木をつくればいいんじゃね
664デフォルトの名無しさん:2008/09/21(日) 00:28:13
ヒントありがとうございます。
>>662
さっそく
http://www.codeproject.com/KB/cs/wingrep.aspx
をダウンロードしてみましたが歯が立たず…。
>>663
Trie木? 「C# Trie木」「C# トライ木」ではソースが見当たらず…。
665デフォルトの名無しさん:2008/09/21(日) 00:44:50
static void Main(string[] args)
{
//keyword.txt読み込み
string lines = File.ReadAllText("keyword.txt", Encoding.GetEncoding("Shift_JIS"));
string[] keywords = lines.Split('\n');
//index.txt
lines = File.ReadAllText("index.txt", Encoding.GetEncoding("Shift_JIS"));
string[] index = lines.Split('\n');

foreach (string article in index)
{
foreach(string kw in keywords)
{
if (article.Contains(kw))
{
Console.WriteLine(article);
}
}
}
}

>ふたつの配列を総当たりで比較する方法
こんな感じになるんじゃ無かろうか?
666デフォルトの名無しさん:2008/09/21(日) 01:04:05
>>665
ありがとうございます。
早速試したのですが、コンパイルして実行したところ、ぜんぶの行が出力されてしまいます。
単に
type index.txt
とやっているのとおなじ状況です。
if(article.Contains(kw))
という条件が無視されている感じです。
なぜでしょう…?
667デフォルトの名無しさん:2008/09/21(日) 01:05:47
コンソールアプリケーションなんですが、
Console.WriteLineでShiftJISで日本語を出力したいのですがどうのようにしたらいいのでしょうか?
668デフォルトの名無しさん:2008/09/21(日) 01:11:03
StreamWriter writer = new StreamWriter("test.txt" , false , System.Text.Encoding.GetEncoding("Shift_JIS"));

ではどうでしょう。
669デフォルトの名無しさん:2008/09/21(日) 01:13:46
改行文字が\r\nとかのファイルならlines.Split('\n');じゃだめかもわからんです
670デフォルトの名無しさん:2008/09/21(日) 01:22:27
なんでReadAllLines使わんの?
671デフォルトの名無しさん:2008/09/21(日) 01:27:20
そのメソッドを知らなかったからさ!!
672デフォルトの名無しさん:2008/09/21(日) 01:31:50
string lines = File.ReadAllText("keyword.txt", Encoding.GetEncoding("Shift_JIS"));
lines = lines.Replace("\r\n","\n");
string[] keywords = lines.Split('\n');
//index.txt
string indexes = File.ReadAllText("index.txt", Encoding.GetEncoding("Shift_JIS"));
indexes = indexes.Replace("\r\n", "\n");
string[] index = indexes.Split('\n');

foreach (string article in index)
{
foreach(string kw in keywords)
{
if (article.Contains(kw))
{
Console.WriteLine(article);
}
としても状況は変わらず。
673デフォルトの名無しさん:2008/09/21(日) 01:53:08
考えられる原因はkeywordsのなかに空文字が混入してるか
実は本当に全部一致してましたとかか
if (article.Contains(kw));みたいになってるとかかな
Splitはちょっとあれするとすぐ空文字が混入みたなのでStringSplitOptions.RemoveEmptyEntriesを第2引数にするといいみたいです
まあでも教えてもらった↓でいいと思う
string[] keywords = File.ReadAllLines("keyword.txt", Encoding.GetEncoding("Shift_JIS"));
string[] index = File.ReadAllLines("index.txt", Encoding.GetEncoding("Shift_JIS"));
674デフォルトの名無しさん:2008/09/21(日) 02:28:04
とりあえずLINQで

var keys = File.ReadAllLines("keyword.txt");
var lines = File.ReadAllLines("index.txt");
var q = from line in lines
     where keys.Any(key => line.Contains(key))
     select line;
foreach(var s in q) Console.WriteLine(s);

メソッド形式だと

var q = lines.Where(line => keys.Any(key => line.Contains(key)));
675デフォルトの名無しさん:2008/09/21(日) 03:07:32
>>674
TextFileReader使えば、事前に文字列に全て読み込まなくても
直接LINQできるし、indexの方をキーにしてjoin...intoすれば
自動的にいずれかのキーが存在する文字列が得られると思うが如何?
676デフォルトの名無しさん:2008/09/21(日) 03:54:51
join〜intoはいいんだが、onに何を指定するつもり?
俺は思いつかなかったというか、無理と判断して>>674になったんだが
一応、ContainsはString::Containsだということにも留意

メソッドの方使って、String::Contains相当のIEqualityComparer<T>を実装する方法もあるけど、
手間がかかるし、IEqualityComparer<T>の意味的にも微妙

あと、TextFileReaderはMSDNに載ってないみたいだけど何者?
677デフォルトの名無しさん:2008/09/21(日) 06:56:21
おはようございます!
>>669>>673
その後、改行コードの可能性を考えていくつか試してみました。
ifの判定も変えてみたのですが、うまくいかず…。ただ、下記のコードにしたところ、ヒットした行は2回表示され、ヒットしなかった行は1回表示しているので、区切りはうまくいっている、ということまではわかりました。AllLinesについては別途。

//keyword.txt読み込み
string lines = File.ReadAllText("keyword.txt", Encoding.GetEncoding("Shift_JIS"));
lines = lines.Replace("\r\n","\n");
lines = lines.Replace("\r", "\n");
string[] keywords = lines.Split('\n');
//index.txt(略)

foreach (string article in index) {
foreach(string kw in keywords) {
if (!(article.Contains(kw))){}
else{Console.WriteLine(article); }}}
678デフォルトの名無しさん:2008/09/21(日) 06:56:59
>>670、671、673
ReadAllLines知りませんでした!
上記のコードを、次のように書き換えたところ、ばっちり動きました。大感謝! 条件のところも元に戻してオーケーでした。

//keyword.txt読み込み
string[] keywords = File.ReadAllLines("keyword.txt",Encoding.GetEncoding("Shift_JIS"));
//index.txt
string[] index = File.ReadAllLines("index.txt", Encoding.GetEncoding("Shift_JIS"));

foreach (string article in index) {
foreach(string kw in keywords) {
if (article.Contains(kw)){Console.WriteLine(article); }
}}

ところで、Readですが、ReadAllLinesとすると、いきなり1行ごとに配列にできるんですね!
すごくシンプルです。これから使おうと思います。
ReadAllLinesとReadAllTextの違いは、ReadAllLinesでは行単位になるという理解でいいんでしょうか? 逆にいうと、ReadAllLinesで、文章全体をstringとして扱うときにはどうするんですか? そういう必要があるかどうかはさておき。
679デフォルトの名無しさん:2008/09/21(日) 06:57:35
>>674
var keys = File.ReadAllLines("keyword.txt", Encoding.GetEncoding("Shift_JIS"));
var lines = File.ReadAllLines("index.txt", Encoding.GetEncoding("Shift_JIS"));
var q = from line in lines
where keys.Any(key => line.Contains(key))
select line;
foreach(var s in q) Console.WriteLine(s);

var q = lines.Where(line => keys.Any(key => line.Contains(key)));
どちらも動きました!
varを見るのも触れるのも初めてですが、勉強になります。ありがとうございます。

>>675、676
高度すぎてわかんなかったです。…。

以上、とりいそぎふたつのファイルの比較はできるようになったので、次は先の(ひとつはじつはファイルでなくてインターネット上からダウンロードしたデータ)プログラムに組み込んでみます。
みなさまありがとうございました。
680デフォルトの名無しさん:2008/09/21(日) 07:15:16
charを配列のインデックスとする場合
無駄な配列の要素ができるよね?
char[] c=new char[128];

a,b,c,d,e,fと1,2,3,4,5しか使わないなら無駄だよね?
やっぱりdictionaryのほうがいいか
681デフォルトの名無しさん:2008/09/21(日) 08:20:18
速度とメモリのトレードオフ。

まあ単なる例ではあるけど、128程度どうでもいい。
だいたいDictrionaryだって無駄はあるわけだ、オーバーヘッドも多い。
682デフォルトの名無しさん:2008/09/21(日) 10:26:39
>>680-681
エスパー同士の会話にしか見えないぞ
683デフォルトの名無しさん:2008/09/21(日) 10:53:48
テキストデータをhtml形式に変換して保存するプログラムを作っています
htmlデータを保存するHtml LibraryクラスはGet,Setメソッドでデータを入出庫できます

この場合、一旦テキストからhtmlに変換するクラスを中継してからhtmlデータをHtml Libraryクラスに送るのがいいのか
それともHtml Libraryクラスに直接テキストを送って、Html Libraryクラス内で変換処理をするのがいいのか

どっちが自然な考えなんでしょうか?
684デフォルトの名無しさん:2008/09/21(日) 11:59:42
>>682
それをエスパーと呼ぶなら、エスパーだらけになる。

>>683
DOM とかにならって、innerText、innerHtml 等のプロパティを完備してみるとか。
685デフォルトの名無しさん:2008/09/21(日) 12:03:38
>>644
エスパーっていうのは嫌味で言っているのであって、
読解不能な文章を書く奴も○○だがそれを妄想で補って回答する奴も同じぐらい○○だ、
という意味なんだが。
686デフォルトの名無しさん:2008/09/21(日) 12:29:54
馬鹿の負け惜しみですねわかります
687デフォルトの名無しさん:2008/09/21(日) 12:49:00
680はそこまで読解不能でもないかな
昨日もそんな話題だった気がするし
688デフォルトの名無しさん:2008/09/21(日) 13:04:24
どうみても普通の会話にしか見えない。
いきなり出た話でもないし。

どの辺がエスパーなわけ?
689デフォルトの名無しさん:2008/09/21(日) 16:05:09
>>680
> charを配列のインデックスとする場合
> 無駄な配列の要素ができるよね?
> char[] c=new char[128];
>
> a,b,c,d,e,fと1,2,3,4,5しか使わないなら無駄だよね?

128程度ならどうでもいいと思うけど、それでも気になるなら
数字とアルファベットの分だけ確保すればいい。

char[] c = new char[75]{ 'a', '0', 'z', ... };
char ch = なんか有効なキャラ;
c[ch - '0'];

とかそんな感じ。
多少の無駄(数字、アルファベット以外の記号の分)はあるけどね。
690デフォルトの名無しさん:2008/09/21(日) 16:15:04
使用メモリを削ることについ血道をあげてしまう気持ちは分かるが、
人生にはもっと大事なことがたくさんあるはずだ。
691デフォルトの名無しさん:2008/09/21(日) 16:44:50
>>689
char[] c = new char[75]{ 'a', '0', 'z', ... };

const byte a=1;
const byte b=1;

これでいいんじゃないの?
692デフォルトの名無しさん:2008/09/21(日) 17:03:50
>>691
>>615のように、文字列から変換する必要があるらしいので
それだとダメらしいんですよ。

詳しくは>>597からの流れを読んでもらえればわかるかと…
693デフォルトの名無しさん:2008/09/21(日) 17:21:37
int[] numA=new int[]{1,2,3,4,5}
int[] numD=new int[]{5,4,3,2,1}
char[] ch=new char[]{'a','b','c','d','e'}

じゃあこれでいんじゃね?
694デフォルトの名無しさん:2008/09/21(日) 17:29:58
C#スレでcharをアスキー扱いしてる点に誰も突っ込まないのはなぜ?
695デフォルトの名無しさん:2008/09/21(日) 17:31:49
まともな人は誰も読んでないから

質問者いなくなったのにいつまで引っ張るつもりだよ
696デフォルトの名無しさん:2008/09/21(日) 17:38:20
だって
'c' - '0'
ができるもん
697デフォルトの名無しさん:2008/09/21(日) 17:58:08
[C#, Delphi] いい加減 C# 信者がうざい件
http://tobysoft.net/diary/archives/2008/09/believers_of_c-sharp_are_uzai.html
---
C# 信者の特徴

 Hejlsberg は神であり神による実装である C# こそが唯一絶対の言語である
 他の言語(特に DelphiとJava)は存在自体が悪である
 他の言語を使っているのは C# を知らないからである
 C# を布教することでそのような不幸な子羊たちを救済することこそが正義である

どこかの世界宗教のようですね。
698デフォルトの名無しさん:2008/09/21(日) 17:58:37
コピペ君って馬鹿だな、まで読んだ。
699デフォルトの名無しさん:2008/09/21(日) 19:47:16
単に元の話がその範疇ぽいからだろ。
700デフォルトの名無しさん:2008/09/21(日) 20:01:45
もう一度お聞きしますが、
コンソールアプリケーションなんですが、
Console.WriteLineでShiftJISで日本語を出力したいのですがどうのようにしたらいいのでしょうか?
701デフォルトの名無しさん:2008/09/21(日) 20:04:24
エンコーディングを指定できるコンストラクタでStreamWriterオブジェクトを作ってConsole.SetOut
702700:2008/09/21(日) 22:31:20
エンコーディングについて全くの無知で前提が間違ってるかもしれませんが、
ファイル出力する必要はなくコンソールに出力するだけなのですが、
もしかしてエンコーディングは関係ないですか?
703デフォルトの名無しさん:2008/09/21(日) 22:41:38
普通は意識する必要は無いな
704700:2008/09/21(日) 22:52:03
初歩的な質問に答えてくれてどうもありがとうございました
705デフォルトの名無しさん:2008/09/21(日) 22:52:37
俺は心配だから必ずEncoding.Defaultはつけるな
706デフォルトの名無しさん:2008/09/21(日) 22:56:30
>>702
言ってる意味がよくわかないんだけど。
その表示したいと思ってるソースは何なのさ?
707700:2008/09/21(日) 23:28:18
>>706
プログラムから直です。
単純に
Console.WriteLine("あいうえお");
のような出力です。
708700:2008/09/21(日) 23:32:34
あ、ただし、出力された文字列を他のプロセスから読み取る予定です。
その場合のエンコーディングを心配したのですが…
709デフォルトの名無しさん:2008/09/21(日) 23:32:52
>>707
それは C# 側が気にすることではない。
使ってるコンソール側の問題。
710デフォルトの名無しさん:2008/09/21(日) 23:38:34
>>707
別におちょくるつもりはないんだけど、
本当にわかってなさそうだね。
711700:2008/09/21(日) 23:40:19
>>709
そうですか。
出力さえ正しければ問題ないんですね。
ありがとうございました。
712デフォルトの名無しさん:2008/09/21(日) 23:43:51
コマンドプロンプトのプロパティを見てみたら、現在のコードページはSJISって書いてあったけど、これって他のエンコーディングに変更できるの?
713デフォルトの名無しさん:2008/09/21(日) 23:58:52
質問です。
キーワードリストになければ引数をキーワードを追加、あればなにもしない、という処理を書きたいです。

keyword.txt
メタミドホス
メラミン
事故米

コマンドラインで、
addkeyword.exe 汚染米
とかすると、keyword.txtに「汚染米」を追加します。

addkeyword.exe メラミン
の場合には、すでにあるのでなにもしないで終了します。
現在コードは下記の通り。

static void Main(string[] args){
//keyword.txt読み込み
string[] keywords = File.ReadAllLines("keyword.txt",Encoding.GetEncoding("Shift_JIS"));
StreamWriter writer = new StreamWriter("keyword.txt" , true , System.Text.Encoding.Default);//出力ファイル名。trueで追記。

foreach(string kw in keywords) {
if (kw.Contains(args[0])){}
else{writer.WriteLine(args[0]);}
}
writer.Close();//閉じる

実行すると、ない場合、キーワードは追加されますが、行数分(3行分なので3回)追加されます。
ある場合にもキーワードがあった行数分追加されてます。
どこをどう間違えているのでしょう? ご助言お願いします。
714デフォルトの名無しさん:2008/09/22(月) 00:01:15
break
715デフォルトの名無しさん:2008/09/22(月) 00:06:08
行数分とか3行分とかどういう意味なんだろう。
さっぱりわからん。
716デフォルトの名無しさん:2008/09/22(月) 00:14:58
もっとロジカルに考えようよ。
若干仕様があいまいだけど、ループもいらんだろ。
717デフォルトの名無しさん:2008/09/22(月) 00:19:03
最初に全部読んで List なり HashSet なりにしておいて、
最後にもう一度書き出す方がいいわね。
718デフォルトの名無しさん:2008/09/22(月) 00:21:03
>>713
ああ、やっと意味がわかったw
なんかプログラミングあまり向いてない人みたいだな君って。

それのマズいところは、本来、

・ファイルが入力された文字列Sに一致する行を含まなかったら
 ファイルの末尾にSを追記する。

でなければならないはずなのに、

・ファイルの全ての行を列挙して、各行が入力された文字列Sと一致しないごとに
 ファイルの末尾にSを追記する。

になってるところ。

まず、「ファイルが文字列に一致する行を持つかどうか」の判断を行う部分を
別のメソッドに切り出してみたら?
719デフォルトの名無しさん:2008/09/22(月) 00:48:55
みなさま早速ありがとうございます。
>>716>>718
ご推察の通り、あまりプログラムは得意でなく、ロジカルに考えるところがまだうまくいかずにおります。…。
向いているかどうかは微妙ですが、まあ楽しんでるのはたしかです。
>>715
3行分というのは、つまり
汚染米
汚染米
汚染米
とかが追加されてしまうということです。
720デフォルトの名無しさん:2008/09/22(月) 00:49:56
>>718
・ファイルが入力された文字列Sに一致する行を含まなかったらファイルの末尾にSを追記する。
そうそう、そうしたいのです。正確にいうと
・ファイルが入力された文字列Sに一致する文字列を含む行を含まなかったらファイルの末尾にSを追記する。
になるんでしょうか。

・ファイルの全ての行を列挙して、各行が入力された文字列Sと一致しないごとに
ファイルの末尾にSを追記する。
になってるところ。
はい。行数分増えているのでそうかな〜と思ってます。

「ファイルが文字列に一致する行を持つかどうか」の判断を行う部分を別のメソッドに切り出してみたら?
…。え〜と。

static void Main(string[] args){
//keyword.txt読み込み
string[] keywords = File.ReadAllLines("keyword.txt",Encoding.GetEncoding("Shift_JIS"));
StreamWriter writer = new StreamWriter("keyword.txt" , true , System.Text.Encoding.Default);//出力ファイル名。trueで追記。

if (keywords.Contains(args[0])){}
else{writer.WriteLine(args[0]);}
writer.Close();//閉じる

でいいんでしょうか。
721デフォルトの名無しさん:2008/09/22(月) 01:26:52
>・ファイルが入力された文字列Sに一致する文字列を含む行を含まなかったらファイルの末尾にSを追記する。
あいうえお
が存在するときに
あいう
は追加しない、でいいのかい?
722デフォルトの名無しさん:2008/09/22(月) 01:30:08
if (File.ReadAllText(file, encoding).IndexOf(key) != -1) File.AppendAllText(file, key + "\r\n");
723デフォルトの名無しさん:2008/09/22(月) 01:31:46
あ、最後エンコード指定忘れた。
if (File.ReadAllText(file, encoding).IndexOf(key) != -1) File.AppendAllText(file, key + "\r\n", encoding);
724デフォルトの名無しさん:2008/09/22(月) 01:36:52
bool notIn = true;
foreach (string kw in keywords)
{
if (kw.Contains(args[0]))
{
notIn = false;
break;
}
}
if(notIn)
{
keywords.add(args[0]);
}
foreach (string kw in keywords)
{
writer.WriteLine(args[0]);
}
泥臭く書くならこんな感じの処理かな
keywordsの中にargが入ってるか調べる場所と
出力したい場所を別に置けばわかりやすいかと
725デフォルトの名無しさん:2008/09/22(月) 01:38:00
あ、条件逆だた…
if (File.ReadAllText(file, encoding).IndexOf(key) == -1) File.AppendAllText(file, key + "\r\n", encoding);
726デフォルトの名無しさん:2008/09/22(月) 01:39:40
あ、Containsあったんだた……
if (!File.ReadAllText(file, encoding).Contains(key)) File.AppendAllText(file, key + "\r\n", encoding);
もうやめとこう
727デフォルトの名無しさん:2008/09/22(月) 01:49:10
>>712
chcpコマンド
728デフォルトの名無しさん:2008/09/22(月) 01:50:30
if (keywords.All(kw => !kw.Contains(args[0])))
{
keywords.Add(args[0]);
}
foreach (string kw in keywords)
{
writer.WriteLine(args[0]);
}
ただフラグなんて使いたくねーので俺だったらたぶんこんな感じに書くかなぁ
729デフォルトの名無しさん:2008/09/22(月) 11:07:24
プログラムを作る場合コンソールアプリを作ってからGUI化したほうがいいようなので
コンソールアプリから出力した文字を、別のプロジェクトのフォームアプリから読み取ってテキストボックスに出力する
簡単なアプリを作ってテストしようとしているのですが

コンソールアプリから文字列を出力することはできたのですが
それをフォームアプリから読み込む方法がわかりません
どうすればいいんでしょうか?
730デフォルトの名無しさん:2008/09/22(月) 11:22:55
>プログラムを作る場合コンソールアプリを作ってからGUI化したほうがいいようなので
誰がそんなこと言った
コンソール版とGUI版を両方用意したいなら処理を別のdllに移して共用するようにしたほうがいい

一応質問に答えるなら、フォームアプリからコンソールアプリをProcessクラスで起動したら
Process.StandardOutputでコンソールアプリからの出力を取得できる
731デフォルトの名無しさん:2008/09/22(月) 11:23:31
UNIXかぶれか?
732デフォルトの名無しさん:2008/09/22(月) 11:24:17
お返事遅くなりました。
みなさん、い〜方だな。感謝します。
3カ月できなかった「なかったら追記する」が動きました!
>>721
あり? 「汚染米が流通」があるときに「汚染米」は追加する必要あります。むむむ。ちっともロジカルじゃないですね、わたし…。
>>722、723、725、726
すごい…。1行で書けちゃうんですか。
しばし感動。
File.AppendAllTextってすごいですね。
Streamで書かなくてもいいんだ。これ、closeもいらないんですよね? すごい。
>>724
boolは、このあいだ勉強したばかりなので、復習になります。notがtrueなので頭がすこし混乱気味…。じっくり拝読します。
>>728
おお。これもシンプルですね。
keywords.Add(args[0]);
で引数をkeywordsのストリングに追加できるんですね。

ありがとうございました。
733デフォルトの名無しさん:2008/09/22(月) 11:29:02
>>729
> プログラムを作る場合コンソールアプリを作ってからGUI化したほうがいいようなので
別にそんなことは無いぞ
出力先を自由に変更できるのはいい設計と言われるが

> コンソールアプリから出力した文字を、別のプロジェクトのフォームアプリから読み取ってテキストボックスに出力する
そういう設計もあるけど多分「出力先を自由に変更」って意味では方法論が違う

で、
Process使ってるならStartInfoのRedirectStandardOutputをtrueにしてStart
でStandardOutputを読む
734デフォルトの名無しさん:2008/09/22(月) 12:01:56
>>730
>>733
ありがとうございます。子プロセスとして起動してやらないとだめなんですね。
コンソールアプリのプロジェクトにフォームアプリのプロジェクトを追加してやっているだけじゃだめだったんですね

今まで簡単なフォームアプリを作っていたのですが、後でGUIのインターフェースを変更しようと思うとすると
(例えばリストビューをデータグリッドビューに変更)、プログラム全体を書き直すような羽目になってしまい
結局一から作り直したほうが早いような状況になりました
ユーザーに対しての表示部分と、データを扱う部分を分離して設計できるような思考を身に着けるために
そういうものを作ろうと思いました
こういう場合>>730さんが言われたようにDLLというものでやったほうがいいのかな?
慣れるために作ろうと思っているのはオセロで、コンソールアプリからのコマンドに従って、GUI側の石を操作する感じです
735デフォルトの名無しさん:2008/09/22(月) 12:06:47
>>734
そんなことしたら、CUIプログラムの出力を解析する手間が増えるだろうが。
CUI側のソースが手に入らないような状況で取る手法であって、
一から自分で作るならそんなめんどくさいことをする必要はない。
736デフォルトの名無しさん:2008/09/22(月) 12:22:40
System.Windows.FormsのクラスやConsoleを一切使わないオセロクラスを作ればいいと思う
737デフォルトの名無しさん:2008/09/22(月) 12:27:22
まずはコアになるオセロクラスの入出力の仕様をきっちり決めちまえ。
話はそれからだ。
738デフォルトの名無しさん:2008/09/22(月) 12:43:59
>>735
どこのだれかが作ったコンソールアプリに対して
フォアグラウンドのGUIを作る場合ってことでしょうか?
そういうのもいづれ作ってみたいと思っています

>>736
既にオセロクラスにconsoleが侵食してました・・・
これを分離しないと結局同じことなんですね・・
オブジェクト指向って難しい

>>737
わかりました。そうします。
739デフォルトの名無しさん:2008/09/22(月) 12:49:27
特定の入出力の方法に依存しないオセロクラスが作れたら、
コンソールだろうとWinFormsだろうとWebだろうとWPFだろうと同じだからね
740729:2008/09/22(月) 13:03:06
>>739
それを作ろうとしていたはずなんだけど・・・
こういうのはやっぱり数こなして慣れるしかないのかな

>>737さんのアドバイスでもう一度設計し直してみました

@フォームクラス(StandardOutput)

Aコンソールの入出力をするクラス(WriteLine,ReadLine)

Bオセロクラスで扱うデータ形式に変換するクラス(OutPut)インターフェース?

Cオセロクラス

今はA、B、Cが同じクラスに混在している状態です。
入出力の仕様、及びデータ構造を見直します
741デフォルトの名無しさん:2008/09/22(月) 13:08:30
別にそんなに難しく考えなくてもさ
class オセロ {
public void 駒を置く(場所);
public 白か黒 現在の盤面(場所);
}
でいいじゃない
742729:2008/09/22(月) 13:30:10
>>741
始めに入出力の仕様を決めてそういう風にしていればよかったんだけど、
プログラム内のどのクラスからもConsole.WriteLineなどが扱えるために
オセロコンソール(オセロフォーム)との共通の命令コマンドをあらゆるクラスから別々に送っている状態なのです
石を置くコマンドをコンソールに出力するメソッドなどが複数のクラスに存在するということです
>>736-737さんのアドバイスがなかったら、また1から作り直さなければなりませんでした・・・
コマンドの入出力は入出力クラス内の、OUTPUTメソッドしか使わないようにしようと思います
743デフォルトの名無しさん:2008/09/22(月) 21:49:01
1 CUIでバッチ処理もGUIで簡単操作もできるようにしたい
2 そうだ、DLLに実際の処理を書いて ホストアプリには単なるUIとして振舞うように作れば良いんだ
3 DLLだけじゃテストできないから、専用のテストアプリを書いて…
4 ふぅ出来た。あれ?やたらプロジェクトが乱立してる
5 う〜んやっぱりここの部分はこうした方が良いかな?
4 でも早く全体を通して動かしたいから先にUIを完成させよう!
5 出来た〜えへへ。自分が天才に慣れたみたいで気持いいおw
6 やっぱりあそこ変えたいなぁ
7 っハ!でもここを弄ると、これに依存している別の所を弄らないと…ああどうしよう面倒くさい!
8 僕ってやっぱりだめな子なんだ ショボーン
9 仕方ないから、位置から作り直そう。その方が気持がすっきり(ry
の繰返しなんですが 効率がものすごく悪いです。
いったい何を勉強すれば改善されるんだろう?
744デフォルトの名無しさん:2008/09/22(月) 21:51:18
コマンドライン引数によってはコンソールアプリとしても動作させられるGUIアプリにすればいいよ
745デフォルトの名無しさん:2008/09/22(月) 21:58:36
あらゆるメソッドを(object(params object[]))の形のデリゲートに割り当てたいんだけど
やっぱりDynamicMethodで仲介するしかない?
746745:2008/09/22(月) 22:00:58
あ、呼び出すときにはリフレクションを使わないようにするのが目的なので
MethodInfo.Invokeは無しでお願いします
747デフォルトの名無しさん:2008/09/22(月) 23:01:17
>>743
ユニットテストやるようにしたら?
748デフォルトの名無しさん:2008/09/23(火) 00:51:07
単体テストってなんですか?
749デフォルトの名無しさん:2008/09/23(火) 08:14:14
>>743
MVC
750デフォルトの名無しさん:2008/09/23(火) 12:57:25
指定したドライブ以下のみ選択可能(これ以外は表示されない)
なフォルダブラウズダイアログの実装を行いたいです。
「FolderBrowserDialog」では任意のドライブの指定はできない
ので、win32の「SHBrowseForFolder」を使用するべきことまではわかったのですが
実際の実装の仕方がわかりません。
エロくてハゲてるひと教えてください。
751デフォルトの名無しさん:2008/09/23(火) 13:04:57
ハゲてないので教えられないな。
752デフォルトの名無しさん:2008/09/23(火) 13:14:35
ぢゃあエロくてチンこでかい人おねがいします。
753デフォルトの名無しさん:2008/09/23(火) 13:15:18
残念ながらおいらでかくないんだ
754750:2008/09/23(火) 13:19:05
ぢゃあ、そちんでも仕方がないです
755デフォルトの名無しさん:2008/09/23(火) 13:42:08
人様捕まえて粗チンとはなんだ
756750:2008/09/23(火) 13:44:57
やっぱそちんぢゃないです。ごめんなさい。
757750:2008/09/23(火) 14:53:52
ホントごめんなさい。
あやまるので誰か教えてください。
758デフォルトの名無しさん:2008/09/23(火) 14:57:54
SHBrowseForFolderの実装サンプル自体はちょっと調べりゃすぐ見つかるだろ
.NET 1.0時代はそうするしかなかったんだし

その上で分からんことがあったらそのとき具体的に質問に来い
759デフォルトの名無しさん:2008/09/23(火) 15:39:20
しょっちゅう操作中に固まると思ってたら
自動修復機能というのがあるんだな
5分って・・・短すぎだろ
760750:2008/09/23(火) 15:42:08
http://uchukamen.com/Programming1/DirPicker/
http://bbs.wankuma.com/index.cgi?mode=al2&namber=20048&KLOG=39
http://hpcgi1.nifty.com/MADIA/VBBBS2/wwwlng.cgi?print+200409/04090010.txt
http://uchukamen.com/Programming1/DirPicker/

とか見てがんばったんですけど、ようするに、これって楽して実装する方法はないってことで、一番最後のリンクみたいな感じで実装するってことでしょうか?
761デフォルトの名無しさん:2008/09/23(火) 15:52:11
>>759
でもクラッシュしたときのことを考えると
5分でも長すぎるくらいだぜ?
762デフォルトの名無しさん:2008/09/23(火) 18:46:26
フィールドとプロパティの記述場所やフィールドの変数名の頭文字は小文字でとか
クラスは○○のように記述の仕方などが載っているところはないでしょうか?

それぞれの意味やクラスの例などは初心者サイトにいくつかあるけれども
もうすこし掘り下げて知りたいんだけど
763デフォルトの名無しさん:2008/09/23(火) 18:56:37
MSDNにある。「デザインのガイドライン」かなんかで検索してくれ
764デフォルトの名無しさん:2008/09/23(火) 18:57:16
>>762
http://msdn.microsoft.com/ja-jp/library/ms229042(VS.80).aspx
公式にはこれだけ
あと、MSから出てるツールでFxCopやStyleCopも試してみるといいかも
765デフォルトの名無しさん:2008/09/23(火) 18:59:50
質問です。
Visual Studio 2008 Express EditionのC#で開発したWindows用のソフト(CUI/GUI)をLinuxに移植するにはどういうツールを用意すればよいでしょう?
766デフォルトの名無しさん:2008/09/23(火) 19:01:16
MONO
767デフォルトの名無しさん:2008/09/23(火) 19:11:15
ありがとさんです。
さらにそのMonoなんですが、いま手元にLinuxがないので、Windows上でLinux用のソフトを開発する場合、Paltformは、Windowsを選択してよいんでしょうか?
それとも、Linuxを用意してから、Linux用のMonoで開発したほうがよいですか?
768デフォルトの名無しさん:2008/09/23(火) 19:17:59
いやどうしても.NETでないといけない理由がないならJavaにしとけ
769デフォルトの名無しさん:2008/09/23(火) 19:23:53
どうしても.NETでなければならない積極的な理由なんて皆無です。たまたまC#を使ってみたら、案外よさそうだという感じ。初心者でようやくC#がわかりはじめてきたところなので、いますぐにJavaに移行するのは、ちょっとむずかしいなと。
再コンパイルだけで動くのなら、Linuxでも動かしてみるか、という程度のモチベーションです。
770デフォルトの名無しさん:2008/09/23(火) 19:45:31
PlatformはAnyCPU、再コンパイルの必要はない。
P/InvokeやWindows特有の機能は使えない。使えても動作が異なることがある。
C#3.0の機能はSystem.Core系は使用できるが基本的に.NET2.0の範囲で使う。
Monoスレは一応あるからつっこんだ内容ならそちらへ。
771デフォルトの名無しさん:2008/09/23(火) 19:56:23
thanks >>770
772デフォルトの名無しさん:2008/09/23(火) 20:15:13
>>769
「初心者でようやくわかりはじめてきたところ」ならJavaでもたいして変わらん。
メソッド名の1文字目を小文字にするか大文字にするか、とか、
usingの代わりにimportとか、get/set 記法がない、とか、
そういう単純なところだけで、難しい違いは一切ない。
773デフォルトの名無しさん:2008/09/23(火) 21:04:36
仮想関数の思想が異なるしGUIならイベント通知のモデルも全く異なるけどな

あえて些細な差しか上げないのはどうかと
774デフォルトの名無しさん:2008/09/23(火) 21:08:29
×上
○挙
775デフォルトの名無しさん:2008/09/23(火) 21:12:32
ジェネリックはけっこう難しくて大きな違いだね
発狂しそうになる
776デフォルトの名無しさん:2008/09/24(水) 14:21:36
"_"(アンダーバー)から始まる識別子は使っていいの?
C/C++では処理系に予約されてるから避けてたけど、C#ではどうなんですか?
777デフォルトの名無しさん:2008/09/24(水) 14:27:50
別にそういう制限はない。
C#では予約語も頭に@つければ識別子にできるから。
778776:2008/09/24(水) 14:32:17
thx
779デフォルトの名無しさん:2008/09/24(水) 15:01:09
アンダースコアをフィールドにつけたり、仮引数につけたり、いろんなスタイルがあるな。
780デフォルトの名無しさん:2008/09/24(水) 15:11:00
仮引数につけるのはガイドライン違反だけどね
781デフォルトの名無しさん:2008/09/24(水) 18:53:18
質問です。
なにかアクションしたときに、クリップボードのテキストを表示するには、
if (Clipboard.ContainsText())
{
Console.WriteLine(Clipboard.GetText());
}
で可能なのですが、クリップボードの内容がリフレッシュされるたびに、これを実行するには、どのようにしたらよいでしょう?
782デフォルトの名無しさん:2008/09/24(水) 18:59:09
>>772
そりゃおっしゃるとおりです。たしかにあんまり違いはないかな〜とは思います。英語とフランス語くらい? もっと似ているのかな。よくわかりませんけども。

いずれもうちょっとしたら、C++とかにも手を広げる予定なので、Javaにもちょっと興味はあるかな。

ただ、環境を構築するのがすこしめんどうで、Eclipse(けっこうでかい)を入れる準備をこれから半年〜1年くらいかけて、ぼちぼちしてみるかな〜という感じです。一度入れたことがあるのだけど、なじみにくくて即効で消しちゃったのです。
いまのところC#のほうが、とっつきやすいです。使い始めて3カ月で、やっとおもしろくなってきたところですし。ここで教えてもらったりしているのがけっこう効いてます。

水泳でいうと、やっとクロールの息継ぎのコツがわかってきたところなので、背泳ぎはもうちょっとおいてからでいいかなと。
いや、水泳だと道具がおなじなんだけど、スキーになれてきたところでスノーボードに変えるくらいの転換がいるのかなという感じで、道具をそろえるのにちょっと躊躇気味という感じですか。
ま、焦らず。
雑談でした。
783デフォルトの名無しさん:2008/09/24(水) 19:11:27
>>781
変更のたびとなると監視が必要で、これは.NET標準ライブラリではサポートされていない。
Win32API呼び出しの必要が出てくる。「クリップボード監視 C#」で調べればサンプルとか出てくる。
それがイヤならタイマで定期的にClipboard.GetTextだな。
784デフォルトの名無しさん:2008/09/24(水) 19:17:27
>>782
クロールで息継ぎができるようになるのはかなり終盤じゃね?

LiveCDでも仮想環境を使ってもいいから
Mono使ってみたら?Monoで作ったプログラムがWindows上で動くのは感動できるが
Windows上で作ったプログラムがLinux上で動かないのは悲しいものだぜw

正直にWineを使った方が確実な気がしないでもない
785デフォルトの名無しさん:2008/09/24(水) 20:20:36
なるほど。LiveCDという手もありますね。
ぶっちゃけハードディスクが20GBなんです。VisualC#の開発環境がこんなに大きいとは思わなかった。MonoのVMware仮想ファイルをダウンロードしようとして、でかくてめげたという…。ま、もうちょっと。
それはそれとして、最近マシンって安いですよね〜。物色中です。
786デフォルトの名無しさん:2008/09/24(水) 20:33:30
FolderBrowserDialogのダイアログじゃない版って無いの?
エクスプローラみたいなUIを作りたいんだけど見当たりませんorz

TreeViewで自作するもんなのかな
787デフォルトの名無しさん:2008/09/24(水) 20:55:18
>>783
ありがとうございました。
監視のソースを見たのですが、ちょっと手が出なかったので、タイマーを使ってみました。
200msで、充分オーケーでした。
788デフォルトの名無しさん:2008/09/24(水) 21:13:51
監視はもともとクリップボードビューアのための機能だしね
789デフォルトの名無しさん:2008/09/24(水) 21:42:28
質問です。
Windowsデスクトップサーチとか、IMEのパネルって、タスクバーの上に載せるというか格納しておけますが、C#で作ったプログラムをおなじように、タスクバーの上に載せるにはどうしたらいいんでしょう? タスクトレイに格納するのではなくて、タスクバーの上に載せたいです。
790デフォルトの名無しさん:2008/09/24(水) 22:07:52
デスクバンドのことか。
COM をいくつか実装しなくちゃならんようなので初心者むきじゃないと思われ
しかも1プロセス1CLR の制限を考えるとC++とATL行きですな普通に
791デフォルトの名無しさん:2008/09/25(木) 00:51:33
デスクバンドっていうんですか。
なるほど。
次の質問は、「IEのツールバーへの登録」でしたが、これもおなじくらいむずかしいんですよね?
792デフォルトの名無しさん:2008/09/25(木) 01:14:06
>>791
IE8が出るまで待った方が
793デフォルトの名無しさん:2008/09/25(木) 02:48:09
>>791
同じくらいというか全く同じです
794デフォルトの名無しさん:2008/09/25(木) 03:19:48
>>791
Band Objects使うとか?
795デフォルトの名無しさん:2008/09/25(木) 05:00:43
>>789
どんな使い方を想定しているかわからないけど、単にタスクバーの上にのせるだけならわざわざデスクバンドにしなくても、オブジェクトをタスクバーの上に配置するんじゃだめなの?
796デフォルトの名無しさん:2008/09/25(木) 08:38:57
>>795
それなんか意味あるんか。タスクバーの動きと同期しないと邪魔なだけ
だと思うんだが
797デフォルトの名無しさん:2008/09/25(木) 11:15:19
質問です。
ふたつのFormプログラムを統合したいと思います。
\programA\programA\programA.cs
\programB\programB\programB.cs
とあるときに、統合の手順は、
(1)programA.csのデザインで、Bのformを呼び出すボタンを追加する。
(2)ソリューションエクスプローラ-参照の追加でprogramB.csのソースを追加する。
だけでよいのですか?
デザインやその他を統合する手順がいまいちよくわからない。
これだとprogramBのデザイン(form)が、読み込まれないような気もするし…。
参照すると、programB.csは\programA\programA\フォルダにコピーされるんでしょうか?

このように統合した場合、programBを単独でバージョンアップすると、その成果は、programAから呼び出す場合にも反映されるのでしょうか? 反映したいです。programBは単独でも使いたいので。
798デフォルトの名無しさん:2008/09/25(木) 11:25:38
>>793
あ、やっぱりおなじでしたか…。thanks
>>792
えっ、IE8だとなんか変わるんですか!?(プチ期待感)
>>795
Widgetというか時計みたいな1行表示系を考えてます。
>>796
たしかに同期しないと邪魔なだけな気もします。
でも、タスクバーの上に配置できるだけでもよいかもしれないので、試してみたいです。方法を教えてください。
799デフォルトの名無しさん:2008/09/25(木) 11:26:13
>>797
クラスライブラリにする
800デフォルトの名無しさん:2008/09/25(木) 11:49:57
>>797
早速ありがとうございます。
入門書をめくったところ、クラスラスブラリというのは、dllを作ることで、そのためには、あらたにprogramBとおなじ機能をもつprogramCを新しいプロジェクトとして作ると書いてありました。
それだと、programBを単独でバージョンアップしたとき、programCにはその成果を反映できないのではないかと思うのですが、そういうものですか?
そのくらいなら、そっくり単にprogramA.csのなかにprogramB.csをコピーしたほうが簡単?
ぜんぜんはずしてたらすみません。

ちなみに、いまここ。
・ソリューションエクスプローラ-参照の追加でprogramB.csのexeを追加する。ソースは見つからなかった。
・programA.csに次のように追記。

else if (textBox1.Text.Contains("条件")) { Process.Start(progarmB.programB(textBox1.Text)); }

これで、programAのtextBox1に、ある条件の文字列が入った場合、programBをその条件を引数として起動できるかな(起動したい)と思ったら、ビルドしたところ、
エラー 1 'progarmB.programB' は '型' ですが、指定されたコンテキストでは有効ではありません
と怒られてます。
801デフォルトの名無しさん:2008/09/25(木) 11:53:38
違う違う
programBを新しく作ったクラスライブラリプロジェクトに移して、
もともとprogramBを使ってたプロジェクトとprogramAがあるプロジェクトの両方から
そのプロジェクトを参照するの
802デフォルトの名無しさん:2008/09/25(木) 12:09:44
なるほど!
ぜんぜん違ってました…。

ちなみにその場合、最終的にできるprogramAは、exeとdllをいっしょにまとめてexeにすることはできるんですか?
あと、programBを新しくクラスライブラリCに移行するときには、formのGUIとかはBからある程度はコピーするとはいえ、プロパティの設定とかは、0から作るしかないんですよね?
さらにさらに、もし将来的にプログラムを統合することがわかっていれば、最初からクラスライブラリで作ったと思うのですが、そうでない場合に、formからクラスライブラリに簡単に移行する手順というのはなんかありませんか。
803デフォルトの名無しさん:2008/09/25(木) 12:36:05
>>802
1つのソリューションに複数のプロジェクトを作ればいいんじゃないの

それと設計がまずだめなんだと思う。formはあくまでユーザーインターフェースなだけ
クリックイベントを発生させたり、文字列や画像を表示するだけ
プログラムの核の部分は別に作る

核の部分だけ統合するなら、クラスライブラリで作成か単純に追加すればいいだけ
フォームを統合したいなら追加すればいいだけ

単にユーザーによって任意にどれかのフォーム呼び出したいってだけなら
多態性でやればいい

if(textBox1.text="A")
Form formBase=new formA();
if(textBox1.text="B")
Form formBase=new formB();
804デフォルトの名無しさん:2008/09/25(木) 12:42:22
>>797
デザイン部分も見えないようになっているだけで、ソースに書かれている
統合ってのがどういう意味で使っているのかわからないが

(2)ソリューションエクスプローラ-参照の追加でprogramB.csのソースを追加する。

とするだけで、普通にプログラムソースもフォームデザインも読み込まれる
あとは、programAにForm formB=new Form();とすれば普通に使えるはず
この場合ネームスペースは書き換えないといけない
805デフォルトの名無しさん:2008/09/25(木) 12:47:19
programBのデザイン部分のソースコードはprogramB.Designer.cs
programB.resxっていうのもあれば一緒に持っていく
ソースコード自体をいろんなプロジェクトから参照することもできるけど
かえって繁雑になるからお勧めしない
exeやdllの結合はILMergeというツールがある
806デフォルトの名無しさん:2008/09/25(木) 12:47:47
>>803
なるほどね〜。少し前にもformとプログラムをわける話がありましたけど、やっとすこしわかってきました。

ひとつのソリューションに複数のプロジェクトを作ることができるんですか!
知らなかった。なるほど…。

設計がだめですね。読んでいてずばずば当たっているので笑いがこみ上げてきました。こりゃたしかに作り直したほうが早そうだと。

任意にどれかのフォーム呼び出したいだけ(かどうかはまだわからないのですが)、とりあえず「多態性」というのはわたしでもすんなりできそう。

「ひとつのソリューションに複数のプロジェクトを作る」のと、「任意のフォームを呼び出す」のとは、違うんですよね?

あと、formからプログラムをわけるという話ですが、
private void button_Click(object sender, EventArgs e)
{
//具体的な処理
}
のようになっているときに、具体的な処理だけを別ファイルにする、という理解でよいのですか?
807デフォルトの名無しさん:2008/09/25(木) 12:53:54
>>806
そういうこと
formの機能を一切使わないクラスBを作る
808デフォルトの名無しさん:2008/09/25(木) 13:05:26
フォーム上のコントロールに対する処理と
そうでない処理をすべてform1なんかに記述すると
いずれ頭がついていかなくなる。
常にプログラム全体を見渡しながらプログラムしないといけないからね
できるだけ簡素な自己完結しているクラスをたくさん作っていく
一見面倒な感じだけどソースが肥大化していって問題が起きた場合
そのクラスだけを修正すればいいだけだから楽
またある機能を別のプロジェクトで必要になった場合
そのクラスだけを追加したり頻繁に使用するならDLLにすればいい

よく使うフォームのコントロールもユーザーコントロールを使って
複数のコントロールをまとめてしまえばわざわざformを持ってくる必要もない
809デフォルトの名無しさん:2008/09/25(木) 13:12:00
>>807
なるほど。もう一歩具体的に進めます。

form1.cs
private void button_Click(object sender, EventArgs e)
{
//具体的な処理
}

から、
program1.cs

//具体的な処理

としたとき、
(1)form1.cs
private void button_Click(object sender, EventArgs e)
{
ここにはなにを書けばいいの?
}

(2)program1.cs
ここに、usingとかは必要?

private void button_Click(object sender, EventArgs e)に変わるメソッド名(?)も必要?

//具体的な処理

ここは}で終わる必要あり?
810デフォルトの名無しさん:2008/09/25(木) 13:17:23
private void button_Click(object sender, EventArgs e)
{
   program1 p1=new program1();
   p1.具体的な処理するメソッド名();
}

(2)は言っている意味がわからない
program1にusing Windows.Formを必要としないようにすればいい
811デフォルトの名無しさん:2008/09/25(木) 13:21:52
っていうか、[フロジェクト]-[項目の追加]でクラスを追加したら、
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace programA
{
class Class1
{
}
}

と書いてくれました。

class Class1
{
//具体的な処理
}
とすればいいんですね。
812デフォルトの名無しさん:2008/09/25(木) 13:33:17
っていうか、まだそんなこと気にするレベルじゃないと思う
813デフォルトの名無しさん:2008/09/25(木) 13:41:59
結局クラスの概念がわかってなかったって感じ?
814デフォルトの名無しさん:2008/09/25(木) 13:49:05
form1.csからClass1.csに、具体的な手順を移動してみました。
form1.cs
private void button_Click(object sender, EventArgs e)
{
program1 p1 = new Class1();
p1.execute1();
}

Class1.cs
class Class1
{
execute1(object sender, EventArgs e){
//具体的な処理
}
}

エラー 1 メソッドは戻り値の型を持たなければなりません。
あと、具体的な手順のなかに、textBox1.Textがあり、これはFormを必要としていると思うのでなんとなく気になる。
private void execute1(object sender, EventArgs e){
としてみたら、予想はいやなほうに的中し、「現在のコンテキスト内に存在しません」のエラーが大量に発生…。

>>812>>813
です。そんなレベルでなく、クラスの概念がわかってないです…。入門書読んでも、ちっともぴんと来ないんです…。
815デフォルトの名無しさん:2008/09/25(木) 13:54:36
"VisualC#入門"系じゃなくて言語寄りの入門書を一通り終えた方がいいよ
816デフォルトの名無しさん:2008/09/25(木) 14:01:22
>>814

>あと、具体的な手順のなかに、textBox1.Textがあり、これはFormを必要としていると思うのでなんとなく気になる。
だったらform1に書くしかない

>execute1(object sender, EventArgs e){
これだと、formに処理を書くのと変わらない
クラスを作る意味がない

初心者サイトをいくつか巡回して基礎から学んだほうが早いと思う
この間違いを訂正することはできるけど、基礎がわかってないと
同じ間違いを何度もするはず。
C#は簡単にプログラムできるから、概念なんて知らなくても書きなぐっていけるけどね
でも、それを学ばなければ今の状態からステップアップできないと思う
いい機会だから勉強したほうがいいと思う
817デフォルトの名無しさん:2008/09/25(木) 14:14:09
ここらを一通りまず読んで概念を理解したほうがいい
http://www.clks.jp/csg/cs003.html
http://ufcpp.net/study/csharp/st_basis.html

その後フォームのコントロールなどの実践的な処理関係はここ
http://dobon.net/vb/dotnet/index.html
http://www.labasp.net/CsharpNote/index.html

全部読むのに1日もかからないし、明日には新しい自分に出会えるお^^
818デフォルトの名無しさん:2008/09/25(木) 15:28:49
自分も「C#.NET逆引き大全-500の極意」とか見ながら
パズルを組み合わせるようなプログラムから入ったから
クラス化とか意識してなくて苦労してるなぁ…。
まぁそれでも組める所が良いのかもしれないけど。趣味なら。
819デフォルトの名無しさん:2008/09/25(木) 15:41:25
まぁ初めは組んで組んで組みまくって慣れる事が大事だし
最初ならそれでいいんじゃん?
820デフォルトの名無しさん:2008/09/25(木) 17:06:30
>>815-817
いい機会だと思って勉強してみたのですが、新しい自分には出会えなかったみたい…。そう簡単じゃないか…。
>>818
なるほど。わたしも趣味なので…。いや、上達したくないわけではなく。
『C#.NET逆引き大全』は、2008対応版を待ってるんですけど、でもまあ、おんなじだなぁ。パズルを組み合わせるみたいにやってます…。sigh...
>>819
そうなんですよね〜。
そう思って、かれこれ15〜6本は作ったというかぱくったというか、まあかたちにはして動かしているところです。
動いてはいるけど、まだなんにもわかってないなぁとは常々感じてて。
821デフォルトの名無しさん:2008/09/25(木) 17:56:52
Classは当面あきらめました。

今回は単純にFormAのプロジェクトにFormBを追加する方向で。
FormAのプロジェクトで[プロジェクト]-[既存項目の追加]で、FormB.csとFormB.cs(デザイン)を追加しました。

FormBを呼び出すために、

if(textBox1.Text.Contains("B")){ Form.formB.Show();}

としてみました。
これでコンパイルすると、
エラー 1 'System.Windows・Forms.Form' に 'formB' の定義がありません。
と出ます。どのようにしたものでしょう?
822デフォルトの名無しさん:2008/09/25(木) 17:58:36
FormBのインスタンスはどうやって作った?
823デフォルトの名無しさん:2008/09/25(木) 17:59:58
一旦GUIから離れてコンソールアプリで勉強したら?
824デフォルトの名無しさん:2008/09/25(木) 18:11:53
>>817 を読んで理解できないって、プログラミング自体に難が無いか?
825デフォルトの名無しさん:2008/09/25(木) 18:13:06
>>822
インスタンスは作ってないです。たぶん。
どこにどう作るのかがわかってない。

やっぱりクラスに再入門!?
826デフォルトの名無しさん:2008/09/25(木) 18:18:00
>Form.formB.Show();
おかしいだろ。
少なくとも、
FormB formB = new FormB();
formB.Show();
くらいやってみそ
827デフォルトの名無しさん:2008/09/25(木) 19:09:37
それはやってみたです。うまくいってなかったのはタイプミスしてました。
久々にコンパイルできたので、テストしました。
が、formBは開かず、単に空のフォームが開きました。

ま、それはそれとして、使ってみたら、クリップボードからタイマーで文字をテキストボックスに貼る、というのがこのままでは使えないことがわかって、こちらのほうが緊急の対策項目に挙がってしまいました。
え〜と、現状だと、テキストボックスがひとつあり、タイマーで200ミリ秒ごとにクリップボードからテキストを貼っています。
これだと、なるほど、テキストボックスにキーボードから文字を入力しても、次々クリップボードから文字を貼ってしまうので、キーボードからの文字が消えてしまうわけです。
クリップボードを監視すればこの問題は回避できると思いますが、安易にタイマーで貼ったのがまずかった。
やっぱりクリップボードの監視でしょうか。
828デフォルトの名無しさん:2008/09/25(木) 19:32:17
>>827
少し頭を使って考えろ。
単純に貼り付けるからいけないのであって
条件付きで貼り付け(選択位置に挿入する)ればいいんだろ?

で、その条件は「前回から変更があったとき」とか「キータイプしてからmsec後」とかいろいろあるだろ
後者はスレッド使って時間待ちするならいいけど、Timerの中でずーっとsleepするわけにはいかないので
ちょっと工夫が必要だな

>が、formBは開かず、単に空のフォームが開きました。
本当にFormBを生成して表示させたのか?Formを生成してないか?
829デフォルトの名無しさん:2008/09/25(木) 20:16:23
>>825
勉強したって嘘だろ・・・
>>817のサイトを読んでわからないわけがない
騙し騙しやったところで、概念理解してないといつまで経っても上達しない
逆に概念さえ理解すれば、>>827みたいな質問なんか出てこないはず
君が今やろうとしていること、覚えようとしていることははっきり言って覚える必要のないもの。
ライブラリの知識なんてその都度MSDN使えばいいだけ

四則演算できないのに微分積分やるようなもんだ
830デフォルトの名無しさん:2008/09/25(木) 20:33:52
もういいからどっかのアップローダに全部うpしてよ

なんか作りたいものがあって始めたんだろうと推測するけど
それはとりあえず置いといてしばらく純粋に言語の基礎を勉強した方がいいよ
何に使うかは考えずに頭の体操だと思って取り組めば案外面白いもんだよ
831デフォルトの名無しさん:2008/09/25(木) 20:39:55
出来ない人って最初から全部をやろうとしたり
なぜか応用から入ろうとしたりするよね。
チュートリアル見ながら簡単な初歩とかやりたがらない。
実際に動かしてやってみる→試行錯誤がベストなのにね。
832デフォルトの名無しさん:2008/09/25(木) 21:04:29
やりたいこと(別フォームを開くとか)でプロジェクトを分けて勉強しろ。
833デフォルトの名無しさん:2008/09/25(木) 21:14:15
>>829
>ライブラリの知識なんてその都度MSDN使えばいいだけ
言語仕様を時々忘れるのはありですか?
eventとか使わないとすぐ忘れちゃう orz

とりあえず http://ufcpp.net/study/csharp/index.html は必読だよな
834デフォルトの名無しさん:2008/09/25(木) 21:35:28
イベントは一回自分でadd/remove実装してみたら忘れないと思う
835デフォルトの名無しさん:2008/09/25(木) 21:49:30
デリゲートだろ
836デフォルトの名無しさん:2008/09/25(木) 21:49:33
>>833
可能です。
以上。
↓次の方どうぞ
837デフォルトの名無しさん:2008/09/25(木) 22:37:16
知恵熱状態です。
>>828
条件つきで貼りつけはすぐに考えたのですが、その条件を書けるとは限らないので、それならもしcsファイルを参照できるようになれば(これも困難ではありますが、すでにcsファイルが動く状態なら条件を思いついて実現するよりはマシか)、そのほうが可能性があるかなと。
で、考えた条件は、
・キーボードの入力があったら貼りつけを止める(でもキーボードの入力が終わって貼りつけたら入力した文字列が消えるのでこれは最悪。
入力に手間どっている場合の終了判定をどうするかとか、それはenterを押したときでいいか)enterを押したら、その文字列をクリップボードに入れるとか(でもその場合クリップボードに入れておいた文字/図形が消える)。
・貼りつけてある文字が前回と同じときは貼らない。
違うときには入力しているということだから、貼らない。あり? いつ貼るんだ?
Formのほうは再確認します。

>>829
…。うそはついてないですよ。
「見た」「読んだ」「勉強した」「理解した」「使える」というようにレベルがあるとすると、「見た」「読んだ」このあたり「勉強した」「理解した」「使える」なのかな。
やっぱり、言葉がわからないんだと思うのです。
クラスとかステートメントとかデリゲートとか。ひとつひとつの言葉を充分理解するのに時間がかかる上に、それの説明に別の言葉を使われると、書いてある文章が素通りする感じ。
デリゲートとかきくと、なんかワニみたいなものが頭のなかに浮かんでくるです。
なにをわかっていないかをわかるために、自分で単語帳は作っているのですが、なかなか遅々として。

838デフォルトの名無しさん:2008/09/25(木) 22:38:19
>>830、831
基礎をやりたくないわけではなくて、うまくヒットする基礎例題がないような気がしてます。ドリルみたいなのがあるといいのになと思うのです。
やっぱり、やりたいことはあって、ちょっとずつでもできているのがモチベーションになってきているので。これでも、最初のときよりはだいぶマシになってきたと(どこがといわれそうですね…)。

>>832
たとえば、「別フォームを開く」というドリルがあって、例題をいくつかこなすみたいな方法なら、基礎でも楽しそうなんだけど。
勉強します。

>>833、817も。
参考文献は感謝します。

幸い、実装したことを検索しながら使っているので、一度できれば(応用できるところまでは到達していないものの)、二度目はなんとかなることもあるかもな、というところまではきたみたいです。
見捨てずによろしくです。今日は知恵熱なので、これで…。
839デフォルトの名無しさん:2008/09/25(木) 22:43:07
そんな駄文を打つ時間があったら、ほかにやる事があるだろ
840デフォルトの名無しさん:2008/09/25(木) 22:43:13
>>833のサイトは例題あるよ
「別フォームを開く」は基礎じゃない
841デフォルトの名無しさん:2008/09/25(木) 23:00:47
>>837
消えるのが嫌なら、変数に代入するとか、さっき誰かが言ったみたいに挿入してテキストボックスに保存するとか
とにかく言っていることが抽象的過ぎて訳わかんね
いったいどういう機能を持ったものを作りたいんだ?
てか、わざわざ作らないでフリーソフトで探せばいいんじゃね?

>>838
お題は自分で見つけるんだよ。多分想像力がないんだろうな
モノづくりをする上で致命的
オブジェクト指向とは何ですか?
これについて説明しているところは山ほどある
わかるまで片っ端から読んでいけ
これが基礎
フォームの扱いやらクリップボードなんかはそれの応用、言語云々の問題じゃない

こういう奴みるとやっぱりC言語から勉強しろと言いたくなるよな
842デフォルトの名無しさん:2008/09/25(木) 23:07:43
static void func()
{
 int i = 1;

 ThreadPool.QueueUserWorkItem((param) =>
 {
  Thread.Sleep(1000);
  Console.WriteLine(i.ToString());
  ++i;
 });
}

ラムダ式からローカル変数のiに読み書きアクセスしてるんだけど
funcから抜けてiがスコープ外になった後スレッドが実行されるとメモリ破壊が起きますか?
843デフォルトの名無しさん:2008/09/25(木) 23:09:47
確かに基礎概念を学ぶ課程はつまらないかもな
フロッピーすらないカセットテープだったころは
画面に"Hello""1 2 3 4 5"なんて表示するだけで感動したもんだけど
GUIや3Dゲームが当たり前の時代にそんなことしたって楽しいわけない
まあ、その内わかってくるだろうし、今は好きなようにすればいいんじゃないかな
844デフォルトの名無しさん:2008/09/25(木) 23:18:25
>>842
ならない
845デフォルトの名無しさん:2008/09/25(木) 23:19:14
>>842
iは自動生成されたクラスのインスタンスフィールドになるんだよ
846デフォルトの名無しさん:2008/09/25(木) 23:20:42
>>842
ラムダ式で作ったデリゲートが生きてる限りはその i も生きてる。
847842:2008/09/25(木) 23:45:08
>>844-846
ありがとうございます
ラムダ式から参照されるローカル変数は、スタックに積まれるのではなくnewされるような感じなのかな。
848デフォルトの名無しさん:2008/09/25(木) 23:46:25
マウスの滑りが悪いので
カーソルを慣性で動かせるようにしてみたが
静止摩擦->動摩擦 の一番疲れるタイミングで操作しなければならない
拷問ツールの何者でもなかった なんか工夫すればどうにかなるかな?Joypadから操作してみるか…
849デフォルトの名無しさん:2008/09/25(木) 23:48:06
>>847
845 の言う通り。
匿名のクラスが作られて、
i は実はローカル変数じゃなくてその匿名クラスのメンバ変数になる。
ラムダ式を書いた時点で、その匿名クラスのインスタンスが new される。
デリゲートが生きてる限り、そのインスタンスが生きてる。
850デフォルトの名無しさん:2008/09/25(木) 23:48:53
>>848
はやってないものはやっぱ何かしら使いにくいんだって。
851デフォルトの名無しさん:2008/09/25(木) 23:50:46
>>847
func抜ける直前に、

Threed.Sleep(3000);
Console.WriteLine("[func] " + i);

とかしてみろ。なお、結果については自分で考察のこと
ildasmで生成されたIL確認するのもあり

852デフォルトの名無しさん:2008/09/26(金) 07:32:57
クラス化していくと、どんどんインスタンスの生成が
増えていくのですが、そういうもんでしょうか?
staticなクラスとどう分ければいいかイマイチ分からないです。
853デフォルトの名無しさん:2008/09/26(金) 08:25:04
>>852
そりゃ、それが OOP だし。
854デフォルトの名無しさん:2008/09/26(金) 11:21:52
質問です。
if (textBox1.Text.Contains("条件"))
のとき、みかんかりんごのように条件が複数ある場合には、どう書けばいいですか?
855デフォルトの名無しさん:2008/09/26(金) 11:26:31
複数回比べては。
条件によるけど、正規表現使うほうがいい場合もある。
856デフォルトの名無しさん:2008/09/26(金) 12:23:35
正規表現でお願いします。
857デフォルトの名無しさん:2008/09/26(金) 12:26:23
まずは自分でやってみろよ
858デフォルトの名無しさん:2008/09/26(金) 12:38:38
>>854
だから昨日言っただろ
基礎から学べって
学ぶ気のない奴に教える気はない
859デフォルトの名無しさん:2008/09/26(金) 13:19:15
勉強してますし勉強する気もあります。たとえば、
・Formの起動ができるようになりました。
・なぜFormを起動できないかの原因の糸口がわかりました。
プロジェクト名と名前空間とFormに微妙な名前の違いがあり、統一すればFormを呼べるだろう、とわかりました。
微妙な違いは、バージョン違いで「2」をつけたことなどで起きています。
・名前の統合はリファクタ-名前の変更でできます。やってみたところ、参照に不具合が生じてコンパイルできなくなりました。
いまはオミットしたほうがよさそう。いずれ全面的に作り直す必要ありのようです。
・そこでFormは統合しないで、Process.Startでexeを起動することに。(起動コマンド,引数)で、引数にtextBox1.Textを指定すればオーケー。
・起動ができるようになったので、あとは条件を指定。羅列すればできる。でもどうせなら正規表現のほうがよさそう。
Regex fruit = new Regex("みかん || りんご || 梨", RegexOptions.Singleline);
else if (textBox1.Text.Contains(fruit))
はだめ。
if (Regex.IsMatch(textBox1.Text, @"[(みかん)(りんご)(梨)]"))
もうまくいかない。
それで教えてですよ。
860デフォルトの名無しさん:2008/09/26(金) 13:28:05
なんで途中経過とかあるのに書かないで、結果だけ求めようとする?
形だけ勉強してても勉強する気がないの?

>羅列すればできる。でもどうせなら

出来ないなら出来る方でやればいいし、
どうしてもやりたいならMSDNに詳しく全て書いてあるよ。
861デフォルトの名無しさん:2008/09/26(金) 13:48:30
まあまあ。
今回、正規表現というキーワードが出てきたんだから、正規表現 C# あたりでググって
気に入ったとこブックマークして今後も使うといいとおもうよ。
ただし、正規表現の場合は正規表現そのものの理解も重要。
今回のは、"みかん|りんご"dana
862デフォルトの名無しさん:2008/09/26(金) 13:57:57
いらんことばっかり勉強してるなw
863デフォルトの名無しさん:2008/09/26(金) 14:01:00
>>862
それは罠か?
864デフォルトの名無しさん:2008/09/26(金) 14:05:05
>>859見る限り、えらい遠回りするつもりだなー、とは思う。
865デフォルトの名無しさん:2008/09/26(金) 14:29:14
>>859
それのどこが基礎なんだよ
基礎を学べと言ってるだろ池沼
あと、Googleの使い方も学べ
866デフォルトの名無しさん:2008/09/26(金) 14:29:57
string[] fruits = {"みかん","りんご","梨"};
if(fruits.Any(f => textBox1.Text.Contains(f)))
{
}
867デフォルトの名無しさん:2008/09/26(金) 16:46:56
配列(例えばbyte[])をコピーや再確保無しで特定サイズに縮める方法はありませんか?
868デフォルトの名無しさん:2008/09/26(金) 17:08:21
ありません
869デフォルトの名無しさん:2008/09/26(金) 17:17:28
IList<T>でラップしてごまかす
870デフォルトの名無しさん:2008/09/26(金) 17:50:47
Array.Resizeはちがうのん?
871デフォルトの名無しさん:2008/09/26(金) 17:55:02
コピーしてるって明記されてる
872デフォルトの名無しさん:2008/09/26(金) 17:55:47
Resizeは領域確保し直してるから再確保無しって条件には合わない
873デフォルトの名無しさん:2008/09/26(金) 20:34:31
クラスインスタンスをメソッドの引数で渡すとき
インスタンスの内容を変更されたくない場合はconstで渡せばおk?
874デフォルトの名無しさん:2008/09/26(金) 20:37:18
そんな機能は無い
コピーして渡すか、設計的に不変クラスにする
875デフォルトの名無しさん:2008/09/26(金) 20:38:40
>>873
C++スレと勘違いしてないか、おk?
876デフォルトの名無しさん:2008/09/26(金) 22:07:27
stringや配列もconstで渡せないの?
877デフォルトの名無しさん:2008/09/26(金) 22:21:53
stringはもともと不変クラス
配列は無理だからReadOnlyList<T>でラップして渡したりする
878デフォルトの名無しさん:2008/09/26(金) 22:37:58
お話のところ申し訳ないですが、いい考えがうかばず、いい実装ができてないので
質問します。

複数のクラス間で、共通に使う変数群を、扱うには、どうするのがエレガントなのでしょうか?
VB6のPublic Typeで宣言された構造体が広いスコープで使われる(グローバルのように)
イメージです。

Strategyパターンなどで、共通に使われるような変数群をいじりながら、戦略をとおして、
その結果を反映したい場合など、共通に使う変数を一旦Contextに渡して、それをいじって
その結果のコピーを渡すなどといった不自然な発想しかおもいついていません><

みなさんどうしてるんでしょうか?
879デフォルトの名無しさん:2008/09/26(金) 22:38:21
意外とめんどくさいのね(´・ω・`)
880デフォルトの名無しさん:2008/09/26(金) 22:50:16
>>878
質問が漠然としすぎ。
ついでに言ってることが全体的に意味不明すぎる。
VBの構造体がどうのとか、Strategeパターンがどうのとかの記述は完全に頓珍漢。

そんなことはどうでもいいからもっと具体的に書かないと。
881デフォルトの名無しさん:2008/09/26(金) 22:55:42
独立したクラス間で共通に使うデータ構造をどう実現するか?
です。
882デフォルトの名無しさん:2008/09/26(金) 23:30:28
だからw
具体的って日本語がわからないのよ。

そもそも「共通に使うデータを実現する」パターンなんてものはない。
というより、君の書きぶりじゃ恐らく単に設計が間違ってるだけ。
どのクラスに属するかはっきりしない(どのクラスにも属さない)データを
持ちたいなんてどこか考え方がオカシイんだろ。
883デフォルトの名無しさん:2008/09/26(金) 23:43:50
>>878
プロパティってことかな?
「C# get set」でググってみては?
884デフォルトの名無しさん:2008/09/26(金) 23:50:49
パターンじゃなくて、みんなどうしてるんかな?とおもいまして。

例えば、自分が直面している例では、

ある命令書の列がある。
List<Order>


命令書にもとづいて処理する実態があり、それが棚や机にちらばっている
List<Rack> List<Desk>
RackやDeskはもちろん子構造もっていますが本質じゃないので、ここでは省略

List<Order>の一連のセットを解析して、棚や机から最適な手順で
指定されたものを加工して、集配してきます。
そのアルゴリズムは、Orderの集合によっていろいろ変わります。

ってときにいちいちRack、Desk状況をContextにわたして処理させているのが
非常に不自然にかんじている状況です。
885デフォルトの名無しさん:2008/09/26(金) 23:50:53
test
886デフォルトの名無しさん:2008/09/26(金) 23:58:39
規制解除されたか

RackやDeskの状況をまとめたクラスをOrderに渡せば処理が行われるようにしたらいいでしょ
887デフォルトの名無しさん:2008/09/27(土) 00:00:33
>886
現状はそうしてるんですが。
そのあと状況の変化したRackやDeskをContextから受け取って
別のクラスで使うという状況で、
RackやDeskがCloneされまくってるのが不自然におもうんです。
888デフォルトの名無しさん:2008/09/27(土) 00:00:50
>>884
Chain of Responsibliityでどうかな
889デフォルトの名無しさん:2008/09/27(土) 00:02:18
あ、ごめんなさいOrderに渡すということでしたか。
Orderは、指令書という概念なので、
それが棚や机の状況をうけとるという考え方は受け入れられません。
890デフォルトの名無しさん:2008/09/27(土) 00:09:04
>>889
変数群ならstructで構造体にして
それを扱うstaticなクラスを作れば
どのクラスからでも共通のデータとして扱えるが
891デフォルトの名無しさん:2008/09/27(土) 00:10:12
なんでCloneしないといけないの?
892デフォルトの名無しさん:2008/09/27(土) 00:11:16
Chain of Responsibility
もちょっと違う気がします。

むしろ、全体を含めたNameSpaceやEnviroment
といったスコープの広めの部分に位置している棚や机
のようなもので、
別Formでは、棚在庫をリアルタイムに表示、編集します。
また別のFormでは、処理のリアルタイムでの状況をTimerで表示
しています。リアルタイムのほうは、QueueにいれたCommand列を
順番に再現しています。

現状では、ある状況のコピーを各Formに渡してしまっています。
893デフォルトの名無しさん:2008/09/27(土) 00:11:32
指令書は仮想メソッドにして指令ごとにクラスを作るわけでしょ
そいつがRackやDeskの状況を受け取らなかったら何も出来ないじゃない
894デフォルトの名無しさん:2008/09/27(土) 00:15:07
みんなエスパーなのか知らんが>>878のいう事がよく理解できるな。

棚や机に散らばっている(だから何が、だよ)と言っておきながら
List<Rack>とか List<Desk> とか、もう俺には何のことだかさっぱりわからん…。
895デフォルトの名無しさん:2008/09/27(土) 00:17:11
>>892
なんでコピーする必要があるの
896デフォルトの名無しさん:2008/09/27(土) 00:18:56
public abstract class Base
{
    public A a;
}
public class SubA:Base
{
    public A a;
}
public class SubB:Base
{
    public A a;
}

public class B
{

    public void Start()
    {
        Base b=new SubA();
        b.a=new A();
    }
}

こうするとBaseクラスのaにインスタンスが代入されるだけで
Subクラスのaはnullのままです
派生クラスにインスタンスを代入するにはどうすればいいでしょうか?
897デフォルトの名無しさん:2008/09/27(土) 00:20:52
private以外のアクセス制限にしてよいフィールドはstatic readonlyのものだけ。
代わりにプロパティを使え。
898デフォルトの名無しさん:2008/09/27(土) 00:23:08
多分だ、
Static変数をもったクラスを作ることで解決する。

が、エレガントじゃないきがするな。
899デフォルトの名無しさん:2008/09/27(土) 00:26:20
>>897-898
そもそも何がしたいのか意味不明な質問によく回答できるな。
900デフォルトの名無しさん:2008/09/27(土) 00:28:41
普通にわかるんだが。。。
同じような経験してるからな。
901デフォルトの名無しさん:2008/09/27(土) 00:34:41
「わかる気がする」のと「分かる」は全然違う。
前者は妄想後者は理解という。

少なくとも>>898が何をしたいのかは意味不明だ。

いや、>>898が「トイレの窓から外に出られない」のは分かるが、
そもそも本当に「トイレの窓から外に出る」という問題設定が正しいのかどうか怪しいだろう。
902デフォルトの名無しさん:2008/09/27(土) 00:50:52
staticなworldクラスみたいなの作ってそのなかにRackやDeskを置いて
渡すんじゃなく読みにいけばいいとか?
まあわかんないですけど。
903896:2008/09/27(土) 02:40:14
>>897
このレスは私向けだったんですね
うまくいきました。ありがとう
904デフォルトの名無しさん:2008/09/27(土) 07:05:58
http://www.aerith.net/design/Singleton-j.html
しんぐるとん でもいけそう、とおもったけどだめぽいね。
905デフォルトの名無しさん:2008/09/27(土) 08:11:19
プログラミング経験ゼロですが、C#に取り組もうと思います。
書店にはいろいろな本がありますがどのような本から読んだらいいのでしょうか?
よろしくお願いします。
906デフォルトの名無しさん:2008/09/27(土) 08:59:06
>>905
最初はウェブで十分。
C# 入門 とかでぐぐるといい。
907デフォルトの名無しさん:2008/09/27(土) 12:22:30
↑みたいな意見はありがちだけど、
俺はあまり信用しない方がいいと思うよ。

C#をはじめることと、C#‘で’プログラミングを始めることは全然別物なわけだが、
後者の立場の人間がweb上の情報だけで学習を進められるとは俺には思えない。
908デフォルトの名無しさん:2008/09/27(土) 12:26:05
ほうほうそれでそれで
909デフォルトの名無しさん:2008/09/27(土) 12:28:34
>>907
じゃあ、プログラミング 入門 でぐぐってみるといい。
C# のページが一番上だから。
910デフォルトの名無しさん:2008/09/27(土) 12:33:23
>>909
書いてる人には悪いけど、俺は初心者がこれで尻込みせずに続けられるとは思えんわ。
911デフォルトの名無しさん:2008/09/27(土) 12:36:30
ほうほうそれでそれで
912デフォルトの名無しさん:2008/09/27(土) 13:00:13
>>861
thanks.(みかん|りんご|なし)で動きました!

>>866
なるほど。stringでいいんですね。すると、このあいだ教わった方法が使えるかも。
if (!File.ReadAllText(fileName, Encoding).Contains(keyword))
ということは、プログラム中に列挙せず、設定ファイルを作って、それを読めばいいという可能性もあるんですね。なるほど。それはスマートかも。
忘却機能。一時的に忘れる機能。忘れている期間はアクセスできない。
913デフォルトの名無しさん:2008/09/27(土) 13:04:01
VBなら中学校みたいな数千円する参考書より親切なサイトがあるけど
C#からプログラミング始めるのにWEBだけってないわ
どんだけ予備知識があるのか知らないけど最初で躓くと思う
914デフォルトの名無しさん:2008/09/27(土) 13:27:40
standardEditionについてくる入門書が一番参考になったわ
915デフォルトの名無しさん:2008/09/27(土) 13:48:21
>>913
言語自体はVBよりC#の方が簡潔でわかりやすいとは思うけどな
歴史が浅い分、資料などがそろってないかもしれない。

>>910
はじめから読もうとすると内容が上長過ぎてだめだな。前置きが長いとも言う。
.netの話とかどうでもいい。
916デフォルトの名無しさん:2008/09/27(土) 14:07:15
他の言語のスレだと入門書の話題は尽きないんだけど
C#のスレだとそういう話題は見かけにくい印象があるな

個人的にはPythonかRubyでもやってプログラミング自体に慣れて
格好いいGUIアプリが作りたくなったらC#でもいいと思う
917デフォルトの名無しさん:2008/09/27(土) 14:58:12
単にC#に関しての経験だけが初心者だと、考える観点も進め方も違うからな。
C#言語規約だとか、実装のされ方だとか、.NETフレームワークのアーキテクチャだとか、
Javaとの差異だとか、そこら辺の初めての部分を解決したいわけだし。
918デフォルトの名無しさん:2008/09/27(土) 18:22:47
>884
俺もいつもその手の問題に悩ませている
BindingSource使うとか
スコープ広めのシングルトンにもたせようと
やってみてたことがあるが、
ReadWriteLockでの同期がめんどうくさい
919デフォルトの名無しさん:2008/09/27(土) 20:20:19
ObservableCollectionのSortedDictionary版がほしい場合は自分で作るしかないの?
920デフォルトの名無しさん:2008/09/27(土) 20:24:19
うん。
921デフォルトの名無しさん:2008/09/27(土) 20:33:47
めんどくさぁ…
922デフォルトの名無しさん:2008/09/27(土) 20:51:56
C#ってもともと移行者のための言語だもん
923デフォルトの名無しさん:2008/09/27(土) 20:57:00
↑デタラメ
924デフォルトの名無しさん:2008/09/27(土) 20:57:28
J#のことも時々でいいから思い出してください
925デフォルトの名無しさん:2008/09/27(土) 23:27:50
926デフォルトの名無しさん:2008/09/28(日) 00:56:01
プログラミングが初めての人って、Visual Studioの使い方でまず躓くと思うから
チュートリアルに従ってIDEの使い方と、初歩的なC#の知識を学ぶ本が役立つかも?
927デフォルトの名無しさん:2008/09/28(日) 01:02:53
式木

これ何て読むんですか?しきき?
928デフォルトの名無しさん:2008/09/28(日) 01:11:47
しきぼく、expression treeの直訳みたい。

ラムダ式に関係する用語ではstatement とexpressionの使い分けがピンとこないな。
929デフォルトの名無しさん:2008/09/28(日) 02:05:04
しきぎだろ
930デフォルトの名無しさん:2008/09/28(日) 02:22:09
どう考えても「しきき」か「しきぎ」。
「ぼく」なんて読みはありえない。
931デフォルトの名無しさん:2008/09/28(日) 03:28:25
重箱読みを避けたい気持ちもわかるけど「しきぎ」かな
二分木を「にぶんぎ」って読んでるし・・・
932デフォルトの名無しさん:2008/09/28(日) 03:32:27
佐々木もささきって読むしな
933デフォルトの名無しさん:2008/09/28(日) 03:41:24
意味わからん
934デフォルトの名無しさん:2008/09/28(日) 11:14:33
この木何の木気になる木
935デフォルトの名無しさん:2008/09/28(日) 12:24:36
気になる木〜
936デフォルトの名無しさん:2008/09/28(日) 12:34:48
どっちの読みが国語学的に正しいか、という話なら「シキボク」のような気もするけど。。
937デフォルトの名無しさん:2008/09/28(日) 12:43:58
漢字の読みがむちゃくちゃな日本語において、
言語的に正しい読みとかあるのか?
938デフォルトの名無しさん:2008/09/28(日) 12:45:41
二分木も赤黒木も数学用語では「き」なのだろうけど口頭でしゃべる場合は「ボク」も使うかな。
「シリツ」の市立や私立を「いちりつ」「わたくしりつ」というのと似てるかも。
939デフォルトの名無しさん:2008/09/28(日) 12:47:27
そんな言い方する奴おらんやろ
940デフォルトの名無しさん:2008/09/28(日) 12:50:22
あえて重箱読みにする理由はないからねえ。
941デフォルトの名無しさん:2008/09/28(日) 13:06:58
>>938
「にぶんぼく」なんて聞いたことねーぞ。どこの方言だよw
942デフォルトの名無しさん:2008/09/28(日) 13:07:20
まあこの場合は「木[キ]」が一つの術語でそこから派生した言葉と考えれば
[〜キ]と読むのが術語的には正しいのかもしれない。
943デフォルトの名無しさん:2008/09/28(日) 13:09:58
>>941
まともな学校出てない子にはわからんかもしれんが、
これに限らず大学の先生とかそういう読み方をしがち。
944デフォルトの名無しさん:2008/09/28(日) 13:14:13
なんかかわいそうになってくるな
にぶんぎはにぶんぎだよ
他の読み方などない
945デフォルトの名無しさん:2008/09/28(日) 13:16:10
>>943
大学でも聞いたことないぞそれ。
946デフォルトの名無しさん:2008/09/28(日) 13:17:17
にぶんぼく(笑)
947デフォルトの名無しさん:2008/09/28(日) 13:19:06
B木はびーきなのだが、しゃべるときはビーツリーかビーボクにしてるな
「せんせ、なんのご贔屓ですのん?」と言われたらかなわん
話し言葉と記述用の言葉が違うことは普通にあるよ
948デフォルトの名無しさん:2008/09/28(日) 13:20:57
無理な日本語にしないでExpression Treeでいいよ
ググってもあんまり出てこない>式木
949デフォルトの名無しさん:2008/09/28(日) 13:24:57
>>944-946
井の中の蛙大海を知らず、とはよく言ったものだな。
君らはまともな大学教育の経験ないんでしょw

>>938>>947の言っていることの方がよほど常識的だ。
950デフォルトの名無しさん:2008/09/28(日) 13:25:09
>>943
旧帝で数学科から情報系の院へすすんでグラフ理論研究したが、一度も聞いたことないわ。
「しがち」っていうほどたくさんはいないんじゃないの
951デフォルトの名無しさん:2008/09/28(日) 13:28:58
>旧帝で数学科から情報系の院へすすんでグラフ理論研究したが
かなり痛い人だということはわかった
952デフォルトの名無しさん:2008/09/28(日) 13:38:26
「ボク」派が1人で自作自演してるに1票。
953デフォルトの名無しさん:2008/09/28(日) 13:41:55
結局バックボーンがなにもない主張なので
学歴攻撃で言い張るしかありません。
特亜的思考しか出来ずかわいそうですwww
954デフォルトの名無しさん:2008/09/28(日) 13:46:42
むしろ「特亜」なんて言葉を平気で使うことに何も躊躇を感じないさまが「語るに落ちて」
いることにも気づかないっていうのは見てるこちらが気恥ずかしくなるな。
955デフォルトの名無しさん:2008/09/28(日) 13:48:56
こういう話題で特亜とか言うやつ、頭おかしいだろ。
956デフォルトの名無しさん:2008/09/28(日) 13:50:36
あと、まあこの「誤読の仕方」そのものが頭の悪さを語るに落ちているわけだが、
馬鹿な君らが誤読しているのと違って>>938>>947は「そういう読み方をすることもある」
と言っているだけで、それが「正しい」とか「唯一無二の真実だ」とか言っているわけではない。
957デフォルトの名無しさん:2008/09/28(日) 13:57:34
待て待て、つられすぎだろ。
958デフォルトの名無しさん:2008/09/28(日) 14:00:53
MSDNでの表記は「式ツリー」になってるね。C#スレ的には「式ツリー」で丸く収めようや。
959デフォルトの名無しさん:2008/09/28(日) 14:06:32
赤黒ツリーってなんかださくないか。
960デフォルトの名無しさん:2008/09/28(日) 14:08:21
あれの英語表記はそのまま red black treeでいいの?
961デフォルトの名無しさん:2008/09/28(日) 14:14:11
red-black tree
962デフォルトの名無しさん:2008/09/28(日) 14:14:31
Expression Treeを読むのってすごい面倒だよね
963デフォルトの名無しさん:2008/09/28(日) 14:16:37
expression 釣り
964デフォルトの名無しさん:2008/09/28(日) 14:31:44
誰うま
965デフォルトの名無しさん:2008/09/28(日) 14:34:58
大漁ですね
966デフォルトの名無しさん:2008/09/28(日) 15:43:01
釣られすぎというか顔真っ赤ぶりワラタ
コードが良ければどうでもいいじゃない
967デフォルトの名無しさん:2008/09/28(日) 18:00:46
学校の課題で
Button
Label
TextBox
CheckBox
RadioBotton
ListBox
Timer
この中から最低5つ使って普段役に立つプログラムを作成せよ

というものがあるのですが、高得点が狙えそうなものがまったく思いつきません。

何かアイディアを頂きたいのですが、お願いできますか?
968デフォルトの名無しさん:2008/09/28(日) 18:04:22
いいえ。
969デフォルトの名無しさん:2008/09/28(日) 18:10:05
そのひどすぎる課題出した奴に見本作らせてみて
役に立ちそうもなかったらフルボッコでいいかもしれない

それでも作るのならラーメンタイマー付き電卓
970デフォルトの名無しさん:2008/09/28(日) 18:16:28
既にあるもので普段役立つものを真似して作ればいいよ
971デフォルトの名無しさん:2008/09/28(日) 18:19:47
>>967
役に立つってのは人それぞれってー事をバカに理解させる物を作ればいいんじゃないか?
無理やり5つ使って登録文言表示させるだけの物作って、「私はあなたみたいなバカとしゃべりたくないので役に立ちます」と表示してやれ。
972デフォルトの名無しさん:2008/09/28(日) 18:20:50
日本語でおk
973デフォルトの名無しさん:2008/09/28(日) 18:27:27
コントロールの機能サンプルでも作っとけ。
974デフォルトの名無しさん:2008/09/28(日) 18:27:41
まじめに考えると
Label/Button/TextBox/Checkboxは設定画面にでも使えばいいので後のこり一つか
ListBoxはリソースの代わりに組み込みリストとして使うという邪道もある。

なんか役に立つものを作ってから足りない奴を無理矢理追加すればいいんじゃね?
975デフォルトの名無しさん:2008/09/28(日) 18:33:24
>>967
「高得点が狙えそうなもの」ってふざけすぎだろ
そんなの自分で考えろよ
976デフォルトの名無しさん:2008/09/28(日) 18:37:34
こんなくだらん質問にまじめに回答してるおまえらにビックリだよ
977デフォルトの名無しさん:2008/09/28(日) 18:42:58
この前ものすごく役立つもの作ったよ
ハードディスクの中でどのディレクトリが何%の容量を消費してるかを調べるソフト
ハードディスクが足りなくなった時に何を捨てればいいか分かる
978デフォルトの名無しさん:2008/09/28(日) 18:52:49
>>967
ボタン、ラベル、テキストボックス、...
それぞれのコントロールのプロパティを弄れて動作を確認できるような
サンプルプログラムにすればいい。
そして完成させたらその課題を出した講師にプレゼンテーションだ。

最後に一言、「フフフッ、勝ったな・・・。」で締めくくる。
979デフォルトの名無しさん:2008/09/28(日) 20:50:18
本当に役立つものが提出されたら講師がパクるフラグ
980デフォルトの名無しさん:2008/09/29(月) 00:54:08
俺ならrapidのダウンローダつくる
981デフォルトの名無しさん:2008/09/29(月) 01:38:32
982967:2008/09/29(月) 02:26:07
みなさん親切にお答え頂いてありがとうございます。
すごく参考になりました。
参考になるHPも教えて頂いたので、みなさんのアドバイスも活かしつつ自分でどうにかしてみます。

他力本願の要望にお手数かけてくださってありがとうございました。
983デフォルトの名無しさん:2008/09/29(月) 03:28:02
一次元の配列を追加という形で動的にサイズ変更させていきたいんですが
実現するにはArrayListクラスとList<T>クラスの2つの方法があるそうです。

両者の違いがよく分からないんですが、どうやって使い分ければいいでしょうか?
984983:2008/09/29(月) 03:29:36
失礼、補足です。

配列の型はint型とstring型の2種類を想定しています。

※intとstringの両者を混在させるのではなく別々の配列に格納します。
985デフォルトの名無しさん:2008/09/29(月) 03:31:25
ArrayListは使わなくていい
986デフォルトの名無しさん:2008/09/29(月) 03:32:20
ArrayListはList<T>が無かった時代の遺物
987デフォルトの名無しさん:2008/09/29(月) 03:34:20
.Net Framework1.1以前の環境で使う必要があるならArrayList
988983:2008/09/29(月) 03:38:45
ど、どうもです(;´∀`)ノシ

そうでしたか、ArrayListは遺物扱いされてたんですか。
型指定できないことにどことなく違和感は感じていたんですが・・・
989デフォルトの名無しさん:2008/09/29(月) 09:53:41
foreachを使ってListBoxに入っているitemを文字列として
列挙したいのですが、どうすればいいのでしょうか。
↓のように書くとobjectのようで…。

foreach (string item in listBox.Items)
{}
990デフォルトの名無しさん:2008/09/29(月) 09:56:57
え?そのままいけないか
991デフォルトの名無しさん:2008/09/29(月) 10:13:13
そのListBoxに何入れてんのよ
992デフォルトの名無しさん:2008/09/29(月) 11:33:59
Item に string の値を入れてるならキャストする。
foreach (object item in listBox.Items)
{
 string str = (string)item;
}
993デフォルトの名無しさん:2008/09/29(月) 11:59:14
フォルダやファイルで、「コピー」を不能にするセキュレイティ制限は
可能でしょうか?

「移動」を不能にするためには、「削除」の許可を与えなければよい
のですが、「コピー」の方は、「読み取り」さえ許可されていればできて
しまいました。

これを不能にするためのアクセス権の設定方法がありましたら、その
ための設定方法を知りたく思います。ご回答またはアドバイスを頂ければ
ありがたく。
994デフォルトの名無しさん:2008/09/29(月) 12:00:03
>>993 訂正 >セキュレイティ -> セキュリティ
995デフォルトの名無しさん:2008/09/29(月) 12:03:13
>>992
foreach (string
でキャストも同時に可能よ
もちろんstring以外が入ってたら例外だけどな

>>993
プログラムからバイトデータ全部読み込んで適当なファイルに書き出す
とかされたらどうしようもないだろ
996デフォルトの名無しさん:2008/09/29(月) 12:34:22
いろいろフックかませば不可能では無いんじゃないか
まあ、トロイかスパイウェアになるから自分のPC以外には使用不可だけど
997デフォルトの名無しさん:2008/09/29(月) 12:41:14
ふらっとC#,C♯,C#(初心者用) Part31
http://pc11.2ch.net/test/read.cgi/tech/1222659587/
998デフォルトの名無しさん:2008/09/29(月) 13:08:09
>>995-996

やはり少なくともWindows系でのファイルシステムでは「読み取り」権限
さえあれば「コピー」を制限することは不可能ということなんですよね、
わかりました、またよろしくです。

999デフォルトの名無しさん:2008/09/29(月) 13:18:20
いやいや、読み取りできてコピーできないってどんなシステムよ。
1000デフォルトの名無しさん:2008/09/29(月) 13:19:32
あらゆる個所に書き込み一切禁止とか
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。