ふらっとC#,C♯,C#(初心者用) Part32
レス数が1000を超えています。これ以上書き込みはできません。
0001ななしぃ#
2008/10/12(日) 15:07:41「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
0002ななしぃ#
2008/10/12(日) 15:09:52http://pc11.2ch.net/test/read.cgi/tech/1219481054/
WPF(XAML,XBAP,.NET3.5)GUIプログラミング
http://pc11.2ch.net/test/read.cgi/tech/1211453941/
Live3
http://pc11.2ch.net/test/read.cgi/tech/1221395634/
初心者のためのプログラミング言語ガイド Part11
http://pc11.2ch.net/test/read.cgi/tech/1218282605/
0003ななしぃ#
2008/10/12(日) 15:11:43http://www.google.co.jp/
http://msdn.microsoft.com/ja-jp/library/default.aspx
http://homepage3.nifty.com/midori_no_bike/CS/
http://www.atmarkit.co.jp/fdotnet/dotnettips/index/index.html
http://dobon.net/vb/dotnet/
http://jeanne.wankuma.com/tips/
http://www.labasp.net/CsharpNote/
0004デフォルトの名無しさん
2008/10/12(日) 15:17:02乙
0005デフォルトの名無しさん
2008/10/12(日) 15:22:45糞スレ乱立すんな
0006デフォルトの名無しさん
2008/10/12(日) 15:23:40↓↓以降こちらへ
http://pc11.2ch.net/test/read.cgi/tech/1223777524/
0007デフォルトの名無しさん
2008/10/12(日) 15:35:47ぷらっととかいうスレを立ててる荒らしは死ね
0008デフォルトの名無しさん
2008/10/12(日) 15:42:15しかし幼稚な奴らばっかりだな本当。
0009デフォルトの名無しさん
2008/10/12(日) 15:46:29ぷらっとを削除する作業に戻るとするか
0010デフォルトの名無しさん
2008/10/12(日) 15:51:49http://pc11.2ch.net/test/read.cgi/tech/1223777524/
0011デフォルトの名無しさん
2008/10/12(日) 15:55:47いい加減にしろ
死ね
0012デフォルトの名無しさん
2008/10/12(日) 15:59:11乙
ぷらっととかという荒らしの立てたスレは放置で。
質問のある方どうぞ
↓
0013デフォルトの名無しさん
2008/10/12(日) 16:00:14死にません。
以降、こちらのすれをご利用ください。
http://pc11.2ch.net/test/read.cgi/tech/1223777524/
0014デフォルトの名無しさん
2008/10/12(日) 16:02:14いいえ使いません
0015デフォルトの名無しさん
2008/10/12(日) 16:30:14思いますが、.NETではそれに代わるものが出来たのでしょうか?
よろしくお願いします。
0016デフォルトの名無しさん
2008/10/12(日) 16:33:570017デフォルトの名無しさん
2008/10/12(日) 17:48:21どのように表記すべきか
ご教授ください
0018デフォルトの名無しさん
2008/10/12(日) 18:01:280019デフォルトの名無しさん
2008/10/12(日) 18:19:49タイトルがVisual C# 2008
製品がVisual C# 2008 Express Edition
みたいな感じとかで考えたらどうだろう
ちなみにAssemblyTitle属性はXP以降でタスクバーボタンのグループ化したときにも表示されたりしたはず
0020デフォルトの名無しさん
2008/10/12(日) 19:19:010021デフォルトの名無しさん
2008/10/12(日) 19:57:040022デフォルトの名無しさん
2008/10/12(日) 20:02:21「2バイト文字列」っていつの時代の概念だよ。
0023デフォルトの名無しさん
2008/10/12(日) 20:51:02昔からの慣習を引きずってUnicodeとか言うので
2バイト文字列って言ってくれたほうが正直ありがたい
サロゲートペア?シラネ
0024デフォルトの名無しさん
2008/10/12(日) 22:00:120025デフォルトの名無しさん
2008/10/12(日) 22:20:360026デフォルトの名無しさん
2008/10/12(日) 23:15:590027デフォルトの名無しさん
2008/10/13(月) 01:05:490028デフォルトの名無しさん
2008/10/13(月) 08:54:45CやC++だと構造体のポインタにキャストしてアクセスすれば、
間にデータが追加になっても変更が楽なんだけども
調べたらC#でもunsafe fixed使えばキャストできるけど、これが常套手段だとは思えないし、
インデックス値を直に指定してアクセスなんてしたら、データの追加削除が発生したら
変更が大変すぎる
そもそもキャストなんてしないように思えるんだけど、良い方法が思い浮かばない
0029デフォルトの名無しさん
2008/10/13(月) 09:28:580030デフォルトの名無しさん
2008/10/13(月) 09:46:21Marshalクラス使うんじゃね
Marshal.Copyでbyte[]からIntPtr取って、Marshal.PtrToStructureで帰ってきた
のを構造体にキャストするんじゃないかとおもうが……
外してたらごめんね
0031デフォルトの名無しさん
2008/10/13(月) 09:52:48BinaryReader, MemoryStream 使う。
0032デフォルトの名無しさん
2008/10/13(月) 18:03:39配列の長さにもよるけど、簡単ならBitConverter、少し複雑ならBinaryReaderかな
0033デフォルトの名無しさん
2008/10/13(月) 19:57:27int code = 1320;
string st = "1320,野田,め組,578954";
string[] stArray = st.Split(',');
if (int.Parse(stArray[0]) == code)
{
Console.WriteLine("1320あり");
}
codeをstringに変更し
if (stArray[0] == code)にすると問題ないのですが 数値として比較したいと思っています
いろいろと調べたのですが私の調べる力が足りないのか解決方法が見つかりませんでした
どのようにすれば上手くいくのか教えていただけないでしょうか
0034デフォルトの名無しさん
2008/10/13(月) 20:11:57どう「止まる」かを具体的に書くといいかもしれない
エラーが出るならそのメッセージとか
0035デフォルトの名無しさん
2008/10/13(月) 22:00:47要はそのコードなら止まらないが、st = "Hoge,野田,め組,578954"とかだと
int.Parse(stArray[0])の呼び出しで例外が発生する。
それを回避するために
int.TryParse(stArray[0],out value)
こっちを使うといい。
0036デフォルトの名無しさん
2008/10/13(月) 22:34:16教師やっててそんなこともわからないのかよ
0037デフォルトの名無しさん
2008/10/13(月) 22:41:480038デフォルトの名無しさん
2008/10/13(月) 22:42:45ここらで、便利なsprintf もってる椰子がいたら公開してはくれんだろうか。
0039デフォルトの名無しさん
2008/10/13(月) 22:49:540040デフォルトの名無しさん
2008/10/13(月) 22:51:160041デフォルトの名無しさん
2008/10/13(月) 23:01:230042デフォルトの名無しさん
2008/10/13(月) 23:03:21正規表現も思ったように指定するのがめんどいんで、
sprintf,sscanf互換の関数が欲しい。
0043デフォルトの名無しさん
2008/10/13(月) 23:10:20それか、perl, ruby風の文字列表記。
0044デフォルトの名無しさん
2008/10/13(月) 23:11:50慣れろとしか言えん
0045デフォルトの名無しさん
2008/10/13(月) 23:19:450046デフォルトの名無しさん
2008/10/13(月) 23:21:110047デフォルトの名無しさん
2008/10/13(月) 23:28:51俺は、このまんま、ちょい必要なの足して使ってるな。
0048デフォルトの名無しさん
2008/10/13(月) 23:29:55整数とか実数のことをいってるのかな。前詰め後ろ詰めのこと?
0049デフォルトの名無しさん
2008/10/13(月) 23:35:50問題なのは、 直感的に最終的な文字列がわかり難い ことだとおもう。
無駄に長い記述になるし。
0050デフォルトの名無しさん
2008/10/13(月) 23:45:43結局、精度指定子とやらが文章中に埋まってるのをようやく発見したが、
あんな仕様書は俺が上司だったら却下だな。
同じヘルプのsprintfとかの方が全然読みやすいのに。なんだあれは。
0051デフォルトの名無しさん
2008/10/13(月) 23:53:34あとはマニュアル(MSDN)の記述がよくなくて探しにくいというのが大きいかも。
{ 位置情報 [[ , 総桁数] : 型[[0]サイズ]] }
「カンマ総桁数」のあたりの書き方がどわすれすることが多いよね。
0052デフォルトの名無しさん
2008/10/14(火) 00:48:54private void fontDialog1_Ok(object sender, EventArgs e)
{
textBox1.Font = fontDialog1.Font;
}
これで何も変化がありません
エスパー助けてください
0053デフォルトの名無しさん
2008/10/14(火) 01:31:28{
textBox1.Font = fontDialog1.Font;
}
じゃだめなのか?
0054デフォルトの名無しさん
2008/10/14(火) 01:36:100056デフォルトの名無しさん
2008/10/14(火) 01:47:35小生Applyでは簡単に反映は出来ていたんですが、適用ボタン表示したくなかったのでOKボタンで反映させる方法が知りたかったのであります
0057デフォルトの名無しさん
2008/10/14(火) 01:57:430058デフォルトの名無しさん
2008/10/14(火) 12:19:36デコードはxdivなりffdshowなり各自インストールしてもらってそちらに任せるとして、
あとは映像を指定の領域に再生させたり、一時停止させたり、シークバーで任意の
場所に移動できたり、音量を変えられれば満足なんですが・・・
もしこれらの機能を実装するとしたらどんなことを勉強する必要がありますか?
0059デフォルトの名無しさん
2008/10/14(火) 12:21:190060デフォルトの名無しさん
2008/10/14(火) 13:57:35006158
2008/10/14(火) 14:16:19目指すのは本当にシンプルで再生負荷が極めて軽いプレイヤーです。
8年前のPCでH.264といった動画も再生できるような軽さを追求したいと思っています。
プログラムの工夫いかんで軽くすることは可能でしょうか?
0062デフォルトの名無しさん
2008/10/14(火) 14:20:41プレイヤー関係ないと思うけど
0063デフォルトの名無しさん
2008/10/14(火) 14:30:310064デフォルトの名無しさん
2008/10/14(火) 14:41:37Program.csに書いたらいいのか、新しいクラス作って書いていけばいいのか、、、など。
0065デフォルトの名無しさん
2008/10/14(火) 14:45:580066デフォルトの名無しさん
2008/10/14(火) 14:59:14ありがとうございます。
そうなんですか。。。今とりあえずprogram.csの中にメソッド追加してるんですが、良い方法ではないんですね。
プロジェクト->クラスの追加
でクラスを追加して、そこにコーディングしていくのが良いんでしょうか。
もしそうなら、そのクラスをnewするのはどこが一番いいですか?
0067デフォルトの名無しさん
2008/10/14(火) 15:08:11誰もが一度は通る道だろ。
お前さんだって、俺だって・・・
0068デフォルトの名無しさん
2008/10/14(火) 15:15:00おまいさんに必要なのは、まず何を作りたいのかはっきりさせることだ。
次にそれを作るのに必要なクラスを考えることだ。
0069デフォルトの名無しさん
2008/10/14(火) 15:20:28それをmain()の中でnewすればいいですか?
0070デフォルトの名無しさん
2008/10/14(火) 15:42:59この1年で何があったんだよ・・
0071デフォルトの名無しさん
2008/10/14(火) 16:26:24ググりまくっても、なかなかいい資料に出会えません。
初心者の道しるべがほしい・・・。
0072デフォルトの名無しさん
2008/10/14(火) 17:44:33SourceForge や CodePlex 等から適当なやつを拾ってきて読むと、いい勉強になるんじゃないかな。
0073デフォルトの名無しさん
2008/10/14(火) 18:33:20一箇所で受け取って、このアイテムが押されてたからこの処理。的な事はできないの?
0074デフォルトの名無しさん
2008/10/14(火) 18:37:40座標しかわからないよ
0075デフォルトの名無しさん
2008/10/14(火) 18:40:030076デフォルトの名無しさん
2008/10/14(火) 18:44:080077デフォルトの名無しさん
2008/10/14(火) 18:45:540078デフォルトの名無しさん
2008/10/14(火) 18:47:43ストリップ本体のClick拾って項目突き止めるか。
0079デフォルトの名無しさん
2008/10/14(火) 22:04:590080デフォルトの名無しさん
2008/10/14(火) 22:08:060081デフォルトの名無しさん
2008/10/14(火) 22:50:590082デフォルトの名無しさん
2008/10/15(水) 02:37:550083デフォルトの名無しさん
2008/10/15(水) 03:29:49単純なGet/Setならインライン化されるので問題なし
0084デフォルトの名無しさん
2008/10/15(水) 03:31:470085デフォルトの名無しさん
2008/10/15(水) 04:33:420086デフォルトの名無しさん
2008/10/15(水) 16:18:04System.Drawingも注意
0087デフォルトの名無しさん
2008/10/15(水) 17:51:51fruit.txt
2008/10/12(日) 12:03 バナナ
2008/10/13(月) 16:25 りんご
2008/10/14(火) 12:05 みかん
2008/10/15(水) 17:06 梨
string fileName = @"fruit.txt";
string[] fruitname = File.ReadAllLines(fileName, Encoding.GetEncoding("Shift_JIS"));
でよいのですが、これを二次元配列にするにはどうしたらよいでしょう。
通常二次元配列は、
string[] fruitname = new string[4,3];
のようにして設定し、りんごを取り出すには、
fruitname[1,2]
でできるようなのです。
ご教示ください。
0088デフォルトの名無しさん
2008/10/15(水) 17:57:35とりあえずReadAllLinesで読み込んで
その後二次元配列を生成
読み込んだのをループで回してSplitで分割して挿入していく
0089デフォルトの名無しさん
2008/10/15(水) 17:58:55string[] lines = File.ReadAllLines(fileName, Encoding.GetEncoding("Shift_JIS"));
string[][] fruitname = new string[lines.Length][];
for (int i = 0; i < lines.Length; i++) {
fruitname[i] = lines.Split(new[] {' ');
}
0090デフォルトの名無しさん
2008/10/15(水) 19:01:460091デフォルトの名無しさん
2008/10/15(水) 19:07:420092デフォルトの名無しさん
2008/10/15(水) 19:13:14まあソリューション内で直参照だけでいいなら、全ての参照を検索だったかで出来る。
0093デフォルトの名無しさん
2008/10/15(水) 19:14:38FxCopってできたっけかな?
0094デフォルトの名無しさん
2008/10/15(水) 19:16:260095デフォルトの名無しさん
2008/10/15(水) 19:20:400096デフォルトの名無しさん
2008/10/15(水) 19:23:00二つのプロパティ持ったクラスの配列を作った場合に例えば
DateTimeだけの配列やFruitだけの配列を取り出したい場合は
for文などで新たな配列を作るしか思いつかないのですが
他に良い方法はないでしょうか。
0097デフォルトの名無しさん
2008/10/15(水) 19:24:580098デフォルトの名無しさん
2008/10/15(水) 19:26:48まあC#3.0ならlist.Select(x => x.Fruit).ToArray()とかできるけどな
0099デフォルトの名無しさん
2008/10/15(水) 19:29:50アドバイスありがとうございます。
二次元配列を生成、というところができていないので、
具体的なソースもいただけるとうれしいです。
>>89
配列の配列。そういう考え方があるのですね。
このコード、{}の対応がとれていないみたいなのですが、
Split(new[] {' ');
のところって、
Split(new[] {' '});
Split(new[] ' ');
Split(' ');
とかやってみたのですが、うまくいかず。
ところで、二次元配列にはしないものなのですか?
0100デフォルトの名無しさん
2008/10/15(水) 19:46:33string[,] fruitName = new string[lines.Length, 3]
for(int i = 0; i < lines.Length; i++)
{
string[] tmp = lines[i].Split();
fruitName[i, 0] = tmp[0];
fruitName[i, 1] = tmp[1];
fruitName[i, 2] = tmp[2];
}
0101デフォルトの名無しさん
2008/10/15(水) 19:49:49そのうち気がついたら2次元配列は全く使わなくなってるから
0102デフォルトの名無しさん
2008/10/15(水) 19:58:38ありがとうございます。
>>96、97、98
fruits.Select(x=>x.Fruit).ToArray()
って全文書くとどうなるんですか!?
ひょっとしてこれ、すごくスマート!?
>>101
うっ。そうなんですか。
0103デフォルトの名無しさん
2008/10/15(水) 20:04:37Fruit[] fruits = 読み込み…;
string[] fruitNameArray = fruits.Select(x => x.Fruit).ToArray();//Fruitだけの配列を作成
0104103
2008/10/15(水) 20:06:03//class Fruit { public DateTime Date { get; set; } public string FruitName { get; set; } }
Fruit[] fruits = 読み込み…;
string[] fruitNameArray = fruits.Select(x => x.FruitName).ToArray();//FruitNameだけの配列を作成
0105デフォルトの名無しさん
2008/10/15(水) 20:19:460106デフォルトの名無しさん
2008/10/15(水) 20:21:11var fruits = lines.Select(x =>
{
string[] tmp = x.Split();
return new
{
Date = tmp[0],
Time = tmp[1],
Fruit = tmp[2]
};
}).ToArray();
匿名形使ってみたり
0107デフォルトの名無しさん
2008/10/15(水) 20:58:00書いたらこんな風に
ポリフォニカは普通かった面白いだろ。
特に姉妹がかわいいし。
0108デフォルトの名無しさん
2008/10/15(水) 20:59:03これで
バナナ
りんご
みかん
梨
のみを一括して出力するには、
Console.Write(Fruit[]); //104
Console.Write(Fruit); //106
でいいと思うのですが、
問題はこの行をどこに書くかです。
どこに書きゃいいんでしょ?
010996
2008/10/15(水) 21:21:020110デフォルトの名無しさん
2008/10/15(水) 21:26:47意味的におかしいからできない
WPFのPointは引き算できるんだけど、位置ベクトル扱いで戻り値はVector型だったりする
0111デフォルトの名無しさん
2008/10/15(水) 22:56:300112デフォルトの名無しさん
2008/10/15(水) 22:59:290113デフォルトの名無しさん
2008/10/15(水) 23:04:04なんでおなじのがあるんだよ
0114デフォルトの名無しさん
2008/10/15(水) 23:06:58とかやるのが面倒だから?
0115デフォルトの名無しさん
2008/10/15(水) 23:07:45位置づけとしては、
byte の方は C# の組み込みキーワード。
System.Byte の方は .NET Framework の正式名称。
0116デフォルトの名無しさん
2008/10/15(水) 23:07:550117デフォルトの名無しさん
2008/10/15(水) 23:27:100118デフォルトの名無しさん
2008/10/15(水) 23:30:48ただしメソッド名とかの場合はInt32とか使う Convert.ToInt32みたいなの
0119デフォルトの名無しさん
2008/10/15(水) 23:30:520120デフォルトの名無しさん
2008/10/15(水) 23:32:14Int32.Parse()
Char.IsDigit()
とか
なんでかはわからんが
0121デフォルトの名無しさん
2008/10/15(水) 23:33:58Byte[] byteStream;
とかやるとByte何それってコンパイラに怒られるから
なるべくbyteを使うようにすればいいんじゃないかと思ったり
0122デフォルトの名無しさん
2008/10/15(水) 23:39:360123デフォルトの名無しさん
2008/10/15(水) 23:43:17ありやとやんした!
0124デフォルトの名無しさん
2008/10/15(水) 23:54:19C#の実装もありうる)っていうような「アリバイ作り」以上の意味はないという
認識だったんだが、違うのか?
0125デフォルトの名無しさん
2008/10/15(水) 23:56:540126デフォルトの名無しさん
2008/10/16(木) 01:10:000127デフォルトの名無しさん
2008/10/16(木) 01:17:110128デフォルトの名無しさん
2008/10/16(木) 01:30:09(Ecma 334 C# Language Specification の 11.1.4 Simple types)
だからMSのコンパイラが、ってわけじゃないと思う。勘違いしてたらごめんね
0129デフォルトの名無しさん
2008/10/16(木) 09:28:240130デフォルトの名無しさん
2008/10/16(木) 14:05:50放り込んで操作しているんですが、こういうやり方と、DataSourceを
設定してそっちを操作するのでは、どちらが軽いんでしょうか。
0131デフォルトの名無しさん
2008/10/16(木) 14:12:160132デフォルトの名無しさん
2008/10/16(木) 14:14:400133デフォルトの名無しさん
2008/10/16(木) 16:43:05double i = 1999.999999;
Console.WriteLine(i.ToString("F2"));
の結果が 2000.00 になってしまいます。
1999.99 にしたいのですが、勝手に丸められてしまいます。
丸められない方法はないですか?
0134デフォルトの名無しさん
2008/10/16(木) 17:17:11#.##
0135デフォルトの名無しさん
2008/10/16(木) 17:22:03丸められてしまいます。
0136デフォルトの名無しさん
2008/10/16(木) 17:25:31数値で切り捨てるのは、小数点以下2ケタなら100倍してMath.Floorとか。
0137デフォルトの名無しさん
2008/10/16(木) 17:33:26グーですグー!
result = Math.Floor(result * 100) / 100;
result.ToString();
でいけました。どもです!
0138デフォルトの名無しさん
2008/10/16(木) 19:32:410139デフォルトの名無しさん
2008/10/16(木) 20:33:40で読み込んだ画像を png 形式のバイト列に変換したいんですけど、どうすればよいんでしょう?
ImageConverter.ConvertToの引数が4つのほうを使えば良いんだろうとは思うんですが、
1, 2個目に入れるべき物がよくわかりません。
Bitmap bmp = new Bitmap("hoge.jpg"); // 実際には読み込んだ後、加工された物
ImageConverter cnv = new ImageConverter();
string str = System.Convert.ToBase64String((byte[]) cnv.ConvertTo(?, ?, bmp, typeof(byte[])));
0140デフォルトの名無しさん
2008/10/16(木) 21:02:45ConvertToに与える加工済みのbmpは既にpng形式になってたので引数2個のほうで問題ありませんでした。
0141デフォルトの名無しさん
2008/10/16(木) 21:21:480142デフォルトの名無しさん
2008/10/16(木) 22:10:29Disposeしなくていいってことですか?
0143デフォルトの名無しさん
2008/10/16(木) 22:19:33って何回繰り返したことだろう
0144デフォルトの名無しさん
2008/10/16(木) 22:23:190145デフォルトの名無しさん
2008/10/16(木) 22:27:23それは不正確だと思うが。。
Disposeの個別の実装次第だろう。
0146デフォルトの名無しさん
2008/10/16(木) 22:36:59じゃあ具体的にマネージドメモリをDisposeの実装でどうにかしてくれ
0147デフォルトの名無しさん
2008/10/16(木) 22:42:02言ってる意味理解して反論してる?
0148デフォルトの名無しさん
2008/10/16(木) 22:45:04でDisposeの個別の実装をどうマネージドメモリに関係させるの?
0149デフォルトの名無しさん
2008/10/16(木) 22:58:25巨大配列への参照をnullにする実装だってありうる。
「それはメモリを開放したことにならん」って言いたいかもしれんが、
その時は落ち着いて>>143を読もう。
0150デフォルトの名無しさん
2008/10/16(木) 23:16:06参照を消しただけだもの
0151デフォルトの名無しさん
2008/10/17(金) 00:10:340152デフォルトの名無しさん
2008/10/17(金) 00:19:19のように、任意の型の引数を取るメソッドがあったとして、以下のようなことはどうやればできるでしょうか。
・引数のtが何らかの型の配列かどうか(Tが配列か否か)を取得
・配列であれば何の型の配列か(TはT2[]の時、T2)を取得
・配列の型(T2)が取れた場合、T2型のオブジェクトを宣言する
funcの中で、
if ( t is 配列 ) {
//TはT2の配列と仮定
foreach ( T2 t2 in t ) {
//t2に何らかの処理
}
}
というようなことをやりたいと思っています。
よろしくお願いします。
0153デフォルトの名無しさん
2008/10/17(金) 00:32:02foreachしたいだけなら、IEnumerable<T>を引数にしたほうがいい。
0154デフォルトの名無しさん
2008/10/17(金) 02:34:02あとC♯を勉強してたらJAVAやD言語についての理解も深まって
いざってときにそれらにシフトしていくことも可能ですか?
C♯に一番興味あるんですけど、JAVAやC言語、D言語ってのも
いいってきくのでその3つにつなげることができるのか疑問です。
0155デフォルトの名無しさん
2008/10/17(金) 03:00:470156デフォルトの名無しさん
2008/10/17(金) 03:41:55何でいちいちこんなことする必要あるの?
0157デフォルトの名無しさん
2008/10/17(金) 04:33:25書いておく癖をつけとかないと、なんか色々漏れるんだよ。
理由が想像すらつかない程度の知識しかないんなら、とりあえず面倒でも従っとけ。
0158デフォルトの名無しさん
2008/10/17(金) 04:44:09言語の知識だけで一人前になれるほどプログラムは単純じゃありません。
興味を持っただけの段階で知識の応用範囲を気にするなんて小賢しい真似をする暇があるなら
さっさと勉強した方がなんぼか有意義です。
でないと自分に必要な分野すら見えてきません。
0159デフォルトの名無しさん
2008/10/17(金) 05:22:12なんで嘘つくの?
0160デフォルトの名無しさん
2008/10/17(金) 06:11:34こういう言い回しする奴はとことん頭悪そうだな
0161デフォルトの名無しさん
2008/10/17(金) 06:54:25リフレクション
0162デフォルトの名無しさん
2008/10/17(金) 08:24:22Aは両方とも中身(フィールド・プロパティ・コンストラクタ定義。メソッドは持たないデータ格納用クラス)は全く同じで、
名前空間のみが異なるとします。
仕様上そうなっているので、クラスを一つに統一するのは難しい状況です。
このとき、HogeのAとHageのAのオブジェクトを相互変換したいのですが、何かうまいやり方はありますでしょうか?
最も愚直な方法は、メンバを全て列挙して、一つ一つ代入していくことだと思いますが、
量が非常に多いのであまりやりたくありません。
Hoge.A.BやHage.A.B等、Aの中に同様のサブクラスBがあったりして、.NETで提供されるstring等の基本的なクラスに
落ちるまで、全て展開してやる必要がありますし。
単純にasやキャストを使っても変換できないと言われますし、
XMLシリアライザでメモリストリーム上にシリアライズし、他方の型を指定してデシリアライズしても、
型が違うと怒られます。
何かうまいやり方はありますでしょうか。よろしくお願いします。
0163デフォルトの名無しさん
2008/10/17(金) 08:31:06同じ名前で通常版と配列版をつくってオーバーロードすればいけると思う。
配列がobjectにキャストされてたらダメだけど。
static void Func<T>(T [] ts) { foreach (T t in ts) Console.WriteLine(t); }
static void Func<T>(T t) { Console.WriteLine(t); }
0164デフォルトの名無しさん
2008/10/17(金) 08:52:18両方同じインターフェース継承させちゃダメなのか?
それがダメなら、リフレクションでやれ。
0165デフォルトの名無しさん
2008/10/17(金) 09:17:07CodeDomやEmitでコード生成
0166デフォルトの名無しさん
2008/10/17(金) 12:22:53どれぐらいメンバ変数があるんだかわからないけれど、一個一個やるんじゃなくて
Hoge.Aを引数にとってHage.Aを返すメソッドを一個書けばすむんじゃねーの?
Hage.A ConvertHogeToHage(Hoge.,A a)
{
b = new Hage.A();
b.x = a.x;
b.y = a.y;
.......
return b;
}
てな具合にさ。
0167デフォルトの名無しさん
2008/10/17(金) 12:46:330168デフォルトの名無しさん
2008/10/17(金) 13:59:56int[] a = a[10];
があるとします。
この配列の範囲外にアクセスしようとしたら、たとえばa[-1]やa[10]にアクセスしようとしたとき、
特定の数字(たとえば-1)を返すようにすることは可能でしょうか?
0169デフォルトの名無しさん
2008/10/17(金) 14:01:16インデクサを実装した型を自作してそれっぽく振る舞わせることは可能
意味がわからなかったら勉強しろとしか言えない
0170デフォルトの名無しさん
2008/10/17(金) 14:07:39あるいは簡単にメソッドで実現するという方法は一般的でしょうか?
int a(int x)
とし、0 <= x <= 9 以外の範囲を指定したら-1をreturnするようなメソッドの中に
int a[];
を宣言するという方法もあるかと思いますが・・・
0171デフォルトの名無しさん
2008/10/17(金) 14:20:08今なら拡張メソッドでGetValueOrDefault<T>(this IList<T> list, int index, T default)とかか
やらんけど
0172デフォルトの名無しさん
2008/10/17(金) 14:57:160173デフォルトの名無しさん
2008/10/17(金) 15:08:310174デフォルトの名無しさん
2008/10/17(金) 15:10:08その動画をLAN内の別のPCのメディアプレイヤーで見れるようにする(WMEのような)ソフトを作りたいのですが
非常に大雑把な作成の流れですが下のような流れで作ろうとすれば作れるでしょうか?
ココをこうすればいい、この部分に注意するようになどのご意見を賜りたいので書き込みました
Graphics.CopyFromScreenメソッドを使用して
連続でディスプレイをキャプチャ
↓
画像ファイルを繋げて動画へ変換しつつ
httpとUDPで通信できるサーバを立てる
↓
メディアプレイヤーから接続があった場合
そこへ動画を配信する
0175デフォルトの名無しさん
2008/10/17(金) 15:28:020176デフォルトの名無しさん
2008/10/17(金) 15:33:40メモしておきます
0177デフォルトの名無しさん
2008/10/17(金) 16:26:300178デフォルトの名無しさん
2008/10/17(金) 18:36:23条件はどう表現するのでしょうか。
0179デフォルトの名無しさん
2008/10/17(金) 18:51:25インデクサに関してちょこっと調べてきました。
setやgetで要素を設定・取得するわけですが、要素数が100個とか1000個になると
swich〜case文で設定していくのは大変な作業になってしまう気がするのですが・・・
0180デフォルトの名無しさん
2008/10/17(金) 18:58:13普通そんなのはDictionary使うだろ
0181デフォルトの名無しさん
2008/10/17(金) 18:59:070182178
2008/10/17(金) 20:13:57んですが、間違ってないでしょうか。
0183デフォルトの名無しさん
2008/10/17(金) 20:20:22なんでswitch? その発想はなかったわw
class MyArray<T> {
private T[] array;
public T this[int index] { get { 0 <= index && index < array.Length ? array[index] : -1 } }
}
0184178
2008/10/17(金) 20:21:180185183
2008/10/17(金) 20:22:17setはarray[index] = value;ね
0186デフォルトの名無しさん
2008/10/17(金) 20:56:23>>185
どうもです(^-^)ノ
そのsetを実装すればあとはfor文なりで配列に値を普通に格納していけるわけですね。
0187デフォルトの名無しさん
2008/10/17(金) 21:34:02配列で複数作ったクラスに継承使ったら複数の基底クラスが生成されて負担が大きくなる
という事はありますか?
0188デフォルトの名無しさん
2008/10/17(金) 21:36:060189デフォルトの名無しさん
2008/10/17(金) 21:36:140190デフォルトの名無しさん
2008/10/17(金) 22:13:47配列は変数がたくさん並んだものだからクラスの大きさとは関係ない
0191デフォルトの名無しさん
2008/10/17(金) 22:31:55分かりました。ありがとうございます。
0192デフォルトの名無しさん
2008/10/18(土) 00:21:21class MyApp { static void Main(string[] args) { foreach(string s in args) System.Console.WriteLine(s); } }
こんな感じの引数を表示するだけの物を動かしてて気付いたんですが、
argsにはワイルドカードが展開されない状態のコマンドライン引数が入るみたいですけど、
展開済みの引数配列を得るにはどうすればよいんでしょう?
0193デフォルトの名無しさん
2008/10/18(土) 00:25:14自分で好きなように処理するだけ
0194デフォルトの名無しさん
2008/10/18(土) 00:35:22シェルだからプログラムに渡される前に展開される
0195デフォルトの名無しさん
2008/10/18(土) 00:39:340196デフォルトの名無しさん
2008/10/18(土) 01:10:11Unixシェルがやってくれるのは展開すると言われることが多いと思う。
0197デフォルトの名無しさん
2008/10/18(土) 01:23:21自前で展開すればいいんだろうけど
いかにも車輪の再発明になりそうで躊躇してしまうね
0198デフォルトの名無しさん
2008/10/18(土) 05:08:21ttp://msdn.microsoft.com/ja-jp/library/wz42302f.aspx
0199デフォルトの名無しさん
2008/10/18(土) 05:14:460200デフォルトの名無しさん
2008/10/18(土) 06:58:55Directory.GetFiles() がダメっていうよりシェルが展開しないとダメな理由は
ワイルドカード展開処理が各プログラムごとに異なって実装される可能性があるから。
0201デフォルトの名無しさん
2008/10/18(土) 10:10:01例えばdir *\*.txtは文句言われるけど、
ruby -e"p ARGV" *\*.txtは1階層下の.txtのリストを表示してくれる、
みたいに実際に処理できるパターンが違うものがあります。
結局の所、展開処理は標準ライブラリでは用意されてないから
Directory.GetFiles, Directory.GetDirectoriesを使って自前で処理を書かないと駄目ってことでしょうか。
0202デフォルトの名無しさん
2008/10/18(土) 11:24:32Cのリンカオプションには存在するみたいだな。
0203デフォルトの名無しさん
2008/10/18(土) 12:35:43ファイルのリストを返すglobとかいうモジュールが標準でついてた気がする
そういうのがほしいのか
0204デフォルトの名無しさん
2008/10/18(土) 13:30:35http://www.uploda.org/uporg1732453.cs.html
0205デフォルトの名無しさん
2008/10/18(土) 17:28:30string A="(文字列)";
string B="(文字列)";
とし、
if (A == B)
で判定はできるかとは思いますが、たとえば比較する文字列が長い場合(2ちゃんに投稿
される平均的な1レスくらい)でもこの方法を使うべきでしょうか?
それとも長い文字列の比較のためには別に推奨された方法がありますか?
0206デフォルトの名無しさん
2008/10/18(土) 17:39:07予め等しいか等しくないかが分かっているのでなければ、
少なくとも一度は線形時間かかる方法で比較しないといけない。
でも、一度等しいかどうかを判断すれば、その結果を変数に保存しておくとか、
System.Xml.NameTableのような仕組みを使ったりすることで、
二度目以降は定数時間の比較で済む。
0207デフォルトの名無しさん
2008/10/18(土) 17:44:36不用意な回答だと思うなあ。
まあ質問者の質問の仕方が悪いんだが。
例えばDBとか検索エンジンのようにハッシュを使う方法もありうるし、
目的を明確にせずに一概に言えないとしかいいようがないと思うんだが。
0208デフォルトの名無しさん
2008/10/18(土) 17:48:30基本的に数文字で一致しなくなる掲示板レスみたいなのなら普通に比較するだけでも十分だろうし
そもそも比較回数が少ないなら気にすることもないだろうし
0209205
2008/10/18(土) 18:07:32ハッシュという方法がありましたか( ´・ω・)!
文字列をハッシュを使っていったんハッシュ値に変換してから比較するのと、
C#に標準で用意された文字列比較(==)とではどちらが短時間で済むでしょうか?
あとC#にはハッシュ関数は用意されていましたっけ?
それとも自前で構築する必要がありますか?
0210デフォルトの名無しさん
2008/10/18(土) 18:09:24うん
0211デフォルトの名無しさん
2008/10/18(土) 18:14:220212デフォルトの名無しさん
2008/10/18(土) 18:14:55その辺を明らかにせずに聞いても仕方ないんじゃないか?
たった2つの文字列を1回きり比較するだけとか、
数百万件の文字列データを高速に比較したいとかで
全然やり方なんて違うだろ。
0213デフォルトの名無しさん
2008/10/18(土) 18:24:54そんなこと考えず==で普通に比較すりゃいい
0214205
2008/10/18(土) 18:36:28プログラムは2ちゃんに投稿される1レス相当の文字列を数千回程度比較する規模です。
このくらいでしたら==やString.Equalsを使った方が速いでしょうか?
0215デフォルトの名無しさん
2008/10/18(土) 18:39:28数千回と一口に言っても
一つの文字列と複数の文字列を比較する場合とか、
複数と複数を比較する場合とかで違ってくるわけだが。
やりたいことを全部書けよ。
0216205
2008/10/18(土) 19:19:53はい(´・ω・`)
比較する文字列はすべて違います。
webにアップロードされてる文字列に変更が加えられている物が無いかを
チェックするため、手元にコピーしておいた過去の文字列と、たった今web上
から落としてきた文字列を1つ1つ照らし合わせながら比較していきます。
その数が一回の処理でだいたい数千回に上るという仕様です。
0217デフォルトの名無しさん
2008/10/18(土) 19:27:12「異なっていること」を判断するのにハッシュはあまり役に立たない。
0218デフォルトの名無しさん
2008/10/18(土) 19:33:160219205
2008/10/18(土) 19:34:46す、すいません(´;ω;`)ブワッ
>>217
そうなんですか(´・ω・`)・・・
逆にハッシュを使った文字列比較が活躍する場所は何でしょうか( ´・ω・)?
0220デフォルトの名無しさん
2008/10/18(土) 19:35:36== or String.Equalsで良いと思う。
0221デフォルトの名無しさん
2008/10/18(土) 19:36:51ハッシュは文字列の場合はパスワードの認証とかに使われるし、それ以外ならほとんどバイナリの整合性を取るために使われる。
0222デフォルトの名無しさん
2008/10/18(土) 19:40:49保存されてる数千の文字列を総当たりで比較する場合とか。
ハッシュ作るのに相当なコストかかるから、比較の一方が1回しか
比較の対象にならないならば、効率が悪すぎる。
0223デフォルトの名無しさん
2008/10/18(土) 19:52:590224205
2008/10/18(土) 19:53:080225デフォルトの名無しさん
2008/10/18(土) 19:58:260226デフォルトの名無しさん
2008/10/18(土) 20:01:20つまりハッシュ値を事前に用意できるかどうか。
>>216の場合はハッシュによるふるいわけが適用可能な例に思える。
0227デフォルトの名無しさん
2008/10/18(土) 20:39:44こういう場合にハッシュを使う意味がある可能性があるのは、かなりサイズが大きい場合。
つまり全文をディスクから読む負荷がかなり大きい場合。
2ちゃんレスレベルなど、ハッシュ計算の自体の方がはるかに負荷が大きい。
ディスクからの全文読み込み負荷と、ハッシュのみ読み込み負荷の差が、
ハッシュ計算自体の負荷よりもずっと大きいなら効率化できるかもしれない。
ハッシュ計算結果を全部メモリにキャッシュしとけば別だが、
2ちゃんレスレベルならいっそ文字列全部キャッシュしてもいいくらい(件数によるが数千件レベルなら)。
そこまで性能にシビアでないなら何も考えず全文比較でいい。
0228デフォルトの名無しさん
2008/10/18(土) 20:49:05希望する動作を実現するのに最も簡単な方法を教えてあげてください
0229205
2008/10/18(土) 20:56:10> 2ちゃんレスレベルならいっそ文字列全部キャッシュしてもいいくらい(件数によるが数千件レベルなら)。
どうもです。
スタックに
string[] A = {"文字列", "文字列", "文字列", "文字列",・・・,"文字列"};
みたいな感じで格納して計算してもいいと思いますか?
0230デフォルトの名無しさん
2008/10/18(土) 20:56:30分かってるような感じでいい加減なことを言わんように
0231デフォルトの名無しさん
2008/10/18(土) 21:06:03あちこちで言われてる事ではあるけど
String.Equalsの方が早いと言っても微々たる差でしかないし
とくに初心者はString.Equals(String)ではなく、誤ってString.Equals(Object)を使ってしまう危険性が高い。
その場合、stringとintの比較のように型が異なっていてもエラーが出ずコンパイルが通ってしまい、バグの発見が遅れる可能性が出てくる。(実行時に例外発生)
問題点を教えずに使わせるのは良くないと思うんだ。
0232デフォルトの名無しさん
2008/10/18(土) 21:06:28初心者潰しをするか初心者を受けれるかはあなた次第
0233デフォルトの名無しさん
2008/10/18(土) 21:12:200234デフォルトの名無しさん
2008/10/18(土) 21:13:29>どの部分がいい加減なのかをきっちり指摘すればいいと思うんだよね。
は>>230宛てね。
0235デフォルトの名無しさん
2008/10/18(土) 21:14:030236デフォルトの名無しさん
2008/10/18(土) 21:15:500237デフォルトの名無しさん
2008/10/18(土) 21:29:42>2ちゃんレスレベルなど、ハッシュ計算の自体の方がはるかに負荷が大きい。
ディスク読み込みよりもハッシュ計算の方がはるかに思いといってるように読めるかもしれない。
→ここで書いたのは文字列比較よりもはるかに重いという意味
あとは、なんだ、ハッシュを暗号関連のハッシュではなく、.NETでのGetHashCodeによる
ハッシュの意味と思われてる可能性があるのかもしれないが、GetHashCodeの値はそもそも
ディスクに永続化なんぞしちゃいけない情報なのでこういう用途にはもともと使えないから除外してる。
あとはどこかいな?
0238デフォルトの名無しさん
2008/10/18(土) 21:32:080239デフォルトの名無しさん
2008/10/18(土) 21:39:41ハッシュを使う価値があるのは同じ文字列を複数回比較に使う場合
代表的にはn個の文字列の中に同じものが含まれるかどうかといった場合だ
文字列が長いとどうだとか瑣末な問題を全てであるかのように語っているのがいい加減だ
0240デフォルトの名無しさん
2008/10/18(土) 21:45:47int hash;
List<string> sl;
foreach(string str in getStrings())
{
hash = str.GetHashCode();
if(!cache.ContainsKey(hash))
{
sl = new List<string>();
cache[hash] = sl;
}
sl.Add(str);
}
string input = Input();
hash = input.GetHashCode();
if(cache.ContainsKey(hash))
{
sl = cache[hash];
if(sl.Contains(input))
Console.WriteLine("一致");
}
205じゃないけどhash使う場合ってこんな感じになんの?
0241デフォルトの名無しさん
2008/10/18(土) 21:49:35if(sl == null)
{
sl = new List<string>();
cache[hash] = sl;
}
こうか
0242デフォルトの名無しさん
2008/10/18(土) 21:50:48ハッシュの計算結果を使いまわさないと
0243デフォルトの名無しさん
2008/10/18(土) 21:55:07んなもん今回のケースと全く合わないから触れもせんかったわ。
最初から今回のケースに関わる場合という前提で書いたから。
0244デフォルトの名無しさん
2008/10/18(土) 21:59:09だいたい最初から一致判定の話あって、検索の話を書いてるのはお前だけだろう。
無論それを確認する意味はあるが、俺はあくまで用途がだいたい見えた状況以降を見て書いてる。
0245デフォルトの名無しさん
2008/10/18(土) 21:59:47今回のケースなら、同じ文字列を複数回比較に使わんのだから
文字列が長かろうと短かろうとハッシュを使う理由はない
0246デフォルトの名無しさん
2008/10/18(土) 21:59:53> ハッシュの計算結果を使いまわさないと
string input = Input();
hash = input.GetHashCode();
if(cache.ContainsKey(hash))
{
sl = cache[hash];
if(sl.Contains(input))
Console.WriteLine("一致");
}
の部分がループしてて何回も入力がある場合は意味があるって意味?
0247デフォルトの名無しさん
2008/10/18(土) 22:03:58少なくとも結論は間違ってる。
つまりハッシュを使う意味は>>216のケースではありうる。
こんな説明は無用だとは思うが、ハッシュの実装はいろいろありえて、
全文比較をするより軽くてかつそれなりに使える実装は考えうると思われる。
極端な話、>>216の用途に特化するなら文字数(バイト数)でもいい。
キャッシュしてあるデータのハッシュ値は事前に用意できることも考慮に入れれば、
全文を比較するよりずっと軽いと思う。
0248デフォルトの名無しさん
2008/10/18(土) 22:04:35やっぱり分かってないだろう。
文字列がかなり長いなら、ハッシュだけをディスクから読むことで効率化どきる可能性がある
って最初からそれを言ってるだけなのに。
それも可能性はあるって書き方しかしてないのに。
0249デフォルトの名無しさん
2008/10/18(土) 22:05:04GetHashCode()のコストは高いので、このhashを何回も使い回すような
状況じゃなければ、直接文字列比較した方がよい、って意味。
1回比較して捨てちゃうんだったら意味ない。
0250デフォルトの名無しさん
2008/10/18(土) 22:10:480251デフォルトの名無しさん
2008/10/18(土) 22:12:54そして今回のケースは違う場合を調べたいのだから、一致しても結局全文検査が必要。
暗号ハッシュなら現実的に一致は無視できるが。
暗号ハッシュじゃなくて現実的に一致を無視できるようなハッシュは作れるかもしれんが、
それは全文検査が必要だということは分かるだろう?
つまり最初から全文一致検査したほうが早い。
よって、ディスクから読むなど、対象文字列の準備に負荷がかかる場合しか意味がない。
あと俺はもともと、キャッシュした場合の話も書いてる。
0252デフォルトの名無しさん
2008/10/18(土) 22:13:31ほうほうなるほど、そんな重いのか
適当に数千件の文字列食わせてhash使わない実装と比較してみる
ありがと
0253デフォルトの名無しさん
2008/10/18(土) 22:17:37もちろん
0254デフォルトの名無しさん
2008/10/18(土) 22:19:31>現実的に一致を無視できるようなハッシュ
そんなものは必要ないんだよ。
元のデータが違っててもハッシュ値が一致する確立が十分小さければ必要十分。
分かってるのかな
0255デフォルトの名無しさん
2008/10/18(土) 22:20:36ハッシュを作るには長い文字列をまずディスクからとってくる必要がある
このケースでは文字列を一回しか読まないんだからハッシュを使う意味はない
>>249
Dictionaryの方のハッシュが何回も使われている
文字列の長さ×文字列数の比較が
文字列の長さ分のハッシュ値の取得になっている
ものすごく意味あるだろ
0256デフォルトの名無しさん
2008/10/18(土) 22:25:51最新の情報で変化があったものだけを抽出したい。
ディスクに対象の文字列がすでに大量に保存されている。
もし一つ一つの文字列がかなり長いなら、文書を保存する際にそれぞれ暗号的なハッシュを求めて
ディスクに保存しておき、比較時は最新の文字列のハッシュを計算、ディスクからはハッシュだけを読むことで、
長い文字列を大量に読み込む負荷を節約できる。
ハッシュだけならそもそも事前ににディスクからすべて読み出しておくこともできる。
だが文字列が短いならそもそも全文を事前にディスクからよんでキャッシュしておけば、
いちいちハッシュ計算するよりも全文一致検査の方が早い。
だから文字列がかなり長くないと意味がない。
文字列がかなり長いなら意味がある可能性はある。
0257デフォルトの名無しさん
2008/10/18(土) 22:29:10今回のケースの用途から察するに、この処理を定期的に繰り返すんだろ。
おれはその想定で書いてる。
取ってきた文字列を保存するときに、ハッシュも同時に求めて保存しておく。
変更のある文字列は一部だと俺は予想していた。
これはまあ実際には違うかもしれないな。
だからほとんどの文字列は何度も比較されるから、ハッシュを事前に求めて保存しておく意味があると考えた。
多くが変わるのなら意味はない。
0258デフォルトの名無しさん
2008/10/18(土) 22:29:24>>216
>チェックするため、手元にコピーしておいた過去の文字列と、たった今web上
>から落としてきた文字列を1つ1つ照らし合わせながら比較していきます。
ちゃんと嫁
0259デフォルトの名無しさん
2008/10/18(土) 22:33:59>いちいちハッシュ計算するよりも全文一致検査の方が早い
だからハッシュっていったっていろんな実装がありうるっていってるのに。。
例えば簡単な一例として、下位2バイトが文字列のバイト数、上位2バイトが文字列の
真ん中の文字の文字コードとする4バイトの値を生成するハッシュ関数でも
それなりに使えそうだし、これなら比較よりずっと軽そうなのは想像できるでしょ?
0260デフォルトの名無しさん
2008/10/18(土) 22:39:59どういうこと?
俺が想定していたのはこんな感じなわけ。
数千件のデータがあり、定期的に最新のものをとりに行く。
で変わったものだけを抽出して何か処理したい。
変わっているとしてもごく一部のデータの場合が多く、全く変わっていない場合もある。
変わっていた場合は、変わっていた文字列を最新情報として保存しなおすんだと思った。
>>216を読んでこう予想したわけだけど。
何かとんでもなく読み違えているかな?
まあともかく俺は、上のように予想して、なら文字列が長いならハッシュを利用する意味がある
可能性はあるだろうと書いた(ここでのハッシュは一応暗号的なハッシュ)。
しかし今回は文字列の一つ一つは短いらしいから意味はないと書いた。
0261デフォルトの名無しさん
2008/10/18(土) 22:43:37あのな、ハッシュを計算して比較して、で、どうするわけ?
変わってるものを抽出したいんだろう?
ならそんな方法でハッシュを計算しても、一致した場合、
結局全文を一致検査しないと本当に変わってないかは分からない。
※そんなハッシュ計算じゃ一致しても本当に変わってないかチェックが必要なのはわかるだろう?
ハッシュが違った場合、確実に変わっていると判断できるが、
一致した場合は結局全文の検査が必要だろうが。
0262デフォルトの名無しさん
2008/10/18(土) 22:47:22もともとハッシュというのはそういうものだから。
それでも>>254に書いたとおり、元のデータが違っていてもハッシュ値が一致する
確率が十分小さければ意味がある。
小学生でもわかる理屈だと思うけどなこれ。
0263デフォルトの名無しさん
2008/10/18(土) 22:50:34ほとんどがガラッと変わってる前提で、変わってないものを抽出したいなら意味はあるかもしれないが、
Webの情報というと、文字列の一部だけが変わってる可能性もあると予想できる。
長さが変わってる可能性は高いだろうが、それは文字列のただの一致判定でも最初にチェックされるから、
わざわざハッシュでやる意味はない。
そういう簡単なハッシュの意味が出るとしたら、文字列の多くの場所が変わってる前提
かつ、数千件の文字列の多くが変わっている場合だろう。
おれはそんな前提とは思えなかった。
0264デフォルトの名無しさん
2008/10/18(土) 22:54:36>それでも>>254に書いたとおり、元のデータが違っていてもハッシュ値が一致する
>確率が十分小さければ意味がある。
それには、>>263で書いたような前提が必要。
ガラッと変わっていない文字列でも一致の可能性を低くするには、
文字列の多くの場所を検査する必要があり、そうなるとただの一致検査に対する
パフォーマンスのメリットも小さくなる。
その上偶然一致する危険も無視できない。
無視できるほど小さくするには、文字列のずべてを使う必要がある。
まあ、ちょっとくらい違っても一致でいいやって思ってるなら、
そもそも話が合わないのでもういい。
0265デフォルトの名無しさん
2008/10/18(土) 22:57:59だから無視できるほど小さくする必要なんてないんだってば。。
アバウトな言い方をすれば、一致する確率が両者の方法のパフォーマンスの比より
小さければ十分でしょ。
そしれそれがそんなに実現困難な目標とは思えん。
0266デフォルトの名無しさん
2008/10/18(土) 22:59:31>>>261
>もともとハッシュというのはそういうものだから。
それはハッシュテーブルなどで使う用途。
結局一致した場合は後できちんと一致比較する前提。
GetHashCodeなどの場合(といってもGetHashCodeも全文使って重いが)。
で、暗号的なハッシュは、現実的にそれが無視できるほど確率が低い。
もともと似た文字列で一致することがないように設計されているから。
0267デフォルトの名無しさん
2008/10/18(土) 23:07:23>アバウトな言い方をすれば、一致する確率が両者の方法のパフォーマンスの比より
>小さければ十分でしょ。
それが意味があるのは、文字列の多くが変わってる可能性が高い場合。
その場合は、ハッシュが一致することが少ないので、変わってることを早く確認できる。
一致した場合のみ、全文確認すればいいから。
でも何度もそうは思えないって書いてる。
多くの文字列が変化してないなら、多くの場合ハッシュは一致するんだから、
多くの場合に全文の一致検査が必要になる。
つまりメリットは少ない。
つうかな、長さの比較レベルまでハッシュに含めたら、
もはやハッシュの話を別にする意味ないだろ。
それは単なる文字列の一致検査の実装のチューニングだ。
多分そういう感覚でいってるんだな?
なんとなく話題にしてるハッシュの前提が根本的に違うことは分かったわ。
0268デフォルトの名無しさん
2008/10/18(土) 23:12:560269デフォルトの名無しさん
2008/10/18(土) 23:19:44ガラッと変わってれ場合はかなり速い可能性が高い。
でもガラッと変わってなければ、簡単なハッシュじゃ一致する可能性が高い。
単なる長さ検査なら全文一致検査でも既にやってる。
やっぱりあんまり効果があるとは思えない。
0270デフォルトの名無しさん
2008/10/18(土) 23:27:260271デフォルトの名無しさん
2008/10/18(土) 23:37:07ハッシュが一致してたら一致、一致してなければ不一致とみなす。
そうじゃないと世の暗号や署名なんか成り立たないじゃないか。
んで、本題に戻ると、文字列比較なんかREPE CMPSBすりゃ一発だから、
単純比較のためにハッシュを利用する意味はない。IOを考慮するなら
確かに意味があるケースもあるような気はするが。
0272デフォルトの名無しさん
2008/10/18(土) 23:48:31まあさすがに長さ検査はハッシュとは呼ばんと思うが。
0273デフォルトの名無しさん
2008/10/18(土) 23:51:52最低限の常識さえ踏まえていれば後は実際に問題になってから考えればいい
0275デフォルトの名無しさん
2008/10/19(日) 02:35:53逆操作が難しいってのは暗号に使うハッシュ関数の特徴であるけれども、
それは衝突が起こらない/起こりにくいという意味ではない。
そもそも128bitとかそこらで、どれだけの長さの文字列が表現できると思ってるんだ。
0276デフォルトの名無しさん
2008/10/19(日) 02:51:10GetPixelでは遅すぎて困ってます。
高速に処理するにはどうしたらいいのでしょうか?
// Image imgを
// byte[] r;
// byte[] g;
// byte[] b
0277デフォルトの名無しさん
2008/10/19(日) 02:53:370278デフォルトの名無しさん
2008/10/19(日) 03:04:14長さ?
0279デフォルトの名無しさん
2008/10/19(日) 03:09:490280デフォルトの名無しさん
2008/10/19(日) 03:11:55128bitの空間でハッシュが衝突しないようにするには、
どれだけの長さまでの文字列を保持できるのか、って話なんじゃね。
0281デフォルトの名無しさん
2008/10/19(日) 03:27:090282デフォルトの名無しさん
2008/10/19(日) 03:28:39現実に衝突発生の「確率」が低ければよい。
0283デフォルトの名無しさん
2008/10/19(日) 03:31:14一般に確率的にしか衝突を起こせない場合、
十分なビット数があればそれでいい。
そして普通はそれを、衝突が発生しにくい、という。
そして、暗号ハッシュは衝突が発生しにくいのが大前提、と表現する、普通は。
0284デフォルトの名無しさん
2008/10/19(日) 03:32:470285デフォルトの名無しさん
2008/10/19(日) 04:33:09ちょうどいい記事があった。
ttp://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_021/cs2_021_04.html
0286デフォルトの名無しさん
2008/10/19(日) 06:19:51具体的には、
class A
{
public string text;
public A(string text) { this.text = text; }
}
int main()
{
string text = "abc";
A a = new A(text);
text = "def";
Console.WriteLine(text);
Console.WriteLine(a.text);
}
で、最後の出力がどちらも def になるような動作にしたいのです。
0287デフォルトの名無しさん
2008/10/19(日) 06:23:200288デフォルトの名無しさん
2008/10/19(日) 06:45:23どうもでした!
0289デフォルトの名無しさん
2008/10/19(日) 09:43:51>>285はなんでこんな変なことしてるんだろう
普通はBitmap.LockBitsを使う
0290デフォルトの名無しさん
2008/10/19(日) 09:51:18色々定石とかできてなかったんだよ
0291デフォルトの名無しさん
2008/10/19(日) 10:55:20「MemoNyanDum」
http://junki.lix.jp/
こちらのサイトのここを見るといい
「C#(GDI+) : Bitmap の内部色データにアクセスする (1)」
http://junki.lix.jp/csgr/002ColorDataAccess1.htm
0292デフォルトの名無しさん
2008/10/19(日) 19:53:30/// <summary>
///
/// </summary>
に変換されるんですがこれなんですか?
0293デフォルトの名無しさん
2008/10/19(日) 19:55:290294デフォルトの名無しさん
2008/10/19(日) 19:57:47ちなみにスラッシュ2回じゃ何もおこらず、3回目で変換された理由は何でしょう?
0295デフォルトの名無しさん
2008/10/19(日) 20:02:550296デフォルトの名無しさん
2008/10/19(日) 20:03:130297デフォルトの名無しさん
2008/10/19(日) 20:17:140298デフォルトの名無しさん
2008/10/19(日) 20:18:38構造体を返すメソッドを記述しているんだけどエラーが発生したときの処理に困ってる。
エラーを探知したら終了させるようにしたいんだけどコンパイルするときに
「構造体を返すメソッド書いてんだからエラーが発生したときもちゃんと構造体を返せ( ゚Д゚)ゴルァ!!」
って怒られちまった。
エラーが発生したときに返す構造体なんて全く想定していなかったわけだがこういうときって
何を返せばいいんだろうか?
ちなみに
return null;
じゃコンパイルは通らなかった。
0299デフォルトの名無しさん
2008/10/19(日) 20:22:56空の構造体でも返せばいいんじゃね?
0300デフォルトの名無しさん
2008/10/19(日) 20:29:12>「構造体を返すメソッド書いてんだからエラーが発生したときもちゃんと構造体を返せ( ゚Д゚)ゴルァ!!」
そんなこと言うわけないと思うが。
こんなスレで質問するご身分なんだから、コンパイラ様のお言葉を勝手に意訳せずに
「ありのまま」書くべきなんじゃないのか?
0301デフォルトの名無しさん
2008/10/19(日) 20:29:12でTry...パターンを追加
0302デフォルトの名無しさん
2008/10/19(日) 20:29:40複数個のデータを効率よく渡そうと思って構造体を使った。
クラス的な活用方法はしないから構造体で十分かなと。
> 空の構造体でも返せばいいんじゃね?
return new myStruct();
↑こういうこと?こんな方法使っていいのかな?
0303デフォルトの名無しさん
2008/10/19(日) 20:32:50intを返すメソッドで何らかの例外的な場合には0や-1を返したりするだろ。
nullを返すか?
クラスじゃなくてあえて構造体を使うなら、初期状態の構造体を返すなり
構造体メンバにフラグやメッセージを含めてそれにわかるようなもんを入れて
返したりするのがいいんじゃね
0304デフォルトの名無しさん
2008/10/19(日) 20:34:580305デフォルトの名無しさん
2008/10/19(日) 20:41:130306デフォルトの名無しさん
2008/10/19(日) 20:41:43同じ意味だけどreturn default(myStruct);の方が誤解を生まない
0307デフォルトの名無しさん
2008/10/19(日) 20:41:570308デフォルトの名無しさん
2008/10/19(日) 20:42:45こんな方法があったとは・・・
C#って奥が深いな・・・
0309デフォルトの名無しさん
2008/10/19(日) 20:42:520310デフォルトの名無しさん
2008/10/19(日) 21:02:520311デフォルトの名無しさん
2008/10/19(日) 21:20:21throw Exception()
すれば戻り値設定しなくてもコンパイル通るの?
0312デフォルトの名無しさん
2008/10/19(日) 21:21:240313デフォルトの名無しさん
2008/10/19(日) 21:39:58愚問だよ。
例外を投げるって意味が分かってる?
0314デフォルトの名無しさん
2008/10/19(日) 21:48:18当たり前の事だが、正常処理の戻り値は設定する必要はあるぞ。
で、例外というのは、その正常処理を続行出来なくなった時に、
処理を強制終了させる仕組みだから。
0315デフォルトの名無しさん
2008/10/19(日) 22:51:55new がないからコンパイルは通らんね。
0316デフォルトの名無しさん
2008/10/19(日) 23:18:230317デフォルトの名無しさん
2008/10/19(日) 23:22:060318デフォルトの名無しさん
2008/10/20(月) 00:32:22詳細な方法や情報はありませんか?
ちょっと好奇心でやってみたらどうもうまく行かなくて突っかかっています
0319デフォルトの名無しさん
2008/10/20(月) 00:40:36単純な例で良ければ。
http://msdn.microsoft.com/ja-jp/magazine/cc163435.aspx
0320デフォルトの名無しさん
2008/10/20(月) 00:41:01残念だが同じ意味ではない。
return default(myStruct);
の方がいいのは事実だが。
0321デフォルトの名無しさん
2008/10/20(月) 00:44:44ごめん>>319じゃほとんどコード無かったから、代わりにこっちを。
http://www.danielmoth.com/Blog/2006/06/vista-glass-in-c_17.html
0322デフォルトの名無しさん
2008/10/20(月) 02:00:10二次元配列で格納してあるデータをそれぞれX軸Y軸に対応させて
linePlot.AbscissaData = test[j,0];
linePlot.OrdinateData = test[j,1];
のように設定しfor文でjを変えてデータをどんどんグラフに点を加えさせていきたいのですが上手くいきません。
どのように設定すればよいのか、ご存知の方ご指導お願いします
0323デフォルトの名無しさん
2008/10/20(月) 02:03:170324デフォルトの名無しさん
2008/10/20(月) 04:38:46それforで回したら上書きされて最後のデータしか残らないやん
AbscissaDataとOrdinateDataにはコレクション入れるんでないの?
0325デフォルトの名無しさん
2008/10/20(月) 06:22:221ドットだけ描画するにはどうすればいいのでしょうか?
drawlineで 1,1,1,1 にしても何も表示されませんでした。
0326デフォルトの名無しさん
2008/10/20(月) 09:21:58FillRectangleで代用かな
0327デフォルトの名無しさん
2008/10/20(月) 11:41:14基本的には前方読み取りのみだから。
0328デフォルトの名無しさん
2008/10/20(月) 12:29:36今、平均点を求めるクラスを作り
heikinten Asan = new heikinten();
でAさんの平均点を求めることが出来るようになりました
これをAさん固定ではなく
Bさん、Cさん、、、、Zさんなど
いろいろな名前が記載されてるname.txtから人数を数えて
その人数分だけそれぞれ平均点を求めたいと思っています
人数に応じて動的にheikintenクラスをオブジェクト化する方法は無い物でしょうか
こんな方法もあるぞみたいなのがありましたら教えていただけないでしょうか
よろしくお願いいたします
0329デフォルトの名無しさん
2008/10/20(月) 12:57:55heikinten[]
0330デフォルトの名無しさん
2008/10/20(月) 13:01:08人数を数える方法はいいのかな?
人数がわかればその分だけList<heikinten>に突っ込めばいいんじゃないかな?
List<heikinten> people = new List<heikinten>();
for (int i = 0; i < 5; i++)
people.Add(new heikinten());
0331デフォルトの名無しさん
2008/10/20(月) 13:17:24for分のi<5は人数を入れてね
List<heikinten> people = new List<heikinten>();
for (int i = 0; i < 人数; i++)
people.Add(new heikinten());
0332デフォルトの名無しさん
2008/10/20(月) 13:24:02StudentクラスにAverageメソッド用意するのが普通だろうと
0333デフォルトの名無しさん
2008/10/20(月) 13:48:30思った通りのことが出来ました
ありがとうございます
人数を数える方法は 改行コードをカウントして行けばいいかなと思っていますので
ファイル操作周りを勉強してやって行こうと思います
0334デフォルトの名無しさん
2008/10/20(月) 14:02:59中には計算が無意味なケースもあり、そういうときはNullableの変数を返して
大元の呼び出しもとでの処理に役立てようと思っています( .hasValueフィールドで
Nullableかどうか判別がつきます)。
そこで普通の変数と、Nullableの両方を返すメソッドを書くことにしました。
public Nullable<int> Method(int x)
{
・・・(処理)・・・
if (計算が無意味なケース)
{
return Nullable<int> null;
}
return (計算結果);
}
↑のように実装したところ、return Nullable<int> null; のところでエラーが出てしまいました。
そこでこの部分を、
Nullable<int> i = null;
return i;
としたところ問題なく通ったのですが、Nullableを返すためだけにわざわざNullable型の変数iを
宣言してやる必要はあるのでしょうか?なにか無駄なことをやっているような気がしてならないのですが。
0335デフォルトの名無しさん
2008/10/20(月) 14:10:58でいいんじゃないかな
return Nullable<int> null;はたとえばintの3を返すときに
return int 3;
とかやるようなもんだべ
0336デフォルトの名無しさん
2008/10/20(月) 14:27:15> return null;
> でいいんじゃないかな
( ゚д゚)!
うわぁ・・(;´・ω・)、それで通っちゃいましたorz・・・
お騒がせしてすいません(´・ω・`)
0337デフォルトの名無しさん
2008/10/20(月) 15:38:22余計なお世話かもしれんが、int.TryParseとかDictionary<T>.TryGetValueみたいに
Public bool Method(int value, out int result){
{
・・・(処理)・・・
if (計算が無意味なケース)
{
return false;
}
result = (計算結果);
return true;
}
こうした方が良くないかね?
0338デフォルトの名無しさん
2008/10/20(月) 16:11:00処理を明確化する意味でもNullableを使わずにbool値を使った方がいいでしょうか?
逆にNullableを活用すべき分野はどういったところでしょうか?
0339337
2008/10/20(月) 16:18:23俺は使ったことないから分からんけど、たとえばPoint構造体を使って座標計算をするときに、
普通にPoint p = new Point(); とやるとX=0,Y=0の構造体ができちゃうけど、それをそのまま座標計算に
使われると困ってしまうような設計のクラスライブラリとかで、Nullable<Point>とかを使うとか。
あくまで想像だが。
処理を分岐させたいだけだったらやっぱり>>337の方法にすべきだと思う。
0340デフォルトの名無しさん
2008/10/20(月) 16:21:310341デフォルトの名無しさん
2008/10/20(月) 16:22:29よく使われる例だけど
データベースなどでは、通常の(有効な)値と null(無効な値)を取る型が使われる為、Nullable型があると便利。
0342デフォルトの名無しさん
2008/10/20(月) 16:30:07-データベースや行列のように大量のデータを一括して扱うときにNullable型を活用すると
処理に一貫性が出て楽
-一つ一つの処理を確実に行いたいときは戻り値にbool型で計算の可否を判定、計算結果の値は
参照型として渡す
というのが定石ということですね?
0343デフォルトの名無しさん
2008/10/20(月) 16:37:580344デフォルトの名無しさん
2008/10/20(月) 17:44:56publicなフィールドと両方publicな自動プロパティ、具体的に動作が異なるのはどんな時でしょうか?
0345デフォルトの名無しさん
2008/10/20(月) 17:50:36virtual とかできる。
0346デフォルトの名無しさん
2008/10/20(月) 17:57:05Console.Write("{0,10}", num);
上記の例は数字numを10桁分のスペースに右詰めで表示させよ、という意味です。
この「10桁分」のところを変数にして、状況に応じて任意のスペースにさせたいのですが
プログラムはどう書けばよろしいでしょうか?
任意のスペースを表す変数を n とします。
おそらく
Console.Write("{0, n}", num);
とするとエラーが生じてしまうと思います。
他に方法はあるでしょうか?
0347デフォルトの名無しさん
2008/10/20(月) 18:08:43Console.WriteLine(fmt, num);
0348デフォルトの名無しさん
2008/10/20(月) 18:09:22画像一覧部分でのスムーススクロールってどうやるのでしょうか?
ListViewで画像一覧は出せたのですが、スムーススクロールもやってみたいのです。
画像に限らずスムーススクロールの仕組みを教えていただけるとありがたいです。
0349デフォルトの名無しさん
2008/10/20(月) 18:20:05逆に言えばvirtualをつけなければ、同じなんですね。ありがとうございました。
0350デフォルトの名無しさん
2008/10/20(月) 18:26:56どうもです
0351デフォルトの名無しさん
2008/10/20(月) 18:36:300352デフォルトの名無しさん
2008/10/20(月) 19:57:56後でフィールドを何の問題もなくプロパティに変更することはできないから,
とりあえず何も考えずプロパティにしとけ
>>320
>>302の場合はまったく同じだよ
違いが出るのは対象がジェネリック型パラメータの場合のみ
0353デフォルトの名無しさん
2008/10/20(月) 20:01:16{
//なぜか設定の保存が出来ない
Settings.Default.SettingFont = textBox1.Font;
}
private void Form1_Load(object sender, EventArgs e)
{
//なぜか設定の読み込みができない
textBox1.Font = Settings.Default.SettingFont;
}
SettingFontはSystem.Drawing.Font型です
エラー警告メッセージ出ません
両辺を逆にしても駄目でした
複雑なコードにしたくありません
処理の早さ等は考慮しません
よろしくおねがいします
0354デフォルトの名無しさん
2008/10/20(月) 20:05:03Saveしてない、なんてオチではないだろうな
0355デフォルトの名無しさん
2008/10/20(月) 20:10:32それはあまりにも…w と思い書けなかった
0356デフォルトの名無しさん
2008/10/20(月) 20:18:13下の二つのイベントハンドラを有効にして
いま下の怪しいところにSave();を足してみました
private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) {
// SettingChangingEvent イベントを処理するコードをここに追加してください。
}
private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) {
Save();
// SettingsSaving イベントを処理するコードをここに追加してください。
}
これでもエラーでませんでしたが
保存できていません、もしくは読み込まれていませんでした
>>353のコードにも何か書くのですか?
0357デフォルトの名無しさん
2008/10/20(月) 20:19:30勇気を持って全てをさらけ出してくれませんか?
わからないんです
0358デフォルトの名無しさん
2008/10/20(月) 20:26:28を書いてなけりゃSaveされんだろう?ってことだったんだけど。
0359デフォルトの名無しさん
2008/10/20(月) 20:39:09private void Form1_FormClosing(object sender, EventArgs e)
{
//なぜか設定の保存が出来ない
//↑出来ました
Settings.Default.SettingFont = textBox1.Font;
//今、感動して涙が止まりません
Settings.Default.Save(); //Saveって本当に良いものですね
//ありがとうございました
}
0360デフォルトの名無しさん
2008/10/20(月) 21:03:330361デフォルトの名無しさん
2008/10/20(月) 22:17:35レスありがとうございます。
DWMを利用するまでは自分でも何とか検索して出来たのですが、ボタン等のコントロール上の黒色が
透明化されてしまう、という問題があったので、それについて調べた所
ttp://piece.coron.jp/weblog/archives/2007/05/14/012953/
こちらのサイトで、UseCompatibleTextRenderingをtrueに変更してやる方法、というのがあったのですが
どうも使い方が分かりません、Program.csにてApplication.SetCompatibleTextRenderingDefault(true);に
してみたのですが、全く状況が変わりません
自分のレベルではまだこのようなことをするのは早いのでしょうか?
DWMは情報が少なすぎて困っています・・・
0362デフォルトの名無しさん
2008/10/20(月) 22:21:42UseCompatibleTextRenderingはButtonやLabelとかの一部のコントロールにプロパティとして存在する。
0363デフォルトの名無しさん
2008/10/21(火) 11:56:48やりたいことは、Columnsのようにプロパティ名[インデクサ]が実装したいのと
Columns[i].Visible=false等で親クラスにプロパティ変更を知らせることです。
初めはColumnsクラスにイベントを作って親クラスに知らせる方法を考えたのですが、
その方法だと外からColumnsのイベント一覧が見えてしまいます。
そもそもそんなやり方は一般的ではないのでしょうか?宜しくお願いします。
0364デフォルトの名無しさん
2008/10/21(火) 12:06:59> Columns[i].Visible=false等で親クラスにプロパティ変更を知らせることです。
このVisibleの変更はDataGridViewColumn.Visibleの変更であってColumnsとは関係ない
まあ実際には大抵internalでDataGridView持ってたりするけどな
0365363
2008/10/21(火) 12:34:44早速試してみたのですが、internalを指定しても外部から見えてしまうのですが…
[test1.cs]
public class Data
{
internal Parent parent;
}
[test2.cs]
Data test=new Data();
test.parent=null; ←通ってしまう
internalって別ファイルからは参照できなくなると理解したつもりなのですが違うのでしょうか?
0366デフォルトの名無しさん
2008/10/21(火) 12:37:45exe/dll単位。
0367363
2008/10/21(火) 12:44:57すると同アセンブリ内では隠しようがないんですね。フレンドもないようですし…
となるとデータクラスのコンストラクタで親クラスを渡すしかなさそうに思えます。
ただ、データクラスのプロパティ変化時に親クラスのプライベートな処理を走らせることも難しそうですね^^;
DataGridであればColumnクラスのWidth等変更時にグリッドの表示幅が更新されたりしていますが
あれはどういったメカニズムなんでしょうか…
さらに言えば、コレクションクラスにはデフォルトでRemoveAtが実装されているようですが、
これでは外部から削除できてしまいます。外部から要素数の変更はさせたくない場合、
コレクションクラスの実装は向かないのでしょうか…
混乱してきた・・・・長々とすみませんm(_ _)m
0368デフォルトの名無しさん
2008/10/21(火) 12:50:59> DataGridであればColumnクラスのWidth等変更時にグリッドの表示幅が更新されたりしていますが
> あれはどういったメカニズムなんでしょうか…
別にevent使ってもいい。
DataGridViewColumn.Widthなら多分DataGridViewのinternalなメソッド呼び出してる。
いやまあ再描画だけならInvalidate呼び出すだけだけどな。
> さらに言えば、コレクションクラスにはデフォルトでRemoveAtが実装されているようですが、
> これでは外部から削除できてしまいます。外部から要素数の変更はさせたくない場合、
> コレクションクラスの実装は向かないのでしょうか…
やらせたくないなら例外投げればいいだけ。
0369デフォルトの名無しさん
2008/10/21(火) 13:09:38イベントで実装もありかと思うのですが、何れにしろ同アセンブリ内なので
外部クラスからイベントの定義も出来てしまいますね。そこだけが問題です。
しかし実装自体は出来そうなので頑張ってみます。ありがとうございました!
0370デフォルトの名無しさん
2008/10/21(火) 13:57:37それとも整数は特殊な事情がない限りintで統一するべきですか?
0371デフォルトの名無しさん
2008/10/21(火) 14:22:31実際VB7では扱い面倒だったしな
private/internalならお好きに
0372デフォルトの名無しさん
2008/10/21(火) 15:00:49ARRAY[*,0]に得点を入れて
ARRAY[*,0]の順番は変更しないで
ARRAY[*,1]に順位を作成したいと思いるのですがいい方法が浮かばないで困っています
皆さん何かいい方法は無いものでしょうか
0373デフォルトの名無しさん
2008/10/21(火) 15:01:27> 符号なし整数はCLS非準拠なので他の言語で使えないかもよ、と
おお、そういう落とし穴があったとは・・・
int型に統一させていただきますm(_ _)m
0374デフォルトの名無しさん
2008/10/21(火) 15:03:30心底意味が分からん。
具体的に値入れて説明してくれ。
0375デフォルトの名無しさん
2008/10/21(火) 15:13:44で白文字以外にカラフルな文字を表示させることってできませんか?
それが無理なら反転文字とか、アンダーライン文字とか、目立つ文字を表示できないでしょうか?
文書の一部分を強調表示したいんです。
0376デフォルトの名無しさん
2008/10/21(火) 15:18:49分かりにくくて申し訳ないです
詳しく書くと
int[,] array = new int[8,2];
array[0,0]=100;
array[1,0]=10;
array[2,0]=80;
array[3,0]=20;
array[4,0]=90;
array[5,0]=40;
array[6,0]=60;
array[7,0]=30;
という得点が入ってるとして
得点によって順位を決めて隣の要素に入れて行きたいと思っています
array[0,1]には1
array[1,1]には8
array[2,1]には3
array[3,1]には7
array[4,1]には2
array[5,1]には5
array[6,1]には4
array[7,1]には6
といった感じに、、、、
まだ分かりにくいかもしれないのですが
何かいい方法無い物でしょうか
0377デフォルトの名無しさん
2008/10/21(火) 15:40:49Console.ForegroundColor = ConsoleColor.Red; とかで切り替えればいいかも。
0378デフォルトの名無しさん
2008/10/21(火) 15:49:39ありがとうございます、無事変えられました
0379デフォルトの名無しさん
2008/10/21(火) 16:09:19static void setRank(int[,] array)
{
SortedList<int, int> sl = new SortedList<int, int>();
for(int i = 0; i < array.GetLength(0); i++)
{
sl.Add(array[i, 0], i);
}
int rank = 1;
foreach(var kvp in sl.Reverse())
{
array[kvp.Value, 1] = rank++;
}
}
こうかな、なんかもっとうまく書けそうで俺には書けなかった
0380デフォルトの名無しさん
2008/10/21(火) 17:20:37こういうのって、「もっとエレガントにかけるかも」って思ってしまうよな…w
0381デフォルトの名無しさん
2008/10/21(火) 17:21:25配列の順番が逆だったりします。というわけで計算結果は配列の先頭からではなく最後尾から
先頭に向かって格納する必要があるわけですが、これを実現するには
a) とにかくもうひとつ仮の配列(同サイズ)をつくり、何も考えずに先頭から計算結果を
詰め込む。全ての計算結果が出たところで本来の配列に後ろから値をコピーしていく。
b) 配列の要素数を表すstaticな変数を準備し、その変数を参考に配列に書き込む場所を特定する。
配列に書き込むたびにそのstaticな変数を -1 することで保存すべき配列の位置を特定することができる。
c) 配列をNullable型として宣言し、書き込む位置はnullが格納されている最後尾と決めれば
後ろからデータを格納することができる。
d) c)の亜種。配列を用意し、あり得ない数字(0とか-10000とか)で初期化する。
あり得ない数字の最後尾からデータを格納していけば後ろからデータを詰めていったことになる。
ざっと考えて上記のa)〜d)が思いついたんですがどの方法がいいでしょうか?
あるいは他に方法がありますか?
0382デフォルトの名無しさん
2008/10/21(火) 17:33:27そうでないならList<>に突っ込んでいって最後にReverseすればいいだろ
0383デフォルトの名無しさん
2008/10/21(火) 17:40:32どうすればいいでしょうか?
例えば、
label1.AutoSize=true;
label1.TextAlign=TopRight;
for(int i = 0; i < 10; i++) label1.Text += "あ";
では右に伸びていってしまいました。
0384デフォルトの名無しさん
2008/10/21(火) 17:40:41> 初めから要素数が分かってるならbで十分だし(ていうか何故static?)
> そうでないならList<>に突っ込んでいって最後にReverseすればいいだろ
もしかしてReverseってList<>だけでなく普通の配列にも使えたりしません?
要素数は分かっているので何も考えず計算結果を配列に突っ込んだ後
最後にReverseかければa)〜d)のようなややこしいことをするまでも無い気が・・・
0385デフォルトの名無しさん
2008/10/21(火) 17:44:230386デフォルトの名無しさん
2008/10/21(火) 18:35:45> そうでないならList<>に突っ込んでいって最後にReverseすればいいだろ
List<>型に対してReverseはどう使えばいいでしょうか?
List<int> a;
に対して
Array.Reverse(a);
としたらエラーが返されてしまったのですが。
ちなみに一般的な配列なら問題ありませんでした。
0387デフォルトの名無しさん
2008/10/21(火) 18:39:170388デフォルトの名無しさん
2008/10/21(火) 18:50:32ありがとう( ´∀`)
0389デフォルトの名無しさん
2008/10/21(火) 19:36:09値型なら問答無用でout/refを付ければいいとして、参照型の変数のときはどうすればいいでしょうか?
参照型なら別にout/refは付けなくてもメソッド先での変更はちゃんと反映されるかと思いますが・・・
0390デフォルトの名無しさん
2008/10/21(火) 19:42:150391デフォルトの名無しさん
2008/10/21(火) 19:45:00void f(out object o)
{
o = new object();
}
0392デフォルトの名無しさん
2008/10/21(火) 19:56:440393デフォルトの名無しさん
2008/10/21(火) 20:23:58どうしても必要な場合以外は基本的に参照渡しは使わない,でいいと思う
0394デフォルトの名無しさん
2008/10/22(水) 00:04:42一次元配列ならこれだけなんだがなぁ
var array = new[] { 100, 10, 80, 20, 90, 40, 60, 30 };
var indices = Enumerable.Range(0, array.Length).ToArray();
Array.Sort(array, indices);
てか、誰か指摘してやれよ
>>376の問題に多次元配列を使うこと自体が愚策だと
0395デフォルトの名無しさん
2008/10/22(水) 00:07:160396デフォルトの名無しさん
2008/10/22(水) 01:50:42わざわざクラスではなく構造体でメソッドを定義できるようにした意味は何でしょうか?
メソッドを書くならクラスにするよう統一しても良かったと思いますが・・・
0397デフォルトの名無しさん
2008/10/22(水) 01:58:070398デフォルトの名無しさん
2008/10/22(水) 02:09:360399デフォルトの名無しさん
2008/10/22(水) 02:26:02他は全部classとstructは一緒。
>>396はC#におけるクラスと構造体の違いを知りたいの?
0400デフォルトの名無しさん
2008/10/22(水) 03:17:060401デフォルトの名無しさん
2008/10/22(水) 05:02:37C++においての違いはほぼ無い。
C#においての違いはそれよりある。
0402デフォルトの名無しさん
2008/10/22(水) 08:35:52そもそも、C++の構造体にもメソッドが定義できるわけだが。
0403デフォルトの名無しさん
2008/10/22(水) 08:51:43結局それが、慣例として使い分け方ができて、
C# では言語的にも値型と参照型で使い分けるように変化。
0404デフォルトの名無しさん
2008/10/22(水) 13:16:030405デフォルトの名無しさん
2008/10/22(水) 13:19:57呼び方も参照クラスと値クラスにしたほうがわかりやすかったかもね
0406デフォルトの名無しさん
2008/10/22(水) 13:24:33デスクトップのアイコンにファイルをD&Dすると
開くアプリケーションとかあるでしょ?あれをやりたいんだけど
C# D&DとかでググるとアイコンへのD&Dじゃなく
開いてるウインドウへのD&Dばかりがみつかるのさ。
だれか解説してるサイトか、これぞ、みたいな検索ワード
教えてくれないかなーっと。
0407デフォルトの名無しさん
2008/10/22(水) 13:27:010408デフォルトの名無しさん
2008/10/22(水) 13:34:08うわーい。ただの引数になるのか。
確認しますた。おばかでスマソ。
0409デフォルトの名無しさん
2008/10/22(水) 14:04:42返す結果の有無を判別させるためにbool型をreturnします。
private bool Hoge(out string[] Str)
{
・・・・(処理)・・・
return true/false;
}
この際、Strに返す結果が無いとき(つまりfalseをreturnするとき)、コンパイラに
「out宣言したStrを空のまま返すな( ゚Д゚)ゴルァ!!」としかられてしまうんですが
こういうときはみなさんどうされますか?
falseを返すときでも適当な文字を入れてお茶をごまかすべきでしょうか?
0410デフォルトの名無しさん
2008/10/22(水) 14:09:220411デフォルトの名無しさん
2008/10/22(水) 14:14:02Str = null(default(string[]);
としたうえで return false; すればよろしいんですね?
0412デフォルトの名無しさん
2008/10/22(水) 14:14:34要素数0に意味があるなら仕方ないのでnull返す
0413デフォルトの名無しさん
2008/10/22(水) 14:18:58str = default(string[]);だよ (str = null;と同じ意味)
値型かジェネリック型の場合は前者だけど参照型なら後者でいいと思う
0414デフォルトの名無しさん
2008/10/22(水) 14:24:33まとめますと、
1.要素数を0の配列をつくりこれを返値にする : Str = new string[0]: return Str;
2.参照型だからnullを代入して返す : Str = null;
のどちらかということですね。
>>413
値型の場合は
default();
を採用すればいいと言うのは初耳でした。以前値型の変数にnullを代入して返そうとした
んですがコンパイラに蹴られてしまいました。代わりに default(「値型」); とすればいいとは
知りませんでした。結構有名な手法なんですか?
0415デフォルトの名無しさん
2008/10/22(水) 14:37:08defaultは本来はジェネリックのために導入された機能で,
default(T)は型パラメータTが参照型のときはnullを返し,Tが値型のときはnew T()を返す
0416デフォルトの名無しさん
2008/10/22(水) 14:50:390417デフォルトの名無しさん
2008/10/22(水) 16:16:240418デフォルトの名無しさん
2008/10/22(水) 16:58:440419デフォルトの名無しさん
2008/10/22(水) 17:08:08Win32APIは出来るだけ使いたくないのでBringToFrontをオーバーライドすることにした。
0420デフォルトの名無しさん
2008/10/22(水) 17:12:55だから純粋なマネージドコードだが。
0421デフォルトの名無しさん
2008/10/22(水) 18:13:39"abc:12" -> ng
みたいにファイル名が有効か判断するメソッドってある?
なければ例外で処理すればいいんだけど
0422デフォルトの名無しさん
2008/10/22(水) 18:21:24やはり基本は実際に作ること
:だってNTFS的にはパスとして有りなんだぜ .NETからは使えないけど
0423デフォルトの名無しさん
2008/10/22(水) 19:40:00また、普通ソフトってどの言語で作られているものなのでしょうか?
(ここでいうソフトってのは、市販のソフトだったり、フリーソフトだったり。)
0424デフォルトの名無しさん
2008/10/22(水) 19:52:45マジレスすると実行ファイル開いて
はじめの一行(#!〜)に
perlってあればperl
shってあればシェルスクリプト
ruby(ry
Delphiで作ると Delphi臭がするのはなぜだろうw
0425デフォルトの名無しさん
2008/10/22(水) 21:50:02void Method1(int i)
{
・・・・・(うり二つ)・・・・・
・・・(ココだけ違う)・・・・
}
void Method2(int i, intj)
{
・・・・・(うり二つ)・・・・・
・・・(ココだけ違う)・・・・
}
最後の (ココだけ違う) と、引数の個数の違いだけですが律儀に2つのメソッドを記述する必要があるでしょうか?
0426デフォルトの名無しさん
2008/10/22(水) 21:55:22void Method1(int i){
うり二つ(i);
ここだけ違う
}
void Method2(int i, int j){
うり二つ(i);
・・・(ココだけ違う)・・・・
}
0427デフォルトの名無しさん
2008/10/22(水) 22:01:31な、なるほど・・・
0428デフォルトの名無しさん
2008/10/22(水) 22:31:010429デフォルトの名無しさん
2008/10/22(水) 23:26:08Point構造体とかだと明示的にEmpty返すことはあるな
>>421-422
確か、Path.GetFullPathかFileInfo使えという結論だったはず
パスの有効性をチェックする非公開メソッド(確かinternal)があって、
結局はそれが呼ばれるので、最も副作用が無いもの使うのが良いという話
>>423
> C#でできたソフト
VS, SSMS, etc.
SSMS(2005)はよく落ちる(.NET標準のエラーハンドラが出る)からすぐ分かるよ
0430デフォルトの名無しさん
2008/10/22(水) 23:55:51string型は参照型なのにnewしなくても使えるのはなんでですか?
0431デフォルトの名無しさん
2008/10/22(水) 23:57:31簡単に言うと,特別だから
0432デフォルトの名無しさん
2008/10/23(木) 00:01:09ありがトン
0433デフォルトの名無しさん
2008/10/23(木) 00:06:41実際にはnew(インスタンスの生成)しなくても使えているわけではなく、
インスタンスの生成がラップされている、つまり間接的に生成してるだけ。
つまり、別に文字列以外のクラスでも同じように見かけ上newを隠蔽することはできる。
0434デフォルトの名無しさん
2008/10/23(木) 00:08:250435デフォルトの名無しさん
2008/10/23(木) 00:08:43ちげーよ。文字列ってのはCIL上はプリミティブ型で、
それを巧妙にクラスに見せかけてあるだけ。
0436デフォルトの名無しさん
2008/10/23(木) 00:12:29わけのわからん混同しすぎ。
System.Stringが様々な場面で特別扱いされるという事実と
>>430の話は直接関係がない。
0437デフォルトの名無しさん
2008/10/23(木) 00:14:36暗黙にnewされてるからというのは間違いで「特別扱いだから」としか答えようがない
0438デフォルトの名無しさん
2008/10/23(木) 00:16:380439デフォルトの名無しさん
2008/10/23(木) 00:18:350440デフォルトの名無しさん
2008/10/23(木) 00:19:37文字列リテラルの場合はコンパイルの段階でメタデータに格納しておき、
実行時にはその文字列への参照を返す。
こういった仕組みの相違が文法にも反映されている。
たぶん。
0441デフォルトの名無しさん
2008/10/23(木) 00:19:58うはは、無駄無駄無駄!
0442デフォルトの名無しさん
2008/10/23(木) 00:24:16>>435は>>430ではなく>>433へのレスに見えるんだが
0443デフォルトの名無しさん
2008/10/23(木) 00:25:32違う
stringはCLIの組み込み型
string定数を読み込むIL命令があるの
0444デフォルトの名無しさん
2008/10/23(木) 00:25:530445デフォルトの名無しさん
2008/10/23(木) 00:28:46> string定数を読み込むIL命令があるの
ldstr だよね。通常の参照型は newobj 。
別に>>440で間違ってないと思うけど、どこか勘違いしているなら指摘お願い。
0446デフォルトの名無しさん
2008/10/23(木) 00:29:510447443
2008/10/23(木) 00:30:31コンパイラの話してるのかと思った
0448デフォルトの名無しさん
2008/10/23(木) 00:32:380449デフォルトの名無しさん
2008/10/23(木) 00:46:350450デフォルトの名無しさん
2008/10/23(木) 00:57:000451デフォルトの名無しさん
2008/10/23(木) 01:00:44stringインスタンスは、インターンプールにまだなければ、
JIT時に実体が作成されインターンプールに保存される。
んじゃないかな?
0452デフォルトの名無しさん
2008/10/23(木) 01:02:17@"(文字列)"
↑の(文字列)の部分に " マークが入っている場合はどう対処したらいいでしょうか?
エスケープシーケンス\をしても認識してくれません。
たとえば↓のような例の場合です。
string str = @"<a href="http://www.google.com" target="_blank">";
0453デフォルトの名無しさん
2008/10/23(木) 01:03:430454デフォルトの名無しさん
2008/10/23(木) 01:03:54@"""文字列"""
0455デフォルトの名無しさん
2008/10/23(木) 01:06:23その質問に答えるのは簡単だが、これ読んで他のことも理解した方がためになると思う。
http://www.microsoft.com/japan/msdn/columns/drguinet/drguinet5_update.aspx#drguinet5_update_topic4
0456デフォルトの名無しさん
2008/10/23(木) 01:11:36@は使わない方向で頑張りますorz・・・
0457デフォルトの名無しさん
2008/10/23(木) 01:15:03>>455は読んだか?
0458デフォルトの名無しさん
2008/10/23(木) 02:45:47正規表現を使いたいなら@は使うな、ということですよね?
0459デフォルトの名無しさん
2008/10/23(木) 02:55:58(;゚ Д゚)
0460デフォルトの名無しさん
2008/10/23(木) 03:01:230461デフォルトの名無しさん
2008/10/23(木) 06:00:490462デフォルトの名無しさん
2008/10/23(木) 10:58:01List.Sort
0463デフォルトの名無しさん
2008/10/23(木) 15:28:56書店に置いてある本は、線や円の描き方は載っているものの、グラフ作成の方法までは載っていないのがほとんどでした。
NPlotも試してみましたが、NPlotの使い方が分からず挫折しました。
グラフの描き方について詳しく書かれている本があれば、教えて欲しいです
0464デフォルトの名無しさん
2008/10/23(木) 15:39:04座標系とプロットしたい値、それを描画方法する方法が全てじゃない?
全て知ってると思うけど
0465デフォルトの名無しさん
2008/10/23(木) 19:18:46YouTube - 9.11真相究明講演会 ベンジャミン・フルフォード講演ダイジェスト
http://jp.youtube.com/watch?v=mQ_lVOpINOE&feature=related
911 Truth Tokyo 2008 (テロ事件真相研究-東京日本) -MP Fujita Yukihisa 藤田幸久
http://jp.youtube.com/watch?v=aV3TEEwSdiU&feature=related
9.11真相究明講演会 藤田幸久議員講演ダイジェスト
http://jp.youtube.com/watch?v=8tS9DnhfUeI&feature=related
9.11真相究明講演会 きくちゆみさんダイジェスト Part1-2/2
http://jp.youtube.com/watch?v=qu1LfwluTjU&feature=related
http://jp.youtube.com/watch?v=zRwFcSm_uTE&feature=related
9.11真相究明講演会 3人の対談・ラストメッセージ
http://jp.youtube.com/watch?v=I6Sl3HZbxt0&feature=related
YouTube - 9.11真相究明講演会 ベンジャミンvs藤田議員 ダイジェスト版 Part 12
http://jp.youtube.com/watch?v=s3HPMAG5DKk&feature=related
http://jp.youtube.com/watch?v=quHyQL-MbNA&feature=related
0466デフォルトの名無しさん
2008/10/23(木) 19:19:170467デフォルトの名無しさん
2008/10/23(木) 19:31:05YouTube - グリフィン博士来日!911真相究明国際会議(2008113イベント)CM
http://jp.youtube.com/watch?v=DmoUVxAMAlc&eurl=http://kikuchiyumi.blogspot.com/
0468デフォルトの名無しさん
2008/10/23(木) 19:32:080469デフォルトの名無しさん
2008/10/23(木) 19:47:00分厚いのではなく萌えるC#的なのでお願いつかまつります!
0470デフォルトの名無しさん
2008/10/23(木) 19:51:230471デフォルトの名無しさん
2008/10/23(木) 19:55:06いつものように分厚いだろうし萌えもしないだろうけどな
0472デフォルトの名無しさん
2008/10/23(木) 21:34:34: fatal error LNK1120: 外部参照 1 が未解決です。
VS2008でC言語のプログラムを作ったのですが、コンパイルしようとしたら↑のような
エラーが出てきてしまいました。どうすればよいのでしょうか?
0473デフォルトの名無しさん
2008/10/23(木) 21:35:54>>472 それはprintf()のつづり間違いだろ。
0474デフォルトの名無しさん
2008/10/23(木) 21:36:00Cのスレで聞け。
0475デフォルトの名無しさん
2008/10/23(木) 21:38:44失礼しました
0476デフォルトの名無しさん
2008/10/23(木) 23:05:27自動的にデータが読み込まれるんですが、これの接続はすぐ切れるんですか?
0477デフォルトの名無しさん
2008/10/23(木) 23:27:560478デフォルトの名無しさん
2008/10/23(木) 23:53:330479デフォルトの名無しさん
2008/10/23(木) 23:56:270480デフォルトの名無しさん
2008/10/23(木) 23:57:17C#でC++コンパイラを書く
0481デフォルトの名無しさん
2008/10/24(金) 00:14:12無い。
むしろ.NETをネイティブだと思うんだ。
0482デフォルトの名無しさん
2008/10/24(金) 00:26:25C#コードをManaged C++コードに直すことは出来そうなんだがな
Managed C++にしたところで、Console::Writeがprintfになるわけでもないけどね
>>478
ngenじゃだめ?
0483デフォルトの名無しさん
2008/10/24(金) 00:31:58GC、型システム、BCL(基本クラスライブラリ)をそのままにしてネイティブコンパイルしても、
ほとんど効果がないばかりかマイナスになる可能性が高い。
GC、型システム、BCLを別のものに置き換えればそれはもうC#ではない。
前者のアプローチはjavaにたいしてgcjがやってみたのだがさっぱりなのはご存知の通り。
0484デフォルトの名無しさん
2008/10/24(金) 00:48:170485デフォルトの名無しさん
2008/10/24(金) 01:04:27依然として実行には .NET Framework が必要
0486デフォルトの名無しさん
2008/10/24(金) 01:08:00string[] files = Directory.GetFiles("my documents", "*.txt", SearchOption.AllDirectories);
foreach(string file in files) {
if ( File.Exists(file) ) { //fileがあるときだけと書いたつもり。
Process.Start("Notepad", file); //メモ帳を起動する。
}}
で、コンパイルは正常に通るのですが、ifのところでファイルがないという例外が出ています。
全体をtry〜catchで包むと、ファイルがないエラーは発生しませんが、今度は、ファイルがある場合2回起動します。
なんでこんなふうになっちゃうのでしょう?
0487デフォルトの名無しさん
2008/10/24(金) 01:26:04try-catchでどう囲んだのか
0488デフォルトの名無しさん
2008/10/24(金) 01:27:40ソースとメッセージをそのまま貼ってね
0489デフォルトの名無しさん
2008/10/24(金) 02:11:10何のために?
つか、実行時はネイティブに変換されるんだが、それじゃダメなのか?
0490476
2008/10/24(金) 04:01:56あれから、プログラムを組んでまた疑問点にぶち当たりました。。お助けを・・
DataSetとDataGridをツールボックスから貼り付けてDataSetで指定したデータベースを
データグリッドのデータソースとして登録しました。Formがロードされると
一覧が表示されるのですが、フォームに貼り付けたDataSetオブジェクトにその後アクセスすることは
不可能なんでしょうか?
やりたいことは、フォームが表示される→ボタンを押すともう一度そのデータを参照・更新したいのですが
フォームがロードされたときのDataSetオブジェクトにアクセスできれば良いと思うんですが無理ですか?
やりたいことを果たすためには、ButtonのOnClickメソッドの中でDataSetオブジェクトを作成して
もう一度データベースからデータを取得する必要があるのでしょうか?
このフォームに貼り付けたDataSetオブジェクトも色々なソースファイルを眺めてもどこにもでてきませんので
利用する事は不可能なんでしょうか?
意味がわかりにくい文章ですみません。もし分かる人がいたらおしえてください。
0491476
2008/10/24(金) 04:08:49すみませんでした。
0492476
2008/10/24(金) 04:24:50FormLoad時以降もフォームに貼ったDataSetオブジェクトにはデータがいっぱいつまっているのですか?
もし、FormLoad以降もデータが蓄積された状態ならば、私は他のフォームからそのデータセットを使いたいんですが、
private宣言されています。publicにかえちゃっていいですか?
すみませんがよろしくお願いします。もう寝ますので明朝みます。
0493デフォルトの名無しさん
2008/10/24(金) 07:49:01C# uniq
で、
http://d.hatena.ne.jp/siokoshou/20050408
のソースが見つかったんだが、これでテキストをuniqするには、
string text = File.ReadAllText("test.txt",Encoding.Default);
text = Siokoshou.ArrayListWithUnique.Unique(text);
File.AppendAllText("test2.txt" , text, Encoding.Default);
じゃだめなん?
コンパイルすると、
エラー 1 引数を '1' 個指定できる、メソッド 'Unique' のオーバーロードはありません。
といわれる。たしかに、Uniqueには引数の指定がないが…。
0494デフォルトの名無しさん
2008/10/24(金) 08:04:12だめ。
0495デフォルトの名無しさん
2008/10/24(金) 08:29:05if (MessageBox.show(なんとか) == DialogResalt.Yes)
{
はいが押されたときの処理
{
else if ==DialogResalt.No //ここどういうふうに書くの?
{
いいえが押されたときの処理
}
else
{
キャンセルの処理
}
0496デフォルトの名無しさん
2008/10/24(金) 08:59:53if(result==DialogResult.Yes)
else if(result==DialogResult.No)
じゃダメ?
0497デフォルトの名無しさん
2008/10/24(金) 09:03:200498デフォルトの名無しさん
2008/10/24(金) 09:19:36ではDialogResultの処理はifで統一しときます
ありがとうございました
0499デフォルトの名無しさん
2008/10/24(金) 10:35:13Int32やInt64と同じように,ポインタサイズの整数型ってこと?
0500デフォルトの名無しさん
2008/10/24(金) 11:10:56まんまInteger Pointerの略で良いと思う。
システムによってポインタのサイズとint型のサイズは必ずしも同じではないから、区別されてる。
0501デフォルトの名無しさん
2008/10/24(金) 11:20:11たとえば、Notepadで、orange.txtというファイルを読み込んでいる場合、
if(Process.GetProcessesByName("Notepad.exe").Length == 0)
で、Notepadが起動していることはわかります。
同時にorange.txtと、banana.txtというファイルを読み込んでいる場合に、
区別して扱いたいです。
0502デフォルトの名無しさん
2008/10/24(金) 11:25:560503デフォルトの名無しさん
2008/10/24(金) 12:11:380504デフォルトの名無しさん
2008/10/24(金) 12:18:48別に良いんじゃないの?
デザイナーで貼り付けたDataSetなら、直接ソースを書き換えるより
デザイナーでDataSetのオプションのModifiersをPublicにする方が良いんじゃね?
0505デフォルトの名無しさん
2008/10/24(金) 14:45:25namespace TestApplication {
class Test {
private string message;
public Test(string message) {
this.message = message;
}
public void Say() {
Console.WriteLine(message);
}
}
}
上記のコードをCSharpCodeProviderでコンパイルしてインスタンスを作成し、Sayメソッドを呼び出すことはできますでしょうか。
ネット上ではstaticなメソッドの呼び出しとかはよく見るのですが、このケースについては見つけられませんでした。
0506デフォルトの名無しさん
2008/10/24(金) 14:54:170507デフォルトの名無しさん
2008/10/24(金) 15:00:34出来るはず。インスタンスの作成はActivator.CreateInstanceで出来る.
using System.Reflection;
Assembly asm = hogehoge.CompiledAssembly
Type classType = asm.GetType("myNamespace.MyClass");
Object = Activator.CreateInstance(classType);
0508デフォルトの名無しさん
2008/10/24(金) 15:20:30uniqになってないしw
ついでに、Enumerable.Distinctがある今ではそいつは不要だな
0509デフォルトの名無しさん
2008/10/24(金) 15:40:48ばっちりでした。
ありがとうございます。
0510デフォルトの名無しさん
2008/10/24(金) 16:24:19Microsoft Visual C# 2005 Express Edition で開発しているのですが、変数やメソッドを使用している
箇所で右クリックして、「定義へ移動」や「すべての参照の検索」を選んだとき、同一ソリューションの
他のプロジェクトにあるクラスは検索の対象にならないようです。
ソリューション単位でビルドしているのにこれは変だと思い、いろいろ設定を探したのですが、
見つかりませんでした。
どのようにすれば、他プロジェクトを検索してくれるようになるのでしょうか?
よろしくお願いします。
0511デフォルトの名無しさん
2008/10/24(金) 17:20:07Enumerable.Distinctですか。
public static IEnumerable<TSource> Distinct<TSource>(
this IEnumerable<TSource> source,
IEqualityComparer<TSource> comparer
)
というのですが、例示するとどうなりますでしょう?
0512492
2008/10/24(金) 19:54:54デザイナーで切り替えができるんですね。初めて知りました。というよりC#が初めてだ揉んで・・
Javaの場合はデータをカプセル化して、メソッドでデータをset/getしてまして、
DataSetをカプセル化してメソッドでDataSetをset/getするのもスマートなやり方じゃないなあ、
でもソースコードでpublicにするのもちょっと違和感がありまして、一番オーソドックスな方法を知りたかったのです。
デザイナの方で色んなformから参照できるようにすることができるなら、それが一番しっくりきますね。
一番いい方法を教えていただき、感謝しています。本当に知りたかったのでうれしいです。
どうもありがとうございました。
0513デフォルトの名無しさん
2008/10/24(金) 20:29:38フォームのコントロールのmodifierがデザイナから変えられるって俺も
初めて知った。
つーか、492と同じくコントロールをpublicで外部に公開するのは作法として
よろしくないもんだと思って一所懸命コントロール操作用のメソッドを書いてた
public void IncrementProgressbar(int i)とか…
0514デフォルトの名無しさん
2008/10/24(金) 20:35:35そんなことをしたいとは思わないはずだと思う。
逆に言えば、そんなことをしたいと思うのは99.99%どこか設計がオカシイんだよ。
0515デフォルトの名無しさん
2008/10/24(金) 20:56:02こんなもんコントロールをpublicにするのと変わらん
フォームの「役割」を考えるんだ
0516デフォルトの名無しさん
2008/10/24(金) 21:00:52http://pc11.2ch.net/test/read.cgi/mac/1224839401/
消しゴムじゃないMONOを使ってみるスレ 2個目
http://pc11.2ch.net/test/read.cgi/tech/1100616350/
0517デフォルトの名無しさん
2008/10/24(金) 21:08:16ループ処理を実行し始めてから次のループ処理を実行するまで最低でもxxx分はあけておきたい
という場合にはどうプログラムを組んだらいいでしょうか?
ループ処理が終わった時点でxxx分経っていなければ、どこかでxxx分になるまで待つ
必要があります。反面一つのループ処理にxxx分以上かかった場合は待つことなく
即次のループ作業に入らせたいです。
0518デフォルトの名無しさん
2008/10/24(金) 21:10:47ループの先頭で、clock()とかで時刻をとって、ループの最後で一定時間たってるか確認して、
足りなかったらsleep()系の関数で止まる。
0519デフォルトの名無しさん
2008/10/24(金) 21:20:490520デフォルトの名無しさん
2008/10/24(金) 21:26:04>>519
どうもです。
sleep()
Apliclation.Ide
どちらがいいですか?
0521デフォルトの名無しさん
2008/10/24(金) 21:29:12そもそも何故そんなことをしたいのか、という重大な疑問を棚に上げたままで
まともな回答なんて期待するだけ野暮だと思うぞ。
0522デフォルトの名無しさん
2008/10/24(金) 21:29:43出来ました。
これ使えればなかなか面白いことが出来そうです。
0523デフォルトの名無しさん
2008/10/24(金) 21:58:49{
yield return a;
}
これをもっとシンプルに書けない?
0524デフォルトの名無しさん
2008/10/24(金) 22:02:13前後にもyieldがあるなら,前後のyieldをそれぞれ別のメソッドに分けてEnumerable.Concat
0525デフォルトの名無しさん
2008/10/24(金) 22:10:14ありがと
0526デフォルトの名無しさん
2008/10/24(金) 22:13:440527デフォルトの名無しさん
2008/10/24(金) 22:16:050528デフォルトの名無しさん
2008/10/24(金) 22:23:59おまいらよろしく。
0529デフォルトの名無しさん
2008/10/24(金) 22:55:510530デフォルトの名無しさん
2008/10/24(金) 22:58:450531デフォルトの名無しさん
2008/10/24(金) 23:03:240532デフォルトの名無しさん
2008/10/24(金) 23:04:40エスパー不足だから
>>531
読まないよりは読んだ方がいい
0533デフォルトの名無しさん
2008/10/24(金) 23:05:040534デフォルトの名無しさん
2008/10/24(金) 23:06:22入門者は変にいろいろ考えるよりも勉強した方が早い
0535デフォルトの名無しさん
2008/10/24(金) 23:09:13こちら,スネーク。了解した!
0536デフォルトの名無しさん
2008/10/24(金) 23:18:510537デフォルトの名無しさん
2008/10/24(金) 23:25:49textBoxを半透明にするにはどうしたらよいですか?
普通に配置して、プロパティで選択すると、
できないといわれます。
代わりに、textBoxの上にpictureBoxを配置したら、
透明にはできましたが、textBoxは下になって隠れてしまって、
文字入力できません。
0538デフォルトの名無しさん
2008/10/24(金) 23:27:44こまったちゃんが>>529みたいなこと言ってるけれど
好きな時にすきなだけ質問していいんだよ
0539デフォルトの名無しさん
2008/10/24(金) 23:43:44なんだか意識が小学生だね君ってw
行動の基準が「先生に怒られるかどうか」って感じ。
良いか悪いか(先生に怒られるかどうか)じゃなくて、
そうしないとお前が損するんだぜって話だと思うんだが。
0540デフォルトの名無しさん
2008/10/24(金) 23:44:16普通には無理
それが重要ならWPF池
0541デフォルトの名無しさん
2008/10/24(金) 23:54:39Managed DirectX
0542デフォルトの名無しさん
2008/10/25(土) 00:10:39ありがとう。String.Concatでできました。
0543デフォルトの名無しさん
2008/10/25(土) 00:20:23WPFしてみます。
がっ。デザイナが開かず、
「TrueTypeフォントのみがサポートされています。
これはTrueTypeフォントではありません」
って、これってどれよ?
0544デフォルトの名無しさん
2008/10/25(土) 00:31:52VSのフォント関連の設定をリセットしてみる
SP1入れてないなら入れてみる
VS再インストール
0545デフォルトの名無しさん
2008/10/25(土) 00:31:58これ=Managed DirectX
0546デフォルトの名無しさん
2008/10/25(土) 01:52:44作ろうと思っています。各社のニュース系のサイトから記事を自動的に収集してくる
プログラムを作り、記事を保存します。社によっても違いますが、だいたいニュース系の
サイトは半年以内にリンク切れしてしまうので、そうなるまえに記事を自動的に収集して
おき、必要に応じて検索して過去の記事を探してくるプログラムを作りたいわけです。
そこで大量のテキストファイルから合致する記事を探し出してくるプログラムを作る必要
があるわけですが、C#でそういった検索プログラムを作る上で参考となる手法はあるで
しょうか?とくに無ければ検索ワードを入れると過去記事を一から順番に巡回して探し
だす、何の変哲もないプログラムにしようかと思っています。
0547デフォルトの名無しさん
2008/10/25(土) 02:20:390548デフォルトの名無しさん
2008/10/25(土) 03:23:13「変数をカプセル化するためにプロパティを使う。
変数をprivateにし、プロパティをpublicにする」
ってなってました。
結局publicでアクセスできるんだから
カプセル化されてないような気が?
どういうことなんですか?
0549デフォルトの名無しさん
2008/10/25(土) 03:28:10変数の実体を無くして動的に計算して値を返すなんてことも出来るし。
変数のままpublicだったらそんなこと出来ないだろ?
0550デフォルトの名無しさん
2008/10/25(土) 03:31:03カプセル化するためっていうことを考えると
プロパティもprivateにするべきじゃないかと思いました
0551デフォルトの名無しさん
2008/10/25(土) 03:33:55値を読み出すことも出来ちゃだめってことにならない?
0552デフォルトの名無しさん
2008/10/25(土) 03:40:40webブラウザを通して検索させるということですか?
0553デフォルトの名無しさん
2008/10/25(土) 03:49:55インターフェースはCCGIに限らないよ
0554デフォルトの名無しさん
2008/10/25(土) 04:02:58すいません。
ところで
クラス内のフィールドにアクセスする時も
全部プロパティ経由の方がいいんですか?
0555デフォルトの名無しさん
2008/10/25(土) 08:09:38全部プロパティ経由でおk
0556デフォルトの名無しさん
2008/10/25(土) 09:52:200557デフォルトの名無しさん
2008/10/25(土) 10:24:250558デフォルトの名無しさん
2008/10/25(土) 10:40:29ただしList<string>型のパブリックプロパティはガイドライン違反だからIList<string>として返すとか
0559デフォルトの名無しさん
2008/10/25(土) 11:31:00そのガイドラインどこにある?
0560デフォルトの名無しさん
2008/10/25(土) 11:35:41これだね
FxCopのガイドラインまで気にしてたらキリがないかもしれないけど
たまに話題になる有名なやつだから
0561デフォルトの名無しさん
2008/10/25(土) 11:37:250562デフォルトの名無しさん
2008/10/25(土) 11:49:33なんか端折った話?
publicな変数をインターフェースを変えることなくプロパティに出来るのが
C#のプロパティのメリットじゃないのか?
0563デフォルトの名無しさん
2008/10/25(土) 11:56:44publicフィールドをプロパティに変えたら使用側がエラーになる場合は多い
面倒なら自動プロパティでいいから全部プロパティにするべき
0564デフォルトの名無しさん
2008/10/25(土) 12:04:41SP1にバージョンアップし(3時間もかかった…)、
WPFを使ったら、テキストボックスの背景に、
画像を表示できました!
アドバイス多謝。
0565デフォルトの名無しさん
2008/10/25(土) 12:34:190566デフォルトの名無しさん
2008/10/25(土) 12:35:280567デフォルトの名無しさん
2008/10/25(土) 12:35:540568デフォルトの名無しさん
2008/10/25(土) 12:40:23.NET3.5にバージョンアップしてVS2008で正式サポートされてる
0569デフォルトの名無しさん
2008/10/25(土) 13:01:59普通にストレスなく動くのかと。
0570デフォルトの名無しさん
2008/10/25(土) 13:05:130571デフォルトの名無しさん
2008/10/25(土) 13:15:22textBoxでボックスの幅で折り返しして、
複数行を表示するにはどうしたらいいですか?
普通のFormの場合には、
textBoxの右上に小さい矢印が出て、
そこをクリックすると、multilineを選択できました。
ひょっとしてtextBoxでなくて、
textBlockを使うのかなと思ったのですが、
こちらでは文字入力できず。
0572デフォルトの名無しさん
2008/10/25(土) 13:23:09http://msdn.microsoft.com/ja-jp/library/aa969815.aspx
0573デフォルトの名無しさん
2008/10/25(土) 13:25:02MaxLineが1じゃなけりゃ普通に複数行じゃない?
リターンキーで改行したいなら、AcceptsReturnにチェック
0574デフォルトの名無しさん
2008/10/25(土) 13:28:17少しは自分で調べたの?
プロパティ見たらTextWrappingとかAcceptsReturnとかすぐに見つかったんだが
0575デフォルトの名無しさん
2008/10/25(土) 15:34:27調べてMaxLinesの値を10000とかにはしてみたのですが、
なぜか失敗してました。
TextWrappingは見逃してました。
textBlockのほうを見て混乱してたかも。
WPFは初めてなので、ちょっと勝手が違ってとまどってます。
msdn見てたら、むちゃくちゃ強力ですね。
0576デフォルトの名無しさん
2008/10/25(土) 16:07:070577デフォルトの名無しさん
2008/10/25(土) 16:10:060578デフォルトの名無しさん
2008/10/25(土) 16:28:27表とかアニメーションとか簡単に表示させられるし、とても魅力的ではあるんだけどね。
0579デフォルトの名無しさん
2008/10/25(土) 18:14:52ほんとに公開する必要あるの?
0580デフォルトの名無しさん
2008/10/25(土) 18:29:39マジっすか・・・
参考までにどういうケースでおかしくなるか2、3教えてくれん?
Reflection絡みぐらいしか思いつかん。
自動プロパティ使えるといいんだけど、うちぁVS2005だからなぁ・・・
0581デフォルトの名無しさん
2008/10/25(土) 18:38:40・ref, out の動作
Int32.TryParse("...", ref inst.Field);
・フィールドのフィールド
inst.Field.Field = value;
・データバインディング全般(リフレクションベースなので)
ctrl.DataSource = values;
個人的にはパブリックフィールド使いたいのなんて値を表すような
クラスが大半だろ?ってことはバインディングに使われやすいわけ
だろ?なんで初めからプロパティにしない?と思う。
0582デフォルトの名無しさん
2008/10/25(土) 18:42:35> C#のプロパティのメリットじゃないのか?
privateなフィールド+アクセサだとobj.GetFoo()やらobjSetBar(123)とか書くの面倒だから
っていうのが第一にあると思うぞ
0583デフォルトの名無しさん
2008/10/25(土) 18:47:010584デフォルトの名無しさん
2008/10/25(土) 18:54:59↓
でもOOPとしてオブジェクトは操作と属性を持つってなってんのに属性を見せないって変じゃね?
の解としてプロパティ
0585デフォルトの名無しさん
2008/10/25(土) 18:57:39そうだけどコンポーネントモデルにおけるいわゆる「プロパティ」が
メタデータレベルで一級の扱いを受けるようになったことのほうが
大きい。
一級扱いだから「プロパティ」そのものにアトリビュートが付けられる
ようになったしアクセスするオブジェクトのモデル(リフレクション)も
整理された。
わかりにくいなら例えば Browsable アトリビュートは「どれ」に付け
るべきかって話を考えてみるといい。セッタかゲッタ、クラスだと
意味的に変だろ?なら型のメンバとしてサポートしなきゃと。
・・・という話があるわけなのだが C# に詳しくない人が単なるシンタ
クッスシュガーだとプロパティを判断して迷宮に迷い込むと
0586デフォルトの名無しさん
2008/10/25(土) 19:11:36サンクス。
ref、outに使えないのは知らなんだ。
滅多に使わないからなぁ。>ref、out
フィールドのフィールドは良く分からなかった。
そういうコードが出てきた時に気にしてみるよ。
>個人的には
個人的な話をすると、バインドするつもりが無かったデータのクラスを
後から何かにバインドすることが殆ど無いので。
0587デフォルトの名無しさん
2008/10/25(土) 20:42:55プロパティに変えたらコンパイルエラーになる
一番やっちゃいそうな例だね
たぶんどっかでやってる
0588デフォルトの名無しさん
2008/10/25(土) 23:19:48英単語記憶&テスト付き高機能単語帳だ。しかし、Vectorにうpろうとおもったら
なんか6000語登録してあるとかいうソフトがたくさんある・・
著作権もあるだろうし、単語登録なんてできねえ。こりゃ、ダウンロード0だな・・
0589デフォルトの名無しさん
2008/10/25(土) 23:23:40ネットの英和辞書からデータをダウソして、そのソフト用のデータを作成するツールを作って一緒に配布するんだ。
0590デフォルトの名無しさん
2008/10/25(土) 23:28:030591デフォルトの名無しさん
2008/10/25(土) 23:32:29「テスト付き」ここがどういう仕組みか次第だな
出来がいいならデータの拡張だけで人気でるかもね
0592デフォルトの名無しさん
2008/10/25(土) 23:38:40お前のは単語数いくつ?
0593デフォルトの名無しさん
2008/10/26(日) 00:28:37MicrosoftとかAppleとかRealのデータフォルダ入ってるとこに自分の名前入っててクソワロタ
0594588
2008/10/26(日) 01:50:59そんなことできるのかい?できるなら、是非やりたいなあ。単語データがたくさんあれば
だいぶ目鼻がつくよ。
>>591
テスト機能は、おいらが英語のTOEIC受けるときにこういう機能があればいいというのは
全部実装したから、それは目玉だよ。われながら。。かなりインターフェイスとかも
自信があるんだ。
>>590
今のままだと0だとおもうよ。。実際。
>>592
今のところ0だよ。
すれ違いなので、この辺にしときます。みんなありがとう。
0595デフォルトの名無しさん
2008/10/26(日) 02:51:09次どこに飛ばされるの?
0596デフォルトの名無しさん
2008/10/26(日) 06:26:080597デフォルトの名無しさん
2008/10/26(日) 06:33:03質問する前に検索しろ。
「C# ファイル名 取得」でググればすぐ出てくるだろ。
というか検索しなくてもだいたい想像つくだろw
0598デフォルトの名無しさん
2008/10/26(日) 06:43:15ここでグーグル先生に頼ったら負けかなと思っている
0599デフォルトの名無しさん
2008/10/26(日) 06:43:550600デフォルトの名無しさん
2008/10/26(日) 06:44:300601デフォルトの名無しさん
2008/10/26(日) 06:45:130602デフォルトの名無しさん
2008/10/26(日) 06:49:480603デフォルトの名無しさん
2008/10/26(日) 06:53:390604デフォルトの名無しさん
2008/10/26(日) 06:53:40この文字列がファイルパスだということをプログラム上まだ知らせていません
自動的にファイルパスだと理解してくれてるんですか?
0605デフォルトの名無しさん
2008/10/26(日) 06:57:320606デフォルトの名無しさん
2008/10/26(日) 07:03:08自己解決しました
0607デフォルトの名無しさん
2008/10/26(日) 10:29:110608546
2008/10/26(日) 11:10:33もぐらを使えばいいとのことでしたが、できればデータベースとウェブデータ収集プログラムは
一心同体のものにしたいと思っています。データベースと収集プログラムを別々で起動する
方式にしては使い勝手が悪いので・・・
つきましては、「収集プログラム」の中にデータベースにインデックスを作製して格納する機能を、
「閲覧プログラム」にはデータベースに作製されたインデックスをもとに素早く検索してくる機能を
実装したいのですが、これを実現するにはデータベースを一からプログラムする必要があるでしょうか?
0609デフォルトの名無しさん
2008/10/26(日) 11:22:530610デフォルトの名無しさん
2008/10/26(日) 14:31:32ダウンロードしたいのですが・・
0611デフォルトの名無しさん
2008/10/26(日) 14:48:11ナマズはCGIとして動く別アプリかと・・・
0612デフォルトの名無しさん
2008/10/26(日) 16:30:340613デフォルトの名無しさん
2008/10/26(日) 17:06:23収集プログラムを起動したら、そのプログラムからデータベースを起動すればいいだけ。
一般的なデータベースは、バックグラウンドで自動起動するけどね。
0614デフォルトの名無しさん
2008/10/26(日) 17:46:44this.MouseWheel += new MouseEventHandler(XXXXXX)
と実装していたんですが、マウス(というかドライバ)を交換すると
このイベントが来なくなりました。
ドライバによって違うものなんでしょうか
0615614
2008/10/26(日) 17:49:490616デフォルトの名無しさん
2008/10/26(日) 17:51:210617デフォルトの名無しさん
2008/10/26(日) 18:01:590618デフォルトの名無しさん
2008/10/26(日) 18:06:360619デフォルトの名無しさん
2008/10/26(日) 18:08:580620デフォルトの名無しさん
2008/10/26(日) 18:09:230621614
2008/10/26(日) 18:57:24なんかどうにもなりそうにないのでドライバ戻します。
業務での要求じゃなくてよかった…
0622デフォルトの名無しさん
2008/10/26(日) 19:04:000623デフォルトの名無しさん
2008/10/26(日) 19:16:23どうすれば新しいタブで開くように出来るんでしょうか?
0624614
2008/10/26(日) 19:39:30コンパネ→マウスからホイールでスクロールする行数は
設定できています。
614ではXXXXXX関数の中で、スクロールする量を設定して
スクロールさせているのですが、このXXXXXXが呼ばれません。
が、スクロール自体はするんです。それは多分コンパネで
設定した量が反映されているのだと思います。
なので、このイベント使わない方法でスクロールさせている
のかなあと。
0625デフォルトの名無しさん
2008/10/26(日) 19:42:14レジストリ操作してデフォルトのブラウザをおまえさんの作ったブラウザに設定する。
レジストリとはこういうもの↓
http://watcher.moe-nifty.com/memo/2006/10/ie__2cb2.html
C#でレジストリを操作↓
http://dobon.net/vb/dotnet/system/registrykey.html
http://dobon.net/vb/dotnet/system/registrykey.html
あとは、ぐぐって。ぐぐればなんとかなるよ。
0626デフォルトの名無しさん
2008/10/26(日) 19:53:53普通には無理。
newwindow2イベントで自分をブラウザとして登録しないといけない。
http://support.microsoft.com/kb/815714/ja
ここら辺を参照してみるといい。
0627デフォルトの名無しさん
2008/10/26(日) 20:10:22> 使いたいデータベース名(SQL Server, MySQL, PostreSQL, ...etc)と、"全文検索"でググレ
やはりデータを格納するときか、データを取り出すときにこれらのデータベースアプリを
別途立ち上げる必要がありますか・・・
0628623
2008/10/26(日) 20:23:05ド素人のため、出来ればレジストリを使わない>>626の方法を使いたいと思います。
axWebBrowserを使うのは初めてなので、また困ったら質問に来ます。
0629デフォルトの名無しさん
2008/10/26(日) 20:38:260630デフォルトの名無しさん
2008/10/26(日) 20:48:41VS2005でプログラムを組んでいるんですが、そこでも直接組み込むことはできるんでしょうか?
0631デフォルトの名無しさん
2008/10/26(日) 20:55:430632デフォルトの名無しさん
2008/10/26(日) 21:01:14> つSystem.Data.SQLite
なんと、VS2005にデフォで用意されていた機能でしたか(´・ω・`)
0633デフォルトの名無しさん
2008/10/26(日) 21:05:51ググってみ
0634デフォルトの名無しさん
2008/10/26(日) 21:07:520635デフォルトの名無しさん
2008/10/26(日) 21:11:190636デフォルトの名無しさん
2008/10/26(日) 22:39:20ArrayList()に格納した後に、その要素の中の一番目に
フォーカスを最終的に当てたいと考えているのですが
うまく行きません。どうすれば良いでしょうか?
※for each 文を使用してコントロール要素にフルアクセスし
た場合は出来ます。
//エラー 1 'aryAll' は '変数' ですが、'メソッド' のよう
に使用されています。
ArrayList aryAll = new ArrayList();
foreach (Control c in this.Controls)
{
aryAll.Add(c);
}
aryAll(0).focus();
0637デフォルトの名無しさん
2008/10/26(日) 22:44:36ArrayListは推奨しないけど
0638デフォルトの名無しさん
2008/10/26(日) 22:59:49サンクス!!W
VB.NETとコードの文法がごっちゃになってましたW
0639デフォルトの名無しさん
2008/10/27(月) 06:11:080640デフォルトの名無しさん
2008/10/27(月) 06:17:160642デフォルトの名無しさん
2008/10/27(月) 07:46:03vbだけど
http://homepage1.nifty.com/yasunari/VB/VB2005/WebBrowserNewWindow2Event.htm
ここにやりたいことと近いもんが載っている。
0643デフォルトの名無しさん
2008/10/27(月) 09:58:06public void method1(){
string s = 定義;
}
とすれば、
private void method2(){
if s != 定義
}
と呼べると思ったのだけど、sは現在のコンテキスト内に存在しないというエラーになります。
メソッド2からメソッド1で指定したstringを参照するには、どうしたらいい?
0644デフォルトの名無しさん
2008/10/27(月) 10:00:57Buttonコントロールをオーナードローで画像表示したいのですが
Buttonコントロールが押し込まれている状態であるかを取得する方法が分かりません
ご教授願えませんでしょうか
0645デフォルトの名無しさん
2008/10/27(月) 10:05:04string s = null;
public void method1(){
s = 定義;
}
private void method2(){
if s != 定義
}
こうすりゃいいんじゃね
0646デフォルトの名無しさん
2008/10/27(月) 10:10:32sをクラスのメンバ変数にする。
private string s;
public void method1(){
this.s = 定義;
}
private void method2(){
if this.s != 定義
}
0647646
2008/10/27(月) 10:11:050648デフォルトの名無しさん
2008/10/27(月) 10:17:19無かったっけと思ったら見当たらないねー
とりあえずBM_GETSTATEを使えば取れるだろうけど
0649デフォルトの名無しさん
2008/10/27(月) 10:37:25thanks!
これをクラスのメンバ変数というんだ。
メンバ変数とは、クラス直下で指定する変数のことなのね。
ふむふむ。VisualC#ではフィールドというと。
それに対して、メソッド内部で指定するのはローカル変数。
ひとつもふたつも勉強になった気分。
0650デフォルトの名無しさん
2008/10/27(月) 10:57:15BM_GETSTATE(f2)で取得してみましたが、ボタンを押しこんだ状態では
BST_PUSHED(4)ではなくBST_FOCUS(8)が帰ってきてしまい取得できません
12あたりが返ってくるかと思ったのですが、呼び方がおかしいのでしょうか…
0651デフォルトの名無しさん
2008/10/27(月) 11:18:25極端な話クラス内フィールドなんて無くても構わなくない?
メソッドの引数で値のやりとりを完結させることってじゅうぶん可能だろ。
フィールドの怖いところはメソッドの預かり知らないところで値が書き換えられる
可能性があるという点だ。一昔前のC言語のグローバル変数の怖さといったら
伝わるかな?俺にはフィールドというのは、そのグローバル変数に匹敵する
怖さを持ち得ていると思うんだが、おまいらは正直どう思ってる?
0652デフォルトの名無しさん
2008/10/27(月) 11:25:22イベント駆動とかで
引数をやり取りするにしてもクラスにまとめないとやりにくいし
0653デフォルトの名無しさん
2008/10/27(月) 11:26:430654デフォルトの名無しさん
2008/10/27(月) 11:43:45そういう値は呼び出し元のメソッドに参照渡しすればいい
0655デフォルトの名無しさん
2008/10/27(月) 11:44:040656デフォルトの名無しさん
2008/10/27(月) 11:55:43良く意味が分からん
イベント駆動のプログラムではメソッド全部終わって
次のイベントが来たらまた一からメソッドが立ち上がるだろ
前のイベントと次のイベントの間でどうやって値をやり取りするかという話になるだろ
0657デフォルトの名無しさん
2008/10/27(月) 11:57:240658デフォルトの名無しさん
2008/10/27(月) 12:11:04取れなかった。
んー、リフレクション使ってButtonBaseのGetFlagを0x2で呼び出せば取得できるみたい。
描画とかどうやってんだろ。
0659デフォルトの名無しさん
2008/10/27(月) 12:13:50SQLCEって全文検索できたっけ?
0660デフォルトの名無しさん
2008/10/27(月) 12:35:39ありがとうございます。
リフレクションなんて触ったことないですが頑張ってみます!
よくそんなの見つけられますね^^;
0661デフォルトの名無しさん
2008/10/27(月) 17:32:360662デフォルトの名無しさん
2008/10/27(月) 18:49:56OK.
ではフィールド使わずに任意の単位ベクトルを表すクラスを書いてみて。
0663デフォルトの名無しさん
2008/10/27(月) 19:06:080664デフォルトの名無しさん
2008/10/27(月) 19:32:080665663
2008/10/27(月) 20:04:54{
int total;
int a = (int)numericUpDown1.Value;
int b = (int)numericUpDown2.Value;
total = a * b ;
string total_str = total.ToString();
textBox1.Text = total_str;
}
なんとかできました
>>664
ありがとうございました
0666デフォルトの名無しさん
2008/10/27(月) 21:12:40{
InitializeComponent( );
this.webBrowser1.Navigate( "http://id.fc2.com/index.php" );
}
private void webBrowser1_DocumentCompleted( object sender, WebBrowserDocumentCompletedEventArgs e )
{
if ( this.webBrowser1.Url.ToString( ) == "http://id.fc2.com/index.php" )
{
HtmlElement submit = webBrowser1.Document.All.GetElementsByName( "Submit" )[0];
submit.InvokeMember( "click" );
}
}
WebBrowserを使ってログインできるようにはしたんですが,
ログインする判断として、DocumentCompleted以外にいいイベントやアプローチ方法ありませんか?
ボタンは使わずに起動すると全自動でログインできるようにしたいです。
ご教授お願いします。
0667デフォルトの名無しさん
2008/10/27(月) 21:29:23ああ、まぁインスタンス同士の四則演算させるときとかじゃ必要かもな。
でもそれは演算のオーバーライドとか特殊なケースなわけで一般的じゃないだろ。
0668デフォルトの名無しさん
2008/10/27(月) 21:31:310669デフォルトの名無しさん
2008/10/27(月) 21:54:46stringのように不変だったらいいのか?
0670デフォルトの名無しさん
2008/10/27(月) 22:05:28そういうわけではないが、メソッド間の引数の渡しで済む物は極力それで実装すべきじゃない?
たとえメソッドの引数が10個20個になっても、その個数を減らすためだけに
安易にフィールドに頼るという方法は(・A・)イクナイ!!
0671デフォルトの名無しさん
2008/10/27(月) 22:10:50だから前にもこのスレで書いた気がするけど、
普通はむしろ「安易にフィールドに頼ろう」なんて思わないよ。
世の中そういう(間違った)プログラミングが横行しているかのように
思っているのかもしれんが、それは君の妄想で事実じゃないと思う。
そんな奴あいねえよ。
むしろ余程センスのない人でもなきゃ、メソッドの引数を減らすために
フィールドを使うようなことはしないって。
0672デフォルトの名無しさん
2008/10/27(月) 22:18:370673デフォルトの名無しさん
2008/10/27(月) 22:52:46クラスにまとめろ
0674デフォルトの名無しさん
2008/10/27(月) 22:55:17Threadを用いてマルチスレッドで処理しているときの変数・配列へのアクセスについてなのですが、
複数のスレッドが全く同じ処理を行うとき、
int a = array[i]; //arrayは共通の配列
の一行が処理される間には他のスレッドは同じ要素、もしくは配列にアクセスできないのでしょうか?
というのも、画像処理などで1pixelあたりの処理は軽いけど、画素が多い場合にどうしても重くなるので、
マルチスレッド化しようとforを複数のスレッドで分割してみたのですが、全く速度は変わらず…
粒度を細かくしようと
object syncObj;
int ti;
.......
Monitor.Enter(syncObj);
ti = i;
i++;
Monitor.Exit(syncObj);
.......
としているのがだめなのかとも思い、処理する区間で分けてみても大して速度は変わらず orz
前者はともかく、後者でも速度が変わらないとなると、処理が軽すぎて何度も配列アクセスで待たされている
と思うのですが、どうなのでしょうか?
0675デフォルトの名無しさん
2008/10/27(月) 22:57:10これで言ってることがまともなら少しはカッコもつこうというものだが、
まったく意味不明で頓珍漢だからまさにみんなの笑いものw
0676674
2008/10/27(月) 22:57:28元の配列は読み取り専用で書き換えるわけではないので…
0677デフォルトの名無しさん
2008/10/27(月) 23:02:480678デフォルトの名無しさん
2008/10/27(月) 23:03:31使ってる…よな?
0679デフォルトの名無しさん
2008/10/27(月) 23:07:57>マルチスレッド化しようとforを複数のスレッドで分割してみたのですが、全く速度は変わらず…
それマルチコアマシン?
まさかシングルコアのマシンで速くならないとか思ってないだろうな?
まあ処理内容にもよるが、どうも勘違いしてるように感じる。
0680デフォルトの名無しさん
2008/10/27(月) 23:09:200681デフォルトの名無しさん
2008/10/27(月) 23:15:53マルチスレッド使ったってスループットが上がるわけないんじゃないの
常識的に言って。
マルチスレッドで得られるものは「特定の処理によるCPU時間の占有の回避」だけでしょ?
0682デフォルトの名無しさん
2008/10/27(月) 23:18:070683デフォルトの名無しさん
2008/10/27(月) 23:19:290684674
2008/10/27(月) 23:25:40使用しているCPUは C2DのE6600です。
>>680
Monitorの部分は後からInterlocked.Increment()に書き換えました。
Interlockedクラスは後から知ったのと、なぜかlockステートメントよりもMonitorの方が速い
と思いこんでいたのでそんな書き方をしていました orz
>>681
CPUの処理速度よりもデータの転送速度の方がネックなのでしょうか?
処理は、単純にbyte配列の値を
temp[i] = 255 - array[i];
とかしながらコピーしているだけなのですが…
0685デフォルトの名無しさん
2008/10/27(月) 23:39:520686デフォルトの名無しさん
2008/10/27(月) 23:43:050687デフォルトの名無しさん
2008/10/27(月) 23:48:13それだったら、array/tempの前半と後半でスレッドに分ければいい。
互いに読み書きする領域がかぶらなければ排他制御は不要。
0688デフォルトの名無しさん
2008/10/28(火) 00:21:24それ何のインクリメント?
まさかとは思うがループ変数のインクリメントじゃないだろうな…
0689デフォルトの名無しさん
2008/10/28(火) 00:22:44例えば>>678みたいにするもんだ。
0690デフォルトの名無しさん
2008/10/28(火) 00:23:450691デフォルトの名無しさん
2008/10/28(火) 01:03:22↑にあるように構造体とプロパティは相性が悪いようですが
どう対処するのがいいですか?
0692デフォルトの名無しさん
2008/10/28(火) 01:07:19試してみましたが、大して速度は変わらないっぽいです。
時間にして
シングルスレッドで0.07秒ほどの物が0.06〜5秒になるくらいですが…
2倍になることはなくても大体この程度高速化できればいい方なのでしょうか?
0693デフォルトの名無しさん
2008/10/28(火) 01:15:36メモリアクセスばっかの処理は、特にキャッシュに乗るサイズを超えるともう
メモリ帯域がすべてになるから、ほとんど改善しなくても無理はない。
0694デフォルトの名無しさん
2008/10/28(火) 02:31:17一行ごとに配列に読み込んでくれる関数見たいのありませんか?
0695694
2008/10/28(火) 02:39:27失礼しました。
0696デフォルトの名無しさん
2008/10/28(火) 03:06:41というか、構造体はそういう物。
使い方や利便性などを考慮して、場合によっては
Sizeプロパティに加え、それにアクセスするためのWidth, Heightプロパティを定義する
0697デフォルトの名無しさん
2008/10/28(火) 03:19:28>Sizeプロパティに加え、それにアクセスするためのWidth, Heightプロパティを定義する
コードにするとどんなかんじになりますか?
0698デフォルトの名無しさん
2008/10/28(火) 03:31:57// int _w, _h;
public Size Size {
get { return new Size(_w, _h); }
set { _w = value.Width; _h = value.Height; }
}
みたいな感じになってたような
0699デフォルトの名無しさん
2008/10/28(火) 04:06:57できました!
トンクス
0700デフォルトの名無しさん
2008/10/28(火) 07:15:46構造体にセッターなんか作ったってプロパティ越しじゃ使えんのに
0701674
2008/10/28(火) 09:09:38>>693
いただいた回答を元にもう少し原因を探ったところ、どうやら画像サイズが小さくて
差が出にくかったようです。
テストは1024*768 32bitARGBの画像で行ったのですが、ぼかし処理等ではかなり時間が
掛かっていて、十分にマルチスレッドの効果が現れていたので(処理時間がほぼ1/2)、
このくらいのサイズからならマルチスレッドで処理すれば効果があるのかと思っていましたが、
色を反転させる程度の処理ではほとんど効果がなかったようです。
試しに4000*3000の画像でテストしてみると効果が出ていました。
早とちりすいませんでした orz
回答してくださった方々、本当にありがとうございました。
0702デフォルトの名無しさん
2008/10/28(火) 14:29:27本当に初心者なのか?
0703デフォルトの名無しさん
2008/10/28(火) 15:54:11お前は何を言っているのかと
0704デフォルトの名無しさん
2008/10/28(火) 17:38:430705デフォルトの名無しさん
2008/10/28(火) 18:17:490706623
2008/10/28(火) 18:33:34しかし、問題が新たに何点か浮かんできたので質問します。
1,AxWebbrowserを使うように変更したのですが、WebbrowserのときにあったWebbrowser.Document.Title等が使えなくなってしまいました。
どのようにすればタイトルや開いたページのソースコードを取得できるのでしょうか?
2.これはwebbrowserクラスでも同じくエラーになるのですが、作ったブラウザをVista上で動かすと、認証が必要なページにて
認証成功後に画面が切り替わるときに「Soft(仮)の動作を停止しました」というメッセージが出て、フリーズしてしまいます。
デバッガを使った結果、「0xC0000005: Access Violation」というエラーを吐いているようなのですが、ググっても解決法がよく分かりません。
なお、2の問題に関してはXPではエラーとはならず、認証後のページが一応開きます。
また、axwebbrowser.Visible = false; の状態だとフリーズはせず、 Visible = true; とした瞬間にフリーズとなります。
書き込んでいる本人もよく状況が分かっていませんが、よろしくお願いします。
0707デフォルトの名無しさん
2008/10/28(火) 18:49:11そう言えばmshtmlってPIAあったっけ? なら.NET参照の方にあるかも
0708デフォルトの名無しさん
2008/10/28(火) 19:14:53普通に考えればプロパティと相性が悪いのはむしろクラスの方だと思うけど。
少なくともプロパティで取得するような「状態」を表すオブジェクトは
構造体にする方が余計な勘違いを誘わない点で無難。
0709623
2008/10/28(火) 19:28:13mshtmlをCOM参照して、IHTMLDocument2にキャストしましたが、
「オブジェクト参照がオブジェクト インスタンスに設定されていません。」と出てエラーとなってしまいます。
mshtml.IHTMLDocument2 hd = (mshtml.IHTMLDocument2)axWebBrowser1.Document;
label1.Text = hd.title;
このように書いています。
どのように書き直せばいいのでしょうか?
0710デフォルトの名無しさん
2008/10/28(火) 19:32:38axWebBrowser1?
axWebBrowser1.Document?
hd?
ht.title?
0711623
2008/10/28(火) 19:42:56申し訳ありません、解決しました。
axWebBrowser1がnullだったのでおかしいなと思い、呼び出し位置を変えてみたところ、今度はきちんと動きました。
どうやらページに移動し終わる前にIHTMLDocument2に代入しようとしていたようです。
すみませんでした。
0712デフォルトの名無しさん
2008/10/28(火) 20:20:01以外に少ないんだな・・・
C#ってまだまだマイナーなのかな
0713デフォルトの名無しさん
2008/10/28(火) 20:21:170714デフォルトの名無しさん
2008/10/28(火) 20:30:13.NET 2.0 Framework再頒布パッケージが必要ですと書かれているものの殆どがC#だと思います
0715デフォルトの名無しさん
2008/10/28(火) 20:52:31今のソフトってまだCとかC++とかが主流なのかな。
今から趣味程度にソフト開発始めるなら、C#でもいい?
0716デフォルトの名無しさん
2008/10/28(火) 21:02:250717デフォルトの名無しさん
2008/10/28(火) 21:05:250718デフォルトの名無しさん
2008/10/28(火) 21:09:47言ってる意味がわからない
0719デフォルトの名無しさん
2008/10/28(火) 21:14:38IDEはC#のほうが便利だし
0720デフォルトの名無しさん
2008/10/28(火) 21:25:33クラスに配列が2個以上あったらどうするの?
0721デフォルトの名無しさん
2008/10/28(火) 21:26:24言うほど便利か?
0722デフォルトの名無しさん
2008/10/28(火) 21:26:46プロパティとして外に出せばいいんじゃね?
0723デフォルトの名無しさん
2008/10/28(火) 21:27:56デザイナはどっちもかわらんし、エディタはVBのが快適な点もある。
0724デフォルトの名無しさん
2008/10/28(火) 21:27:590725デフォルトの名無しさん
2008/10/28(火) 21:28:50> インデクサってクラスに1こしか作れないの?
言ってる意味がわからん。
0726デフォルトの名無しさん
2008/10/28(火) 21:33:03CLIは名前つきインデクサをサポートしていて、
VB.NETではそれを使用できる。
0727デフォルトの名無しさん
2008/10/28(火) 21:33:09そもそも VB はソースの可読性に難があるからな。
IDE 側で頑張って可読性を向上させてやろうって努力はよく分かるんだけど、それでもね…。
まあこの辺は人によって違うだろうけど。
0728デフォルトの名無しさん
2008/10/28(火) 21:34:49微妙に話が噛みあってないような気がするんだけど
0729デフォルトの名無しさん
2008/10/28(火) 21:38:170730デフォルトの名無しさん
2008/10/28(火) 21:39:450731デフォルトの名無しさん
2008/10/28(火) 21:40:500732デフォルトの名無しさん
2008/10/28(火) 21:41:530733デフォルトの名無しさん
2008/10/28(火) 21:53:18インデクサはどう定義すればいいん?
0734デフォルトの名無しさん
2008/10/28(火) 21:54:02特別のケースとしてインデックサを設けているのはC#という言語の設計思想によるもの。
文句があるならヘルスバーグにメールしてくれ。
それはおいといて、VBでインデックス付きプロパティをもつクラスを
作ってしまってC#から使うことになった場合はset_, get_ の内部名を直接指定する。
x.set_NamedProp(1, "nnnnn");
s = x.get_NamedProp(1);
0735デフォルトの名無しさん
2008/10/28(火) 21:56:38インデクサを持った型のインスタンスを返すプロパティにする
0736デフォルトの名無しさん
2008/10/28(火) 21:57:580737デフォルトの名無しさん
2008/10/28(火) 22:13:20XXX:: デフォルトの名無しさん [sage] (ry
class HogeNest
{
property Hoge[] FooRoom { get; set; ready;}
}
で良いんじゃね
YYY: デフォルトの名無しさん [sage] (ry
class HogeCollection:List<Hoge> {..}
class HogeNest{ (ry) }
もありかも
ZZZ: デフォルトの名無しさん [sage] (ry
>>XXX >>ZZZ
ガイドライン違反 、配列を外から云々(ry
0738デフォルトの名無しさん
2008/10/28(火) 22:58:34> C#でインデックス付きプロパティを原則禁止して、
どういうこと?
0739デフォルトの名無しさん
2008/10/28(火) 23:16:140740デフォルトの名無しさん
2008/10/28(火) 23:21:14これがガイドライン違反 、配列を外から云々(ryってやつ?
class Program
{
static void Main(string[] args)
{
Hoge h = new Hoge();
if (h.A != null) {
for (int i = 0; i < h.A.Length; i++) {
Console.WriteLine(h.A[i]);
}
}
}
}
class Hoge
{
int[] a;
int[] b;
public int[] A { get { return a; } }
public int[] B { get { return b; } }
}
0741デフォルトの名無しさん
2008/10/29(水) 01:12:40普通にインデクサ
0742デフォルトの名無しさん
2008/10/29(水) 01:40:270743デフォルトの名無しさん
2008/10/29(水) 01:49:460744デフォルトの名無しさん
2008/10/29(水) 02:38:18Indexed property はCOM専用っぽい記述になってる。
どうなんだろう。
0745デフォルトの名無しさん
2008/10/29(水) 02:57:24全然ダメじゃん
0746デフォルトの名無しさん
2008/10/29(水) 07:38:18ラムダと dynamic、用途がまるで違うんだが。
0747デフォルトの名無しさん
2008/10/29(水) 07:42:04「C# が持ってない概念に依存しない COM 呼び出しができます」じゃない?
つまり、COM 専用な概念は dynamic では呼べない。
0748デフォルトの名無しさん
2008/10/29(水) 09:43:15Rubyユーザーに馬鹿にされるところが目に浮かぶよ俺は
0749デフォルトの名無しさん
2008/10/29(水) 10:24:06今回は目玉が少ない気がする。まだ発表してない要素があるのだろうか。
0750デフォルトの名無しさん
2008/10/29(水) 10:37:59「クラスの状態」を保持するのに、フィールドを使わずにどうやって実装するの?
たとえばここに色を現わすColourというクラスがあるとして、そのインスタンスのひとつが
現在「赤」なのか「青」なのか、どうやって状態を保持する?
0751デフォルトの名無しさん
2008/10/29(水) 10:41:19in T、out Tは使いそうだけど
0752デフォルトの名無しさん
2008/10/29(水) 12:20:43検索も追加/編集も両方同じDataGridViewを使おうと思っています。
が、検索するときに編集してしまったり、追加してしまったりしたくないのです。
最初、タブを2つ作って、そのタブの下に(中ではなく)DGVを配置していたのですが、
タブを切り替えるたびに、検索したあとの検索結果を戻したり、編集できなくさせたりするのが面倒で、
検索機能だけもったアプリ、追加・削除・編集をできるアプリ、と2つにわけました。
わけたのですが、やはりスマートじゃないかなと思い質問してみました。
答えは無いと思いますが、みなさんならどんなインターフェイスにしますか?
0753デフォルトの名無しさん
2008/10/29(水) 12:20:59ClassName classname のような宣言ができるんですが
避けた方がいいんでしょうか?
0754デフォルトの名無しさん
2008/10/29(水) 12:28:30> 現在「赤」なのか「青」なのか、どうやって状態を保持する?
メソッドの引数で伝達していけばいい
0755デフォルトの名無しさん
2008/10/29(水) 12:31:16そういうことを考えてくと、クラスの内部であってもプロパティからしかアクセスできない変数って言うのが欲しくなる
出来ないよな?そんなこと
0756デフォルトの名無しさん
2008/10/29(水) 12:38:24ウィンドウ作るのに一体いくつの引数があればいいんでしょうか
0757デフォルトの名無しさん
2008/10/29(水) 12:47:51class baseClass
{
private Object hiddenField;
protected Object ProtectedProperty{ get{ return hiddenField; } (ry)}
}
class mainClass:baseClass
でやれば出来ないこともないとは思うが、そこまでして保護する必要性もないと思う。
0758デフォルトの名無しさん
2008/10/29(水) 12:53:29別に一つのDGVで完結させても面倒なことは何一つ無いと思うが。
0759デフォルトの名無しさん
2008/10/29(水) 12:55:08フィールドがあるわけだが
0760757
2008/10/29(水) 13:12:07知らないうちに値が書き換わっているのは確かに怖いが
外部からの理不尽な書き換えをなくすために隠蔽があるわけで、外部から手が加えられないなら問題ないだろ。
クラス内部での妥当な状態変化には寛容であるべき。
>>759
mainClass(命名規則がおかしいな)ではhiddenFieldは隠蔽されない?
0761デフォルトの名無しさん
2008/10/29(水) 13:12:24それってクラスにする意味があるの?
ただの関数に思えるのだが。
0762デフォルトの名無しさん
2008/10/29(水) 13:15:00たとえば、
1.フォームが生成されたとき、デフォルトの色を「赤」に設定する。
2.ボタンが押されたら、色を「青」に変更する。
1と2のイベントの間、「赤」という情報はどこに保存するの?
0763デフォルトの名無しさん
2008/10/29(水) 13:20:43ボタンが押されたときに「青」という状態を変数にしてメソッドに渡せばいいんじゃね?
0764デフォルトの名無しさん
2008/10/29(水) 13:31:24クラス内フィールドという意味が良く分からんが、
Publicなフィールドが必要ないって意味なのかな?
それならまだ分かるんだ。
でも>>651の言っているのはPrivateなフィールドすら必要ないと言っているように聞こえるんだ。
>>763
じゃあボタンが押されたときに、フォームの色が赤だったら青に、
青だったら緑に、緑だったら赤にするようにしたいときはどうする?
0765デフォルトの名無しさん
2008/10/29(水) 13:37:43現在のフォームの色を検出するメソッドをつくって、そこから得られた色を
ボタンクリックのメソッドに渡せばいいんじゃね?
0766デフォルトの名無しさん
2008/10/29(水) 13:40:20>現在のフォームの色を検出するメソッド
これどうやって実現するの?
現在のフォームの色は何者が保持してるの?
0767デフォルトの名無しさん
2008/10/29(水) 13:44:090768デフォルトの名無しさん
2008/10/29(水) 13:44:420769デフォルトの名無しさん
2008/10/29(水) 13:46:03グローバルなんて言ってんのはそもそも適切なクラス設計が出来てないからだろう。
0770デフォルトの名無しさん
2008/10/29(水) 13:48:07ボタンが押されるまでは「赤」で「あり続ける」必要があるのだが、その「赤」という情報は
どこにあるの?
Windowsが描画を要求したとき、色の情報が存在しなければ描画できないよ。
0771デフォルトの名無しさん
2008/10/29(水) 13:51:36同意。
フィールドが存在しない(状態を保持しない)クラスなど、関数ライブラリと変わらない。
そもそもインスタンスを生成する必要がないから、全部staticでよいことになる。
それなら構造化プログラミングだけやってればいいわけで。
0772デフォルトの名無しさん
2008/10/29(水) 13:54:31複数のテキストボックスとOKボタンを配置して入力フォームを作成しています。
タブでフォーカス遷移させながらユーザーに入力させたいのですが、
テキストボックスのどこにフォーカスがあってもEnterが押されたらOKボタンのクリックイベントが発生するような
よくある形の入力フォームにしたいです。
当然テキストボックスのPreviewKeyDownイベントでOKボタンのクリックイベントを呼び出せばいいのですが、
このときにOKボタンにフォーカスが当たっているように見せたいです。
つまり、textbox1にフォーカスが当たっているときにも、OKボタンの外枠が青っぽくなるようにしたいです。
これも良くある入力フォームの形だと思うのですが、どのように実装したら良いでしょうか。
0773デフォルトの名無しさん
2008/10/29(水) 13:55:130774デフォルトの名無しさん
2008/10/29(水) 13:59:32AcceptButton
0775623
2008/10/29(水) 14:01:10button を押すとaxwebbrowserで現在開いているページのエンコードを utf-8 に変えたいのですが、
どのようにすれば実現できるのでしょうか?
0776デフォルトの名無しさん
2008/10/29(水) 14:04:12ありがとう
0777デフォルトの名無しさん
2008/10/29(水) 14:06:28それはみんな普通にやってるんじゃ。
MSDN でもそういうコード見かけるし。
0778デフォルトの名無しさん
2008/10/29(水) 14:09:20charset
0779デフォルトの名無しさん
2008/10/29(水) 14:11:480780623
2008/10/29(水) 14:15:26axwebbrowser. の直下には見当たらないので困っています。
webbrowserなら、webbrowser.Document.Encodingで設定できるのですが・・・
0781デフォルトの名無しさん
2008/10/29(水) 14:21:00myDocument.charset = "utf8";
0782623
2008/10/29(水) 14:30:19「引数が無効です」というエラーが出て終了します。
myDocument.charset = "utf8";
の代入部分でエラーを出しているようです。
0783デフォルトの名無しさん
2008/10/29(水) 14:38:430784デフォルトの名無しさん
2008/10/29(水) 14:40:48ちょっとハイフン忘れただけじゃんかよ、utf-8でやってみ
0785デフォルトの名無しさん
2008/10/29(水) 14:51:09書き込んだ後で気づきました・・・
コンパイルは通るようになりましたが、エンコードの変更がページに反映されません。
axwebbrowser.Document = myDocument;
としようとすると、「プロパティまたはインデクサ 'AxSHDocVw.AxWebBrowser.Document' は読み取り専用なので、割り当てることはできません」というエラーが出てしまいます・・・
0786デフォルトの名無しさん
2008/10/29(水) 14:53:47ページそのものにcharset指定があると戻されるが。
0787デフォルトの名無しさん
2008/10/29(水) 14:54:020788デフォルトの名無しさん
2008/10/29(水) 15:20:05イベントハンドラとかは、Form.csに自動で追加されるから、そこにそのまま記述してるんだけど、
ほかの処理とかも、どんどんForm.csにメソッドとして追加していけばいいのか?とか悩む
0789デフォルトの名無しさん
2008/10/29(水) 15:24:040790デフォルトの名無しさん
2008/10/29(水) 15:26:05自分も気になるんだけどたまにWin32とかいうクラスを作って
その中にAPIの宣言を纏めて書いているプログラムをたまに見かけるけど
よくある手法?
クラス毎に必要なAPIだけ記述しているけど、当然クラスによっては
同じAPIを宣言しているものもあって、オブジェクト指向的にはどうなんだろう。
0791デフォルトの名無しさん
2008/10/29(水) 15:27:57最初のうちはそれでいいんじゃないの?
自作クラスとかカスタムコントロールを使うようになると、たとえばMyClass.csとかの
別のファイル(またはソリューション)にユーザー定義のイベントや、フィールド、メソッド、プロパティ
やらを実装していく形になる。そしてそれが肥大化した場合にフォルダ分けをしてソースコードを整理することになる。
それによって自動的に関数ライブラリとユーザーコントロールとフォーム系とその他のクラス等、
それぞれのnamespaceが変わってくることになる。
0792デフォルトの名無しさん
2008/10/29(水) 15:29:19NativeMethods/SafeNativeMethods/UnsafeNativeMethods
のいずれかのクラス内にまとめろってFxCopが言ってた
0793デフォルトの名無しさん
2008/10/29(水) 15:44:33昔のC#には無かった気が駿河
0794デフォルトの名無しさん
2008/10/29(水) 16:07:54こういうやつがでてくるからコンソールアプリから勉強しろと言いたくなるんだな。
0795デフォルトの名無しさん
2008/10/29(水) 16:10:20こういうやつがでてくるから説明できないなら黙ってろと言いたくなるんだな。
0796デフォルトの名無しさん
2008/10/29(水) 16:19:550797デフォルトの名無しさん
2008/10/29(水) 16:20:46そんな煽りに釣られるほどクマー
0798デフォルトの名無しさん
2008/10/29(水) 17:02:11Refresh()で更新をすると、こちらが指定したエンコードが元に戻るようで、結局更新されないみたいです。
Form本体、axwebbrowser両方ともにRefresh()してみましたが、駄目でした。
0799デフォルトの名無しさん
2008/10/29(水) 17:04:00htmlファイルをFile.ReadAllText()で読み込んで、それをプログラム上で編集後に
再度htmlファイルとして保存し、それをブラウザで表示するプログラムを作っています。
以下にコードを示します。
//ソースを読み込む
string htmSource = File.ReadAllText(filename);
//----------編集処理---------------
//新しいhtmファイルの保存
File.WriteAllText(newFileName, htmSource);
//一時htmファイルを開く
System.Diagnostics.Process.Start(tmpFileName);
このときにブラウザで表示しようとすると文字化け?のようなことが起こります。
エンコードの問題だと思うのですが、その辺が疎くて分かりません。
一応SakuraEditorで元のhtmファイルを開いてみたらエンコードがシフトJISのようでした。
しかしながらSystem.Text.EncodingにはシフトJISがないようです。
どのように対処すればよいか教えて下さい。
0800799
2008/10/29(水) 17:05:21//ソースを読み込む
string htmSource = File.ReadAllText(filename);
//----------編集処理---------------
//新しいhtmファイルの保存
File.WriteAllText(newFileName, htmSource);
//新しいhtmファイルを開く
System.Diagnostics.Process.Start(newFileName);
0801799
2008/10/29(水) 17:18:56//ソースを読み込む
string htmSource = File.ReadAllText(filename, System.Text.Encoding.GetEncoding("Shift_JIS"));
//----------編集処理---------------
//新しいhtmファイルの保存
File.WriteAllText(newFileName, htmSource, System.Text.Encoding.GetEncoding("Shift_JIS"));
//新しいhtmファイルを開く
System.Diagnostics.Process.Start(newFileName);
これでOKでした。
スレ汚し失礼しました。
0802デフォルトの名無しさん
2008/10/29(水) 17:19:29目的ページには効果が無かったのですが、関係の無いページで試してみると変更されました。
目的ページには記述が見当たらないのですが、どこか別のところに指定があるようです。
どうやら無理っぽいので諦めたいと思います。
0803デフォルトの名無しさん
2008/10/30(木) 00:55:51~~~~~~~~
{
if (s == "★")
{
cnt += 1;
}
}
エラー1 型 'char' を型 'string' に変換できません。
foreachの下に下線が付いて↑のコンパイルエラーになってしまいます。
contentsTextはString型文字列です。
どんな原因が考えられるでしょうか?
0804デフォルトの名無しさん
2008/10/30(木) 00:59:51まんまじゃねーか
0805デフォルトの名無しさん
2008/10/30(木) 01:02:23{
if (c == '★')
{
cnt += 1;
}
}
0806デフォルトの名無しさん
2008/10/30(木) 01:03:060807803
2008/10/30(木) 01:04:24すいません、理解しました。
文字列をコレクションとしてループさせる場合はStringとして扱うことはできないでしょうか?
0808デフォルトの名無しさん
2008/10/30(木) 01:04:35contentsTextをSplitしなきゃダメ
0809デフォルトの名無しさん
2008/10/30(木) 02:13:32>VB
Dim Element As HtmlElement = WebBrowser1.Document.All("last")
>C#
HtmlElement Element = WebBrowser1.Document.All("last");
VBのコードだと指定したIDをHtmlElementとして拾えるのですが、
C#だと「実行不可能なメンバ 'System.Windows.Forms.HtmlDocument.All' をメソッドのように使用することはできません。」
というエラーになります。
できればコレクションではなく、IDを指定してランダムアクセスしたいのですがご存じの方お願いします。
0810デフォルトの名無しさん
2008/10/30(木) 02:19:42よくわからんけど["last"]じゃねーの?
0811デフォルトの名無しさん
2008/10/30(木) 02:39:070812デフォルトの名無しさん
2008/10/30(木) 02:48:37ちなみにループはもちろん,usingやfixedも{}省略可
0813デフォルトの名無しさん
2008/10/30(木) 02:53:480814デフォルトの名無しさん
2008/10/30(木) 02:56:050815デフォルトの名無しさん
2008/10/30(木) 02:56:36COM
逆P/Invoke
上から順に検討しましょう
0816デフォルトの名無しさん
2008/10/30(木) 02:58:34全部c++で書こうと思います
0817デフォルトの名無しさん
2008/10/30(木) 02:58:350818デフォルトの名無しさん
2008/10/30(木) 03:03:26逆P/InvokeやCOMは無しで
0819デフォルトの名無しさん
2008/10/30(木) 03:12:130820デフォルトの名無しさん
2008/10/30(木) 03:28:03長いコード書かせるための罠ですか?
0821デフォルトの名無しさん
2008/10/30(木) 03:33:130822デフォルトの名無しさん
2008/10/30(木) 03:34:040823デフォルトの名無しさん
2008/10/30(木) 03:48:30こんな単純なメソが無いなんておかしいし、美しくない
0824デフォルトの名無しさん
2008/10/30(木) 03:52:34拒絶反応が出たあ
で本題ですけど、stringの""とnullって何が違うの?
0825デフォルトの名無しさん
2008/10/30(木) 04:24:30""は空文字列という真っ当な文字列
0826デフォルトの名無しさん
2008/10/30(木) 08:58:09文句があるなら継承して実装する。
何のためのOOPだ。
0827デフォルトの名無しさん
2008/10/30(木) 10:10:16開いているIE7のURLを知りたいです。
次のコードで、プロセス名やプロセスのパスは取得できました。
string ProcessName = "iexplore";
Process[] allProcesses = Process.GetProcessesByName(ProcessName);
foreach (Process oneProcess in allProcesses)
{
Console.WriteLine(oneProcess.MainModule.FileName);
}
このあと、URLを知るには、どうしたらいいですか?
0828デフォルトの名無しさん
2008/10/30(木) 10:14:50プロセスからは無理。
ShellWindows を列挙して、LocationUrl を取るってのが COM 的な方法。
ウィンドウを列挙して、アドレスバーなりから取るのが Win32 的な方法。
0829デフォルトの名無しさん
2008/10/30(木) 10:37:060830デフォルトの名無しさん
2008/10/30(木) 10:48:140831デフォルトの名無しさん
2008/10/30(木) 11:09:011. str.length<0
2. str==""
3. str==string.Empty
があるかと思うのですが、可読性が高いのは一般的にどれなんでしょうか?
処理速度を求めっれば1番
プログラムの綺麗さを求めれば3番
と思っていますが、個人的には2番が見やすいかなと
0832831
2008/10/30(木) 11:09:470833デフォルトの名無しさん
2008/10/30(木) 11:11:28次にmsdnでshellwindowsを検索しました。
が、あまり有効な情報がなく。
ShellWindows shellWindows = new ShellWindowsClass();
とかだと、参照が不足しているようなのですが、なにを追加すべきですか?
0834デフォルトの名無しさん
2008/10/30(木) 11:17:48==とLengthでは,==ははじめに文字列の長さを比較するようになってるからほとんど変わらないはず
0835デフォルトの名無しさん
2008/10/30(木) 11:29:22俺はいつも==""だな
逆も!=""
0836デフォルトの名無しさん
2008/10/30(木) 11:37:37ShellクラスのWindowsメソッドだったっけ
// Shellは厳密にはinterfaceだったはずだけどなー
0837デフォルトの名無しさん
2008/10/30(木) 11:37:51あと、SHDocVw を参照設定して、こんな感じ。
エクスプローラも含むから気をつけてね。
Shell sh;
SHDocVw.ShellWindows o;
sh = new Shell();
o = (SHDocVw.ShellWindows)sh.Windows();
foreach( InternetExplorer ie in o )
{
MessageBox.Show(ie.LocationURL);
}
0838デフォルトの名無しさん
2008/10/30(木) 11:57:33ありがとうございます。
SHDocVwライブラリは、参照-COMで、Microsoft Internet Controls-ieframe.dllがそうなんですね。
名前がぜんぜん違うので、見つけられなかったです。
InternetExplorerの参照がないといわれています。
これはなにを参照すればよいでしょう?
0839デフォルトの名無しさん
2008/10/30(木) 12:03:400840デフォルトの名無しさん
2008/10/30(木) 13:35:450841デフォルトの名無しさん
2008/10/30(木) 14:21:04や る な い か
0842デフォルトの名無しさん
2008/10/30(木) 14:58:400843デフォルトの名無しさん
2008/10/30(木) 15:01:06後から「これしか入ってなかった場合は空文字列扱いね」はあるかもしれないな
0844デフォルトの名無しさん
2008/10/30(木) 15:11:45つっても普段からこんなのまで考慮してたらキリがない
0845デフォルトの名無しさん
2008/10/30(木) 15:45:470846デフォルトの名無しさん
2008/10/30(木) 15:51:190847デフォルトの名無しさん
2008/10/30(木) 15:51:480848デフォルトの名無しさん
2008/10/30(木) 15:59:06できました。ありがとうございました。
0849デフォルトの名無しさん
2008/10/30(木) 16:11:37if (TextBox.Text.Contains("北海道|青森県"))
でいいんだよね?
0850デフォルトの名無しさん
2008/10/30(木) 16:17:170851デフォルトの名無しさん
2008/10/30(木) 16:27:200852デフォルトの名無しさん
2008/10/30(木) 16:28:53private useFolder(string FolderName)
string[] mails = Directory.GetFiles(FolderName);
sh = new Shell();
みたいに。
ひとつめは、メソッド名での定義。
ふたつめは、変数(データ型)での定義。
最後は、コンストラクタを呼び出して新しいオブジェクトを作成するnew演算子による定義。
こんな理解でよさそうですか?
0853デフォルトの名無しさん
2008/10/30(木) 16:31:14なるほど。それでヒットしなかったんだ!
thanks.
ひょっとしてこれって、配列を使うとスマートだったりする?
0854デフォルトの名無しさん
2008/10/30(木) 16:32:26object sender, EventArgs e
の意味を教えてくれ!
0855デフォルトの名無しさん
2008/10/30(木) 16:40:56たとえばボタンがクリックされたとき、ボタンクリックイベントが呼び出されるわけだが、
ただ「ボタンがクリックされたぞー」と呼ばれても不親切だ。
そこで、クリックされたボタン(sender)を教えてくれているわけ。
「EventArgs e」が必要になるのは、もうちょっと後だろう。今は知らなくて良い。
0856デフォルトの名無しさん
2008/10/30(木) 16:42:26if (Regex.Match(textBox1.Text, "北海道|青森県").Success)
とか
0857デフォルトの名無しさん
2008/10/30(木) 16:54:000858デフォルトの名無しさん
2008/10/30(木) 17:15:33ふむ。だれがだれに教えるの?
乏しい理解によれば、
メソッド(引数)
と書くと、その引数でそのメソッドを処理して、答えを外に返してくれる。
とすると、senderを押したってことは、外になんか返ってくるわけ?
たとえば、
private void button_Click(object sender, EventArgs e)
とあるとき、
button_Click(this, EventArgs.Empty);
と実行すると、なにか返ってくるの?
でも、返ってくるとしたら、returnになんか値を入れとかないとだめなんじゃなかったっけ?
あと、ぶっちゃけ()を空にしちゃだめ?
っていうか空にしても動いた気がするんだけど。
0859デフォルトの名無しさん
2008/10/30(木) 17:42:510860デフォルトの名無しさん
2008/10/30(木) 17:45:22> ふむ。だれがだれに教えるの?
イベント起こしたものが、イベントを受け取るものに。
例えばボタンのクリックなら、Clickイベントを起こしたもの(== Button)が sender。
受け取るものってのは要するにbutton_Clickメソッド。総称イベントハンドラ。
> と書くと、その引数でそのメソッドを処理して、答えを外に返してくれる。
> とすると、senderを押したってことは、外になんか返ってくるわけ?
senderを押す? って何?
button_Clickメソッドは1つでbutton1.Clickとbutton2.Clickの両方のイベントハンドラとすることができる。
でもそのままだとどっちのボタンのClickによって呼び出されたのか区別がつかない。
なのでsenderで区別する。
> たとえば、
> private void button_Click(object sender, EventArgs e)
> とあるとき、
> button_Click(this, EventArgs.Empty);
> と実行すると、なにか返ってくるの?
イベントハンドラはイベントによって自動的に呼び出されるメソッド。
基本的に自分で呼び出すもんじゃない。
それに返値はvoidだろ。
> あと、ぶっちゃけ()を空にしちゃだめ?
> っていうか空にしても動いた気がするんだけど。
イベントハンドラとして使用できない。
ButtonのClickイベントはEventHandler型で、このデリゲートと引数が一致していないといけない。
0861デフォルトの名無しさん
2008/10/30(木) 17:45:49IsMatch使おうよ
>>858
イベントハンドラを呼び出すのはイベント発生元のオブジェクト
プログラマがイベントハンドラを呼び出すコードを書くことはまずない
0862デフォルトの名無しさん
2008/10/30(木) 17:46:23> と実行すると、なにか返ってくるの?
private void button_Click(object sender, EventArgs e)
 ̄ ̄ ̄
だからvoidが返ってくる。つまり、何も返ってこない。
0863デフォルトの名無しさん
2008/10/30(木) 17:56:300864デフォルトの名無しさん
2008/10/30(木) 19:42:16強制ID実装を駄目元で頼み込んでみた。
もし賛同してくれる人がいたら同意のレスつけてください。
0865デフォルトの名無しさん
2008/10/30(木) 19:48:160866デフォルトの名無しさん
2008/10/30(木) 19:53:05EventArgsに集約してe.Senderでアクセスできるようにすればいいのに
0867デフォルトの名無しさん
2008/10/30(木) 19:54:460868デフォルトの名無しさん
2008/10/30(木) 20:01:50あえて言えば、
(1) 何も付加情報がないときはnullで済ませたい。
というイベントを発火する側の要求と、
(2) イベントの発火人の情報の受け渡しは強制したい
というリスナ側の要求の折衷じゃないのかな。
0869デフォルトの名無しさん
2008/10/30(木) 21:21:27メソッドとイベントハンドラの区別がつかない自分に気づいた。
カタカナ語に弱い。
あ、イベントによって自動的に呼び出されるメソッドのことをイベントハンドラというのか。
イベントってのは、ボタンを押したりとかの動作のことでしょ。
ってことは、手動で呼び出すメソッドのことはメソッドというのか?
あり? でもメインメソッドはメインメソッドじゃなかったっけ。
頭が煮え立ってきたので、今日はここまで。
理解が遅くてすまん。
ありがとう
0870デフォルトの名無しさん
2008/10/30(木) 21:24:180871デフォルトの名無しさん
2008/10/30(木) 21:42:37ただ定義だけして CLR? に呼んでもらう感じだし。
(Main() のように自分で直接呼び出したりはしない)
0872デフォルトの名無しさん
2008/10/30(木) 21:53:28メソッドのうち、イベント時に呼ばれる特殊なメソッドをイベントハンドラと呼ぶ。
「自動車」と「消防車」の関係に同じ。
火事の時に呼ばれる特殊な自動車を消防車と呼ぶが、火事以外の平時に消防車が走行しては
ならないということではない。
0873デフォルトの名無しさん
2008/10/30(木) 22:00:22そういう訳のわかんない説明は、オブジェクト指向を動物に喩える話と同じぐらい
ありがた迷惑なんじゃないかと思うよ。
つーか特殊なメソッドとか誤解を招くようなこと言うなよ。
イベントドリブンの考えなんて普通にプログラム書いてれば自然とわかるから
心配いらん。
0874デフォルトの名無しさん
2008/10/30(木) 22:23:120875デフォルトの名無しさん
2008/10/30(木) 22:25:540876デフォルトの名無しさん
2008/10/30(木) 22:31:21eにnull渡しちゃダメ
EventArgs.Emptyを渡すお約束
>>852
private useFolder(string FolderName) //メソッドの宣言
{
//string[]型の変数mailsを宣言(mail=右辺 と定義しているわけではなく,mailに右辺の値を代入している)
string[] mails = Directory.GetFiles(FolderName);
//コンストラクタの戻り値をshに代入。もちろんsh=new Shell()と定義しているのではない。
sh = new Shell();
}//{ }内はメソッドの定義
0877デフォルトの名無しさん
2008/10/30(木) 22:33:370878デフォルトの名無しさん
2008/10/30(木) 22:47:50コンストラクタは新しいインスタンスを返す関数のようなものだろ
0879デフォルトの名無しさん
2008/10/30(木) 22:51:120880デフォルトの名無しさん
2008/10/30(木) 22:51:550881デフォルトの名無しさん
2008/10/30(木) 22:53:59Hoge obj = まっさらなHogeのインスタンスを作成;
obj.コンストラクタ();
return obj;
}
イメージとしてはこんな感じでおk?
0882デフォルトの名無しさん
2008/10/30(木) 22:57:32class{
Method01(){InitializeComponent();}
Method02(){
}
Method03(){
}
}
とあるとき、Method01〜03で共通に使う変数は、メンバ変数として、クラス直下で指定すると思います。
でも、
string inputText = TextBox.Text
は、Method02の内部でないと指定できなかったりします。
このinputTextをMethod03で使うにはどうしたらいいんですか?
ご指導ください。
0883デフォルトの名無しさん
2008/10/30(木) 22:58:53・Method03に引数として渡す
0884デフォルトの名無しさん
2008/10/30(木) 23:00:510885デフォルトの名無しさん
2008/10/30(木) 23:03:21string inputText; //フィールド
void Method2(){
inputText = textBox1.Text;
}
void Method3(){
string str = inputText + "これでつかえたね";
}
0886デフォルトの名無しさん
2008/10/31(金) 00:20:09イベントハンドラが特殊じゃないってんなら、privateなのに自クラス以外から参照できる理由を
説明してくれ。
0887デフォルトの名無しさん
2008/10/31(金) 00:34:49そのメソッドをイベントハンドラ用のデリゲートにバインドすることで,
メソッドをあたかもオブジェクトのように扱えるようになる
javaなんかではprivateな内部クラスでインターフェイスを実装して,
そのインスタンスをイベントに登録したりするけど,デリゲートはそれを簡略化した仕組み
0888デフォルトの名無しさん
2008/10/31(金) 00:35:14ねーよwww
0889デフォルトの名無しさん
2008/10/31(金) 00:38:29>privateなのに自クラス以外から参照できる
コード例をたのむ
0890デフォルトの名無しさん
2008/10/31(金) 00:38:49なるほど。ありがとうございます。
class{
Method01(){InitializeComponent();}
Method02(){
if() {string inputText = TextBox.Text}
}
Method03(){string inputText = TextBox.Text}
}
の場合はどうなります?
Method02のifが成立しているときは03の定義を省略できますが、03の定義を省略して次のようにすると、
class{
string inputText;
Method01(){InitializeComponent();}
Method02(){if() {inputText = TextBox.Text;}}
Method03(){string str = inputText;}
}
ifが成立しないときは、Method03が成り立たなくなってしまう気がします。
0891デフォルトの名無しさん
2008/10/31(金) 00:44:18やりたいことの意味が分からん。
テキストボックスのテキストをフィールドとして使いたいクラスがあるのだとすれば、
単にテキストボックスのTextChangedイベントでinputTextに代入していればいいだけの
ことじゃないの?
コードの書き方と云々以前の問題で、設計自体が既に破綻しているようにしか見えない
0892デフォルトの名無しさん
2008/10/31(金) 00:44:24インスタンス変数を使うなら「状態」を意識しないといけない
0893デフォルトの名無しさん
2008/10/31(金) 00:48:18sh = new Shell();などを
Method01-03で共通で使うには、どのようにしたらよいでしょうか?
0894デフォルトの名無しさん
2008/10/31(金) 00:51:10まったく同じこと
0895デフォルトの名無しさん
2008/10/31(金) 00:51:16インスタンスフィールド初期化子を使え
0896デフォルトの名無しさん
2008/10/31(金) 02:20:26オススメのメットホッド教えてください
当方女子高生です
0897デフォルトの名無しさん
2008/10/31(金) 02:35:35少数派だな
0898デフォルトの名無しさん
2008/10/31(金) 02:38:29お前きもいから
0899デフォルトの名無しさん
2008/10/31(金) 04:16:260900デフォルトの名無しさん
2008/10/31(金) 04:59:22教えてください
0901デフォルトの名無しさん
2008/10/31(金) 05:36:37{
int b = a; // b・・・ローカル変数
return b; // 戻り値
}
パラメータ(引数)・・・関数の外部(呼び出し元)から受け取った変数
ローカル変数 ・・・関数の内部でのみ使われる変数
戻り値 ・・・関数の外部(呼び出し元)に返す変数
パラメータや戻り値が 呼び出し元 と関係する(受け取り、返す)のに対して
ローカル変数は関数の内部で完結し、呼び出し元から見られる事がない。
0902デフォルトの名無しさん
2008/10/31(金) 06:37:410903デフォルトの名無しさん
2008/10/31(金) 09:09:300904デフォルトの名無しさん
2008/10/31(金) 09:30:560905デフォルトの名無しさん
2008/10/31(金) 10:42:42コード例マダー?
0906デフォルトの名無しさん
2008/10/31(金) 11:26:58デリゲートにして引き渡せばprivateなメソッドを外部から呼ぶことができる。
0907デフォルトの名無しさん
2008/10/31(金) 11:30:050908デフォルトの名無しさん
2008/10/31(金) 12:33:03初心者各位もとい諸君らが求めるそれに限りなく近い挙動だと思うんですけど
0909デフォルトの名無しさん
2008/10/31(金) 12:47:52それをいうならシングルトンなんか全部実質グローバル
0910デフォルトの名無しさん
2008/10/31(金) 12:48:23シングルトンだね。
Settings がクラス名
Default がファクトリー
Setting1 がSettingsのプロパティ
0911デフォルトの名無しさん
2008/10/31(金) 12:55:20たいがいシングルトンは本来の目的とは違ってグローバル変数として使われるけど
0912デフォルトの名無しさん
2008/10/31(金) 12:56:510913デフォルトの名無しさん
2008/10/31(金) 13:03:59error CS0234: 型、または名前空間名 'Generic'
は、クラスまたは名前空間 'System.Collections'
に存在しません。アセンブリ参照があるか確認してください。
とエラーが出てしまうんですが、何が原因なのでしょうか?
(Genericを利用しないコードは、問題なくコンパイルできます)
パスを通すために、sdkbars.batを実行してから再起動もしたんですが、何も変わりません。
0914913
2008/10/31(金) 13:05:150915デフォルトの名無しさん
2008/10/31(金) 13:06:12ジェネリックが使えるのはVS2005以降だけどそれはわかってるよね?
0916デフォルトの名無しさん
2008/10/31(金) 13:11:57相談室スレに書こうと思ってたんですが、質問OKなら安心しました
誤爆とはいえ向こうにも書き込んでしまい、マルチのような状態になってしまって申し訳ない
言われてみれば、バージョンが古いのかも知れません。調べてみます。
0917デフォルトの名無しさん
2008/10/31(金) 16:12:22確かに、バージョンを3.5にしたら解決しました。ありがとうございました。
0918デフォルトの名無しさん
2008/10/31(金) 18:14:37サンクス。できたよん。
0919デフォルトの名無しさん
2008/10/31(金) 19:57:15こんな感じのアプリケーションよくありますよね
それなのにApplicationにProductNameWithSeparatorが無いのはおかしいですよね
これがあれば前述の式は次のような式に様変わりします
Form1.Text = contentsTitle + Application.ProductNameWithSeparator;
まさにこれが必然であるべきと言わざるを得ない国際標準規格に相応しい式が今ここに出来ています
しかしながら誠に遺憾ではありますが、実はあなたがこの素晴らしい式を使うことは出来ないのです
0920デフォルトの名無しさん
2008/10/31(金) 20:03:53よくわからんけど、何か気の利いた面白いこと言ってるつもりだったりするのひょっとして
0921デフォルトの名無しさん
2008/10/31(金) 21:02:01コード例マダー?
0922デフォルトの名無しさん
2008/10/31(金) 21:13:56ふらっとスレなんだからもう許してやれよw
あんたも粘着質だな。
ちなみにVBなら適当なインターフェイスを被せれば普通にできるな。
0923デフォルトの名無しさん
2008/10/31(金) 21:31:19○許してくれよ
0924デフォルトの名無しさん
2008/10/31(金) 21:44:130925デフォルトの名無しさん
2008/10/31(金) 22:03:510926デフォルトの名無しさん
2008/10/31(金) 22:16:570927デフォルトの名無しさん
2008/10/31(金) 22:20:22SDK使ってるの?
VC#2008Express使おうよ
0928デフォルトの名無しさん
2008/10/31(金) 22:30:59> VC#2008Express使おうよ
無料版はいろいろ制限がきつくてね(´・ω・`)
0929デフォルトの名無しさん
2008/10/31(金) 22:33:39あたりまえだけどSDKでできることは全部できる
0930デフォルトの名無しさん
2008/10/31(金) 22:35:000931デフォルトの名無しさん
2008/10/31(金) 22:36:090932デフォルトの名無しさん
2008/10/31(金) 22:37:463.5は日本語化されたの?
0933デフォルトの名無しさん
2008/10/31(金) 23:46:320934デフォルトの名無しさん
2008/11/01(土) 00:11:31デザイナ使わずにSDKと同じようにコードから使うこともできるだろ
0935デフォルトの名無しさん
2008/11/01(土) 03:20:170936デフォルトの名無しさん
2008/11/01(土) 03:30:490937デフォルトの名無しさん
2008/11/01(土) 09:09:52コントロールがイベントハンドラを呼び出す場合とか?
実装がどうなってるか知らんけど。
0938デフォルトの名無しさん
2008/11/01(土) 11:50:04デリゲートはオブジェクト参照+関数ポインタ
インスタンス化するときには対象のメソッドへのアクセス権が必要だからカプセル化は保たれる
0939デフォルトの名無しさん
2008/11/01(土) 13:31:47クラスfooのメンバに
クラスhogeのインスタンスへのポインタを
持たせる、ってことはC#でできるんでしょうか?
どうやって書いたらいいか教えてください。
0940デフォルトの名無しさん
2008/11/01(土) 13:33:25クラスは参照型だからこれでおk
0941デフォルトの名無しさん
2008/11/01(土) 14:26:20やりたいことは、
using DWORD=System.UInt32
と同様。
これだと、全ソースファイルに書かなきゃならなくて。
0942デフォルトの名無しさん
2008/11/01(土) 14:29:240943デフォルトの名無しさん
2008/11/01(土) 15:17:19メインプログラムのnamespaceと同じ名前にしてる?
それとも今後他のプログラムでそのクラスを使用する際の汎用性を考えて
独立したnamespeceを付与して、メインプログラムの中で using 〜 を記述するか、
そのクラスを呼び出す際にnamespeceまで含めたフルパスで呼び出すようにしてる?
0944デフォルトの名無しさん
2008/11/01(土) 15:19:42何が言いたいのかよく読み取れないが、
恐らく単に君が名前空間の意義がわかってないだけなんじゃないのか?
0945デフォルトの名無しさん
2008/11/01(土) 15:27:360946デフォルトの名無しさん
2008/11/01(土) 15:31:18使い回すならクラスライブラリにするし
0947943
2008/11/01(土) 16:00:38するとそのクラスを他のプロジェクトで使用する際は先頭のnamespaceのところを
そのプロジェクト共通のnamespaceに書き換えてから使えってことね?
0948デフォルトの名無しさん
2008/11/01(土) 16:12:53だから名前空間の目的を理解してさえいれば、ネーミングや階層構造で迷うことはあっても
方針で迷うなんてありえないと思うんだが。。
なんで一番肝心なこと(名前空間の目的って何?)の理解を後回しにして
意味のない質問をするんだろう。
0949デフォルトの名無しさん
2008/11/01(土) 16:25:46どうせその時点から別物なんだから名前空間なんてどうでもいいと思うんだよね
むしろそれぞれ変えた方が、あとでややこしくならないかも
0950949
2008/11/01(土) 16:38:25別のプロジェクトにクラスAのソースファイルをコピーすると、二つの別のバージョンのAができることになる
2つはそれぞれ個別に編集される可能性がある別物なんだから、完全に同じ名前を持つのは不適切じゃないか?
同じソースファイルを二つのプロジェクトで共有するのなら話は別だけどお勧めはしない
0951デフォルトの名無しさん
2008/11/01(土) 16:53:49データを読み込んだらメモリ空間から消すにはどうしたらいいの?
0952951
2008/11/01(土) 16:57:080953デフォルトの名無しさん
2008/11/01(土) 20:27:33エラー CS1503: 引数 '3': 'System.Collections.Generic.List<System.Collections.Generic.List<int>>' から 'System.Collections.Generic.IList<System.Collections.Generic.IList<int>>' に変換できません。
というエラーが出ますが、どうしてでしょうか?
一つ目の引数にはエラーが出ません。
public class neko
{
IList<int> ageValue;
IList<IList<int>> sageValue;
public neko(IList<int> age, IList<IList<int> sage)
{
ageValue = age;
sageValue= sage;
}
}
public class inu
{
neko process()
{
List<int> ageTmp = new List<int>();
List<List<int>> sageTmp = new List<List<int>>();
〜略
return new neko(ageTmp, sageTmp); ←ここでエラー
}
}
0954デフォルトの名無しさん
2008/11/01(土) 20:34:52sageTmpの型をList<List<int>>ではなくList<IList<int>>にすればいい
C#4.0ではIEnumerable<List<int>>がIEnumerable<IList<int>>として扱えたりするらしいけど
その例ではC#4.0になってもたぶん無理
0955953
2008/11/01(土) 21:15:00ありがとうございました。教えていただいたとおりにしたらコンパイルは通りました。
ただどうしてなのか理由がわからないので>>1に従い勇気を持って再度質問します。
・どうしてList<IList<int>>にするとコンパイルを通るのか?できるだけ噛み砕いて教えてほしいです。
・IListとListの違いはなにか?
>>953はとあるサンプルコードを引用したものですが、どうしてnekoのメンバをIListでもっているのか?
Listではダメなのか?
そもそもIListはインターフェースではないのか?(インターフェースのクラスに値を保存できるのか?)
以上、よろしくお願いします。
0956デフォルトの名無しさん
2008/11/01(土) 21:30:20だからList<List<T>>が継承しているのはIList<List<T>>で、IList<List<T>>型として扱える。
C#ではジェネリックの型パラメータ(<>内に指定するやつ)が異なるとそれぞれ別の型とみなされる。
そのため、IList<List<T>>とIList<IList<T>>は別の型だから互換性がない。
IList<T>で持ってるとList<T>だけじゃなくてIList<T>を実装してる型のオブジェクトならなんでも
持てる(Tの配列とか)
0957デフォルトの名無しさん
2008/11/01(土) 21:35:46それは広辞苑にチョベリグという語句が列記されてしまうのと同じことのように思える
それは世間ではチョベリバな出来事では無いだろうか
0958デフォルトの名無しさん
2008/11/01(土) 21:49:41超わかった!
ような気がする!
ありがとうございました。
0959デフォルトの名無しさん
2008/11/01(土) 22:15:27配列みたいに共変性がないという理解でいいのかな
0960デフォルトの名無しさん
2008/11/01(土) 22:34:59C#4.0では制限付きで共変性と反変性が導入されるらしい
0961デフォルトの名無しさん
2008/11/02(日) 00:04:22まだそんな細かいところで改良が続くんだ。
しかし勉強嫌いな俺にはちょっとありがた迷惑気味だなw
2.0の機能だってまだ完全に使いこなせるわけじゃにのに。。
0962デフォルトの名無しさん
2008/11/02(日) 00:32:00将来的にはメタプログラミングを視野に入れてるとかw
0963デフォルトの名無しさん
2008/11/02(日) 03:16:37>バージョン番号が新しい .NET Framework のバージョンでコンパイルされたアセンブリを、
>ランタイムが読み込まないようになりました。
>これに該当するのは、バージョン番号のメジャー部分とマイナー部分を組み合わせた番号です。
これは2.0だけで正常に動作するプログラムを3.5でコンパイルすると
必要のないランタイムまで呼び出されてパフォーマンスの低下に繋がるということですか?
0964デフォルトの名無しさん
2008/11/02(日) 03:25:481.1しかインストールされていない環境で2.0のアセンブリを実行すると、
そのまま実行されて転ける。
2.0までしかインストールされていない環境で3.5のアセンブリを実行すると
警告を出して終了する。
ランタイムよりも新しいバージョンで作られたアセンブリは、たとえマイナー
バージョンの差異であっても実行されない。
ってことじゃないの?
0965デフォルトの名無しさん
2008/11/02(日) 04:29:25その上にモノがあるかないかの違いだけで
0966デフォルトの名無しさん
2008/11/02(日) 05:34:14「ランタイムのバージョン」に読み替える必要がある。
.NET3.5のランタイム(CLR)は.NET2.0の2.0.50727と同じもの。
.NET3.5のC#3.0でコンパイルしても追加されたアセンブリを参照していない限り.NET2.0の環境で動く。
0967デフォルトの名無しさん
2008/11/02(日) 06:21:500968デフォルトの名無しさん
2008/11/02(日) 09:29:11Program.csにあるな
> 型 : System.Boolean
> 新しいコントロールに適用する既定値。
> true の場合、UseCompatibleTextRendering をサポートする新しいコントロールは、テキスト表示用の GDI を使用し、
> false の場合は、GDI+ を使用します。
初めからApplication.SetCompatibleTextRenderingDefault(false);と書いてあったからGDI+を使ってるんだな
名前的にもGDI+はGDIより良さそうだし親切だな
> 解説
> 特定の Windows フォーム コントロールでは、GDI グラフィックス ライブラリまたはより新しい GDI+ ライブラリのいずれを使用してもテキストを描画できます。
> このように変更されたのは、GDI+ にパフォーマンスとローカライズに関する問題があるからです。
> 既定では、UseCompatibleTextRendering プロパティをサポートする既存のコントロールは、下位互換性を確保するために true に設定されますが、
> Windows フォーム 2.0 以降に含まれるすべてのコントロールでは、このプロパティは一様に false に設定されます。
> 新しいコントロールの既定のテキスト描画方法を切り替える場合は、SetCompatibleTextRenderingDefault を使用します。
/ ̄ ̄ ̄\
/ ─ ─ \
/ <○> <○> \.
| (__人__) |
\ ` ⌒´ /
/ \
0969デフォルトの名無しさん
2008/11/02(日) 11:27:470970デフォルトの名無しさん
2008/11/02(日) 12:11:39どなたか教えて下さい。
0971デフォルトの名無しさん
2008/11/02(日) 21:56:03GDI+は常にソフトウェア処理。
一方のGDIは、Vista DWM環境以前なら一部ハードウェアアクセラレーションがある。
0972デフォルトの名無しさん
2008/11/03(月) 00:45:16この通りにインストールして、環境変数もいじったんですが
「'csc'は、内部コマンドまたは外部コマ……認識されていません。」
と表示されます。
どなたか解決法をお教えてください。
0973デフォルトの名無しさん
2008/11/03(月) 00:48:310974デフォルトの名無しさん
2008/11/03(月) 00:49:490975デフォルトの名無しさん
2008/11/03(月) 00:50:35これを追加したんですが、何かまずかったでしょうか。
0976デフォルトの名無しさん
2008/11/03(月) 00:53:38ドキッとしましたが、違いました。ちゃんとOK押しました。
0977デフォルトの名無しさん
2008/11/03(月) 00:58:27うちのはこうだな
0978デフォルトの名無しさん
2008/11/03(月) 00:59:500979デフォルトの名無しさん
2008/11/03(月) 01:02:54vが抜けてるね
0980デフォルトの名無しさん
2008/11/03(月) 01:03:03解決しました。ありがとうございました。
原因はコンソールの開きなおしてなかったからですorz
0981デフォルトの名無しさん
2008/11/03(月) 01:07:33大正解だったな
0982デフォルトの名無しさん
2008/11/03(月) 01:30:200983デフォルトの名無しさん
2008/11/03(月) 02:21:20空行を条件として書く場合、
if (Regex.Match(line,"^$").Success)
if(line.Contains("^$"))
if(line.Contains(""))
とかを試したのですが、うまくいきません。
空行ってどう書けばいいですか?
あと、空行以降の行をまとめてひとつのstringにしたいのですが、
if(空行があったら) {
wordFlag = true;
string lines = (String.Concat(lines));
lineNumber++;
}
でできますか?
0984デフォルトの名無しさん
2008/11/03(月) 02:28:36ぶっちゃけ俺は.NET2005からプログラムの勉強は一切しなくなったよ。
ぶっちゃけプログラム言語の機能が強化されたとしても実行スピードにそれ程大差が
あるとは思えない。
なのに言語が4.0とかに進化したからといってその辺を勉強する意味ってあるのかな?
0985デフォルトの名無しさん
2008/11/03(月) 02:31:240986デフォルトの名無しさん
2008/11/03(月) 02:41:34lineがstring型なら
if ( line == String.Empty ) { }
0987デフォルトの名無しさん
2008/11/03(月) 02:43:300988デフォルトの名無しさん
2008/11/03(月) 02:53:240989デフォルトの名無しさん
2008/11/03(月) 02:56:470990デフォルトの名無しさん
2008/11/03(月) 02:59:59http://pc11.2ch.net/test/read.cgi/tech/1225648701/
0991デフォルトの名無しさん
2008/11/03(月) 03:02:490992デフォルトの名無しさん
2008/11/03(月) 03:25:020993デフォルトの名無しさん
2008/11/03(月) 03:27:220994デフォルトの名無しさん
2008/11/03(月) 03:32:18分ける必要なんてありゃしない
0995デフォルトの名無しさん
2008/11/03(月) 06:39:02どちらもスレの消費は速いからこのままでいいと思う。
どこかで議論してそういう方向なのかと思ったら、毎回次スレが立つとごねる奴が出没してるだけだな。
0996デフォルトの名無しさん
2008/11/03(月) 06:53:17中身が一緒のものを分ける必要性が無い
消費が速いとか関係無いし
0997デフォルトの名無しさん
2008/11/03(月) 06:54:420998デフォルトの名無しさん
2008/11/03(月) 07:01:44いつまで必死こいて初心者スレを保守してんだよ
0999デフォルトの名無しさん
2008/11/03(月) 07:20:12実質的な違いがあると見たほうが適切じゃね
1000デフォルトの名無しさん
2008/11/03(月) 07:21:1910011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。