ふらっとC#,C♯,C#( ..
618:デフォルトの名無しさん
08/01/27 19:34:15
>>614
初期化をatomicにするためじゃないかな。
URLリンク(d.hatena.ne.jp)
URLリンク(community.bartdesmet.net)
619:デフォルトの名無しさん
08/01/27 19:45:36
atomicってなにwww
下の方読んで何となくわかったけど。
620:デフォルトの名無しさん
08/01/27 20:37:41
同期のためか。
もう>>608みたいな書き方するときはパフォーマンスなんて気にするな、
ってことかな。
621:デフォルトの名無しさん
08/01/27 21:05:59
>>617
うまく計算してWPFの3D機能でやるとか
ピクセルロックして頑張るとか
622:デフォルトの名無しさん
08/01/27 22:46:20
初歩の初歩だとは思うのですが
ラベルやテキストボックスの文字列をセンターでそろえるというのはどうすればいいのでしょうか?
ググってもなにやらコードを書く必要があるような記述ばかりなんですが、プログラムから制御を
行わないとできないのでしょうか?
623:デフォルトの名無しさん
08/01/27 22:53:38
VS使えばいいと思うよ
624:デフォルトの名無しさん
08/01/28 01:41:41
へたな本読みながら一つずつ機能を知っていくより
Visual C# Express Editionと、それと一緒に入ってくるMSDNドキュメント
見ながら遊んでる方がずっとコントロール廻りは理解できるよ
625:デフォルトの名無しさん
08/01/28 01:49:40
VS6.0からVS2008に移った俺はMSDNの進化に感動した
626:デフォルトの名無しさん
08/01/28 02:20:44
>>622
フォームデザイナ上で、
複数コントロールを選択した状態で
ツールバー>書式>整列
最初に選択したコントロールを基準に整列してくれる。
627:デフォルトの名無しさん
08/01/28 17:57:40
2001のMSDNはウンコだったが2005あたりからようやくマシになった
628:デフォルトの名無しさん
08/01/28 23:06:23
>>627
通信回線が発達してオンラインがまともに使えるようになってから
かなり使えるようになったと感じる
629:デフォルトの名無しさん
08/01/28 23:16:14
いやローカルにインストールするライブラリのこと>>625は言ってるんだと思いますが。。
630:デフォルトの名無しさん
08/01/28 23:19:36
オンラインなんてレスポンスが悪すぎて使ってられない
631:デフォルトの名無しさん
08/01/28 23:52:21
おまけにブックマークしといても数ヶ月でリンク切れになるしねw
632:デフォルトの名無しさん
08/01/29 01:17:42
MSは何故C#の匿名メソッドをレキシカルクロージャーにしなかったの?
理由分かる人いたら教えて。
633:デフォルトの名無しさん
08/01/29 06:54:59
プログラマが選択できるようにしてあるし
634:デフォルトの名無しさん
08/01/29 09:54:01
VC#であるプログラムを作っていて、アイコンを埋め込みたいと思いました。
そこから少し話は反れて飛びます
ソリューショネクスプローラのResources以下にicoファイルを入れ
Form.Icon = ((System.Drawing.Icon)(resources.GetObject("アイコンファイル名")));
↑このようにするとアイコンをセット出来るのではという結論に至りました
しかしコンパイルは通るもののデバッグになるとこの記述の部分でエラーが出ます
'System.Resources.MissingManifestResourceException' のハンドルされていない例外が mscorlib.dll で発生しました。
エラーはこの通りです
見たところ、アイコンファイル自体みつけられてないのか・・?と思いましたがアイコンファイル名はいくら確認しても正しいです
何が間違っているのでしょうか?
635:デフォルトの名無しさん
08/01/29 10:12:26
ああ、大間違いだよ
636:デフォルトの名無しさん
08/01/29 15:24:23
違うよー
637:デフォルトの名無しさん
08/01/29 16:12:32
よく覚えてないけどソリューションエクスプローラにぶちこんだら相対指定で使えるだろうに
638:デフォルトの名無しさん
08/01/29 16:38:20
System.Collections.Generic.List#Add が
System.ArgumentOutOfRangeException: 容量が現在のサイズより小さい値です。
なんて投げてくるんですが、これって .NET Framework のバグですか?
639:デフォルトの名無しさん
08/01/29 16:41:24
あーごめん。3秒で疑問が氷解。複数スレッドが一度に Add しようとしてました。すみません。
640:デフォルトの名無しさん
08/01/29 16:49:24
>.NET Framework のバグですか?
これって見る度ネタなのかどうか理解に困る
641:デフォルトの名無しさん
08/01/29 16:56:09
大抵はそれを本気で言ってるし言う奴は低レベルと相場が決まってる
642:デフォルトの名無しさん
08/01/29 17:01:58
いや、今日初めて言ってみて、初めて言う輩の気分がわかったwwww
マルチスレッド関係はやっぱ鬼門だわ……
643:デフォルトの名無しさん
08/01/29 18:19:57
画像処理関連で質問です。
1600*1200のbmp1があり、そのbmpの指定した座標(x,y)を支点として、
300*300のbmp2を重ねたいのですがどのようにすればいいのでしょうか。
Bitmap bmp1 = new Bitmap(filename1);
Bitmap bmp2 = new Bitmap(filename2);
bmp1.Add(x,y,bmp2);
のような感じでできないのでしょうか?
BitmapクラスとImageクラスのメンバをオブジェクトブラウザで眺めてみましたが、
そのようなメソッドを見つけることができませんでした。
GetPixelしてSetPixelするという操作を全量に対して行うしかないですか?
644:デフォルトの名無しさん
08/01/29 18:23:14
>GetPixelしてSetPixelするという操作を全量に対して行うしかないですか?
それでもいいし
bmp1のGraphicsを取得してそれでbmp2をDrawImageしてもいいよ
645:デフォルトの名無しさん
08/01/29 18:48:46
そしてIndexedなBitmapという落ち
646:643
08/01/29 18:56:08
>>644
ありがとうございます。
追記になりますが、その画像をjpegで保存したいと思っています。
描画にGraphicsクラスを使ったことはありますが、描画した画像を保存したことがありません。
DrawImageして出来上がったGraphicsクラスのインスタンスを使って
画像保存をすることはできますか?
647:デフォルトの名無しさん
08/01/29 19:01:30
>>646
Image.Save
648:デフォルトの名無しさん
08/01/29 19:19:09
>>647
は?
649:デフォルトの名無しさん
08/01/29 19:51:18
は?じゃないが
650:デフォルトの名無しさん
08/01/29 19:57:34
>>648
知らないならレスすんな
651:デフォルトの名無しさん
08/01/29 20:20:33
Graphicsクラスのインスタンスでは出来ないが、Graphicsには描画対象となるImageなりなんなりが必ずあるので、そっちの機能で保存すればOK
652:デフォルトの名無しさん
08/01/29 21:41:01
pictureboxより大きい画像を表示したばあい、スクロールバーを自動で表示したいけど無理ですか?
653:デフォルトの名無しさん
08/01/29 21:42:04
Panelに入れればいいだろ
654:デフォルトの名無しさん
08/01/29 22:19:46
kami
655:デフォルトの名無しさん
08/01/30 09:47:31
どーんと行こうや
656:デフォルトの名無しさん
08/01/30 10:13:51
こんにちは
ToolStripMenuItemのAllowDropをtrueにしてもOnDragEnterのイベントがきません
MenuTripだと正常にイベントがきます
何かご存知な方がいましたら
教えて頂けると助かります。
よろしくお願いいたします。
657:デフォルトの名無しさん
08/01/30 13:22:37
自分でイベント追加したら?
658:656
08/01/30 13:52:55
デリケートでイベントを追加しましたが
うまくいきません
開発環境はvs2005、vistaです
659:デフォルトの名無しさん
08/01/30 14:09:18
似たような質問どっかで見たな。ここか前スレだったかなー
660:デフォルトの名無しさん
08/01/30 17:07:19
前スレ945ぐらいかな
661:デフォルトの名無しさん
08/01/30 17:43:09
ユーザーコントロール作ってみた
で、完成度が高くなったので
コントロールライブラリにしようと思ってDLL作ったんだが
このDLLの使い方がわからない漏れはどうしたらいいですか?
662:デフォルトの名無しさん
08/01/30 18:06:19
完成度低いから心配いらないよ
663:デフォルトの名無しさん
08/01/30 18:50:37
我々の社会って連呼かよ
中国って何回言った? 死ねや
664:デフォルトの名無しさん
08/01/30 18:51:01
誤爆スマソ
665:デフォルトの名無しさん
08/01/30 21:00:37
プログラマにもネトウヨ君っているんだね
まあ近頃は一口にプログラっていっても知的水準はいろいろだからなw
666:デフォルトの名無しさん
08/01/30 21:05:35
プログラマ(笑
667:デフォルトの名無しさん
08/01/30 21:10:34
>>665
>>663をネトウヨって言ってる時点でチョンか学生だな
668:デフォルトの名無しさん
08/01/30 21:19:22
うんチョンで学生でいいよ別に。
で「チョン」って何ですか?
ネトウヨ君の仲間うちで通じる「ヲタ用語」みたいなもの?w
669:デフォルトの名無しさん
08/01/30 21:26:07
他所でやれ
670:デフォルトの名無しさん
08/01/30 21:30:06
PGはリベラル派が多いんだろうな。
671:デフォルトの名無しさん
08/01/30 21:39:32
「PG」だと微妙かもなw
672:デフォルトの名無しさん
08/01/30 21:42:32
>>665は例の餃子たべちゃったんだよ。
そっとしといてやろう……( -人-)
673:デフォルトの名無しさん
08/01/30 22:12:15
餃子とか右翼の話は他でやれよ
スレタイ読めないバカども
674:デフォルトの名無しさん
08/01/31 01:36:36
フォームの位置とか状態(最大化、最小化とか)を次回起動時に復元しようと
プロパティのApplicationSettingsからLocation, ClientSize, WindowStateを保存するようにしたんだが
なんか挙動がおかしい。
最大化ボタン押しても最大化しなくて何故か位置が変わったり。
なんでだろう。
675:デフォルトの名無しさん
08/01/31 01:46:31
なんでだろうね。
676:656
08/01/31 02:04:44
前スレ945とは症状が違うようです。
ファイルのドラッグ&ドロップなら私の環境でも問題ありません。
Googleで探してますが、なかなかヒントが見つかりません。
677:デフォルトの名無しさん
08/01/31 08:20:44
TreeViewの中身を保存しようとしています。
TreeView.Nodes[0]をBinaryFormatter.Serializeで保存し、
読み込みはBinaryFormatter.Deserializeした結果をTreeView.Nodes.Addすることで一応実現できました。
ただこの方法だとツリーの展開状態と選択状態が復帰できません。
現時点ではTreeNodeと下のクラスが混在しているのですが、
TreeNode自体ではなく、TreeNodeから派生させたクラスを使うようにして
そのクラスのDeserializeで展開状態とかを一旦内部フィールドに保存して、
TreeViewに追加した後に復帰させるしかないかなと思っているのですが
もっと良い方法があるのでしょうか?
[Serializable]
public class TVKeyword : TreeNode
{
public TVKeyword() : base() {
}
protected TVKeyword(SerializationInfo serializationInfo, StreamingContext context) : base(serializationInfo, context) { }
protected override void Deserialize(SerializationInfo serializationInfo, StreamingContext context) {
base.Deserialize(serializationInfo, context);
Keyword = serializationInfo.GetString("Keyword");
}
protected override void Serialize(SerializationInfo si, StreamingContext context) {
base.Serialize(si, context);
si.AddValue("Keyword", Keyword);
}
public string Keyword { get; set; }
}
678:677
08/01/31 09:06:37
保存されたファイルを眺めていたら、
どうやら展開状態はそもそもシリアライズされていないように見えます。
派生クラスを作ることにしました。失礼しました。
679:643
08/01/31 10:26:47
>>647-651
ここの回答者はOOPというものが全く分かっていないのか?
Graphicsクラスのインスタンスを使わないで、どうやってGraphicsクラスの
インスタンスメソッド(DrawImage)で描画しようとしているオブジェクトを保存するんだ?
>Graphicsクラスのインスタンスでは出来ないが、
>Graphicsには描画対象となるImageなりなんなりが必ずあるので、
>そっちの機能で保存すればOK
実際にコーディングしてみましたか?
どう考えても、Graphicsオブジェクトを作成するときに使っただけのImageオブジェクトが、
インスタンスメソッドであるDrawImageによって変更されているはずがない。
DrawImageの引数にImageオブジェクトが参照渡しで渡されているのならば別だがね。
だからこそ>>643のように質問しているわけなのだが。
てっきりGraphicsオブジェクトがメモリ上に保持しているGDIビットマップオブジェクトのハンドルを
取得して云々とかそういうアドバイスがくると思っていたのに、見当違いな回答しかこない。
挙げ句の果てに>>650のようなアホまで出る始末。分かってないのはどっちだと・・・
680:デフォルトの名無しさん
08/01/31 10:40:53
>>643みたいなアホな質問してる割には偉そうだなw
681:デフォルトの名無しさん
08/01/31 10:47:10
>>680
>>643の質問が低レベルなのは十分承知の上だよ。
でもそれにたいする回答者が見当違いのアホ回答をしてきたからこそ噛みついているわけで。
少なくともあいつらよりは分かっているつもりだが。
もしもGraphicsクラスを使わずに、かつImageオブジェクトで泥臭い全量ループすることなしに、
他のアプローチでもっと簡単に実現できる方法があるのであれば、是非ご教授願いたい。
682:デフォルトの名無しさん
08/01/31 10:55:08
>>679,681
心底意味が分からん。
ベースとなるBmp1から作ったGraphicsを使ってBmp2をDrawImageするだけじゃん。
683:デフォルトの名無しさん
08/01/31 10:57:17
何をぶち切れてるのか知らないけど、下のコードでtest.jpgは黒く塗り潰されたよ。
ImageもGraphicsも触ったのは初めてだけど、MSDNライブラリ見てったらすぐにサンプル見つかったよ。
Graphicsクラスの概要に「イメージ、ビットマップ、アイコン、およびメタファイルの操作」ってリンクがあるから
そこの「方法 : 実行時にビットマップを作成する
Image imageFile = Image.FromFile("sample.jpg");
Graphics newGraphics = Graphics.FromImage(imageFile);
newGraphics.FillRectangle(new SolidBrush(Color.Black), 100, 50, 100, 100);
newGraphics.Dispose();
imageFile.Save("test.jpg");
IDない板だし「は?」とかだけじゃ誰が何を言いたいのかさっぱりわからない。
はたから見てるとどういうやりとりなのか全くわからなかったから、スルーしてたんだよ。
ちゃんと誰で何を言いたいのかわかるようにしてたら、とっくに解決してたと思うけどね。
684:デフォルトの名無しさん
08/01/31 10:57:55
>>681
>>643の質問内容より十分理解できる回答を見当違いといっている時点で、低脳杉。
685:デフォルトの名無しさん
08/01/31 11:00:16
>>679
>>681
>どう考えても、Graphicsオブジェクトを作成するときに使っただけのImageオブジェクトが、
>インスタンスメソッドであるDrawImageによって変更されているはずがない。
何に怒ってるのかわけ分からん。
>>682
>ベースとなるBmp1から作ったGraphicsを使ってBmp2をDrawImageするだけじゃん。
だな。
Bitmap bmp1 = new Bitmap(filename1);
Bitmap bmp2 = new Bitmap(filename2);
using (Graphics g = Graphics.FromImage(bmp1))
{
g.DrawImage(bmp2, x, y);
}
これでbmp1の中身が変更されるはず。
bmp1.Save("check.bmp");
あたりで確認できるかな。
686:デフォルトの名無しさん
08/01/31 11:16:39
まあ今から棒グラフみたいなものを書きたかった、描画知識0の俺には
ちょうどいい話題だったぜ。
687:デフォルトの名無しさん
08/01/31 11:27:55
ごめんなさいはマダー? (・∀・ ) っノシ凵 ⌒☆チンチン
688:デフォルトの名無しさん
08/01/31 11:30:33
質問がネタに見えて仕方が無い。質問主はこれ試してみろ。
>>683>>685Save()メソッドはデフォルト.png保存じゃなかったっけな?
using System.Drawing;
using System.Drawing.Imaging;
class Hoge{
static void Main(){
Image img1 = Image.FromFile("1.jpg");
Image img2 = Image.FromFile("2.jpg");
Graphics g = Graphics.FromImage(img1);
g.DrawImage(img2,100,100,200,200);
img1.Save("hoge.jpg",ImageFormat.Jpeg);
}
}
689:デフォルトの名無しさん
08/01/31 11:49:22
お前らの優しさは南半球まで響き渡るわ。
690:デフォルトの名無しさん
08/01/31 12:22:41
>>681
>Graphicsクラスを使わずに
なんか初め>>643から新しく条件加わってるけど、何でGraphicsクラス使ったらいけないんだ?
Graphicsクラスでやりたいことが楽にできるのに、わざわざ自分で新しく作る必要ないだろ?
691:651
08/01/31 12:24:16
>>643
だからよう、Graphicsクラス自体は描画機能を持っているだけで、描画対象は別に必要なんだよ。
だから、描画対象となるオブジェクトを指定せずにGraphicsクラスのインスタンスを作成出来ないようになってるわけ。
Graphicsクラスのインスタンスメソッドを使用して実際に変更されるのは描画対象オブジェクトのほう。
>>688
指定した拡張子に対応するImageEncoderがあれば、自動的にその形式で保存されるはず。
692:デフォルトの名無しさん
08/01/31 12:32:02
>>679
こっちはコード書いたことあるからわかってんだよ
それで動かないってどんな糞コード書いたんだよ
晒してみろよ
アホすぎて生きてる価値ないんじゃね
693:デフォルトの名無しさん
08/01/31 12:36:48
なるほど、このスレでは横柄な態度で質問したほうが答えが付きやすいってことだな
694:デフォルトの名無しさん
08/01/31 12:38:33
>>681
> もしもGraphicsクラスを使わずに、かつImageオブジェクトで泥臭い全量ループすることなしに、
> 他のアプローチでもっと簡単に実現できる方法があるのであれば、是非ご教授願いたい。
bitmap
695:デフォルトの名無しさん
08/01/31 12:41:13
>>643にたいして>>644で答えが出ているというところが恐ろしい
696:デフォルトの名無しさん
08/01/31 12:42:27
横レスだけど正直>>643の切れ方は意味がわからないな。
いきなり「オブジェクト指向が〜」とかキレてるのよんでリアルでコーヒー吹いちゃったよw
というか、適当にレスを拾い読みした感じでは、>>643はWinの描画の考え方っていうか
デバイスコンテキストって概念を知らないんだと思う。
まあ最近の.NET用の入門書はこのあたり解説してないのが多いと思うから無理もない。
697:デフォルトの名無しさん
08/01/31 12:45:06
たぶんさ、PC-98時代のビットマップスクリーンと同じ発想で
Winのグラフィックも考えてるんだろうね。
だとしたら結構年長のオジサマなんだと思うよw
698:デフォルトの名無しさん
08/01/31 12:47:58
いやこれどうみてもガキだろ
699:デフォルトの名無しさん
08/01/31 12:54:09
>>679の一番痛いところは
> Graphicsクラスのインスタンスを使わないで、どうやってGraphicsクラスの
> インスタンスメソッド(DrawImage)で描画しようとしているオブジェクトを保存するんだ?
ここ
描写しようとしているオブジェクトは Graphicsクラスのインスタンス となんら関係がない
勝手に持ってろって話
700:デフォルトの名無しさん
08/01/31 12:57:59
ここまで能無しだと釣りに思えるんだが・・・
本気でこんな事言う人間が居るのか?
701:643
08/01/31 13:16:43
ごめんなさい
702:デフォルトの名無しさん
08/01/31 14:09:14
それだけ?
703:643
08/01/31 15:53:11
全面的に私が悪かったです。
これまでの暴言を心よりお詫び申し上げます。
何卒お許し下さい。
経緯及び結果を説明します。
>>617=>>643=>>646=>>648です
流れとしては、1600*1200の画像から台形補正をするために、
1600*1ずつ切り取っていって、それを目的の等脚台形にするために横にのばして
貼り付けていくという手法を試みたのです。
画像処理は初めてだったので、>>643の質問をしてみました。
Graphicsクラスを使って実現するためには、Graphicsクラスのメンバ変数にImageオブジェクトが
格納されていなければならないと思いこんでいました。←勘違い
実際は、
Graphics newG= Graphics.FromImage(img);
この引数で渡されたImageオブジェクトをGraphicsオブジェクトがPrivate変数で保持していて、
それに対して処理を行っているということなんですね。
だから引数で渡されたオブジェクトそのものが変更されると。
値型との区別が付いていなかったようです。←低脳
ということで、結果としてはやりたいことができました。
以下にコードを記します。
704:643
08/01/31 15:55:34
using System.Drawing;
using System.Drawing.Imaging;
class Hoge
{
static public void Main()
{
int newX = 3200;
int newY = 3200;
Image bmp = new Bitmap("input.jpg"); //画像読み込み[1600:1200]
Image newbmp = new Bitmap(newX, newY); //編集後イメージ(等脚台形格納用)
Image tmpbmp = new Bitmap(newX, bmp.Height); //編集作業用イメージ(台形格納用)
RectangleF destRect = new RectangleF(0, 0, 0, 1);
RectangleF srcRect = new RectangleF(0, 0, bmp.Width, 1);
Graphics newG = Graphics.FromImage(newbmp);
Graphics tmpG = Graphics.FromImage(bmp);
Point[] pt = new[]
{
new Point(0, 0),
new Point(newX, 0),
new Point((newX + bmp.Width) / 2, newY)
}; //等脚台形変換用平行四辺形の3頂点
//続く
705:643
08/01/31 16:02:49
//続き
int tan = (newX - bmp.Width) / bmp.Height; //台形積分計算用
//台形作成用ループ
for (int i = 0; i <= bmp.Height; i++)
{
srcRect.Y = i;
destRect.Y = i;
destRect.X = newX - i * tan;
//tmpbmpに貼り付けていく
tmpG.DrawImage(bmp, destRect, srcRect, GraphicsUnit.Pixel);
}
//tmpbmpの保存
tmpbmp.Save("tmp.jpg", ImageFormat.Jpeg);
//等脚台形に変換してnewbmpに格納
newG.DrawImage(tmpbmp, pt);
//jpgで保存
newbmp.Save("output.jpg", ImageFormat.Jpeg);
//終了処理
tmpG.Dispose();
newG.Dispose();
newbmp.Dispose();
tmpbmp.Dispose();
}
}
706:643
08/01/31 16:06:46
補足ですが、この台形補正では逆透視変換は実現できませんでした。
こんな単純なアルゴリズムで実現できるはずがないということにもっと早く気づくべきでしたかね。
結局OpenCVの力を借りて実現する方法にしたいと思います。
Cの勉強しなくては・・・
.NET脳の私には頭が痛いです。
707:デフォルトの名無しさん
08/01/31 16:27:03
,.――-、
ヽ / ̄ ̄ ̄`ヽ、 勇者トンファーパーマン惨状
| | (・)。(・)|
| |@_,.--、_,> 俺が着たからにはもう色々と駄目だ
ヽヽ___ノ
/:::::::::::::::::l /77
/::::::::::i:i:::::::i,../ / |
l:::/::::::::i:i:::、:::/ / |
l;;ノ:::::::::::::::l l;.,.,.! |
/::::::::::::::::l/ / 冂
/:::::::;へ:::::::l~ |ヌ|
/:::::/´ ヽ:::l .|ヌ|
.〔:::::l l:::l 凵
ヽ;;;> \;;>
いろいろつっこみたいけど、とりあえず
URLリンク(www.google.co.jp)
708:デフォルトの名無しさん
08/01/31 16:47:03
本当に初心者な質問で恐縮なのですが……
Windowsアプリ(VC#2005)で、XMLとCSVから読み込んだデータをDataGridViewに表示させようとしています。
そのときのバインド方法なのですが、下記の2パターンの差がわかりません。
BindingSourceのデータソースとして(DataTableではなく)DataViewを使用するメリットって何かありますか?
DataTable→DataView→BindingSource→DataGridView
DataTable→BindingSource→DataGridView
709:デフォルトの名無しさん
08/01/31 17:06:44
DataTable.DefaultView以外のDataViewを使える
710:デフォルトの名無しさん
08/01/31 18:04:08
C#でスタック関係の直接操作ってできますか?
711:デフォルトの名無しさん
08/01/31 18:05:41
なんでスタックなんか弄りたいんだ?
712:デフォルトの名無しさん
08/01/31 18:17:07
関数のカリー化を実装したいとか
713:デフォルトの名無しさん
08/01/31 18:17:58
それならdelegateでいいだろ
714:710
08/01/31 18:22:59
うまく説明できないのでまとめると
ウィルスチェックってどうなってるんだろう?
→全ファイル走査するにはどんなやり方がスマートなんだろう
→再帰処理を使って全部辿るのがベターらしい
→なんだか重くなる
(ここら辺から迷走気味)
→コールスタックとかを知る
→すたっくおーばーふろー・・?
(本格的に迷走)
→スタックを直接操作できればどうにかなるんじゃね?
こんな感じです
質問をするにもどう質問すればいいかわからず>>710のような具合で質問しました
715:デフォルトの名無しさん
08/01/31 18:29:04
再帰処理をほぐす、すなわち、
再帰処理で、保存・復帰してる情報(今探索してるフォルダの情報)を、
インスタンス変数にリストか何かで保持するようにして、そのリストで、
保存したり取り出したりして、本体はループになるように書き直す、
というのがだいたい定番。
ファイルシステムの場合、親フォルダを ".." で探せることを利用すれば、
そういう面倒なことをしなくてもうまくいくかもしれない。
716:デフォルトの名無しさん
08/01/31 18:30:34
吹いたw
とりあえず重くなる原因を確認したほうが良いよ
717:デフォルトの名無しさん
08/01/31 18:30:59
再帰関数でローカルな変数が多すぎなら、
関数を何とかする手もある。
718:デフォルトの名無しさん
08/01/31 18:31:54
そもそも再帰の脱出条件ミスってて、無限に掘ってるかもしれんなw
719:デフォルトの名無しさん
08/01/31 18:35:02
>>715
つまり再帰処理を行う回数を最初に逆算しておくってこと、かな
ディレクトリの階層数があって更に木構造のように枝分かれしていくのを考えると
すごく大変そうですがちょっと調べつつがんばってみます・・・
>>716-718
しっかり終了はするんですが、時間が経つとだんだんと重たくなってきます
CPU使用率の方が、他アプリケーションをがんがん使うと結構きつくなったりするようです
720:デフォルトの名無しさん
08/01/31 18:36:50
お前のパソコンはウィルス検索中に他アプリケーションがんがん使ったら重たくならないか・・?
うちのノートン先生は重たくなる
721:デフォルトの名無しさん
08/01/31 18:39:22
>>719
> つまり再帰処理を行う回数を最初に逆算しておくってこと、かな
「配列」じゃなくて「リスト」って書いた意味を汲んでくれないかな...
722:デフォルトの名無しさん
08/01/31 18:42:53
>>709
なるほど! ありがとうございました。
723:デフォルトの名無しさん
08/01/31 18:44:13
・探索中にサブディレクトリを見つけたら、現在の状態をスタックに積み上げて、
サブディレクトリの探索を開始する。
・現在のディレクトリの探索が終了したら、スタックから状態をとってきて、
そのディレクトリの探索を再開する。
・スタックが空になったら終了。
何も難しいことはない。
724:デフォルトの名無しさん
08/01/31 18:48:28
再帰をループにするときはスタックに変数を入れるんじゃなかったっけ。
725:デフォルトの名無しさん
08/01/31 18:49:05
Directory.GetFiles(@"c:\", "*.*", SearchOption.AllDirectories);
とかじゃだめなのか?
726:デフォルトの名無しさん
08/01/31 18:49:13
あ、かぶった。
727:デフォルトの名無しさん
08/01/31 18:50:23
>>725
あんまり変なことを教えるなよ…
728:デフォルトの名無しさん
08/01/31 18:54:15
>>725
それだとXP以降のOSではシステムフォルダを検索しようとして権限がないので例外が発生する。
また拡張子のないファイルが取得出来ない。
729:デフォルトの名無しさん
08/01/31 18:57:45
コールスタックの知識自体に間違いがあると問題なのですが、
再帰呼び出しをするからスタックが溜まっていってしまうのであって
ループで何度も何度も呼び出す分には問題ないのでしょうか?
>>721
すみません調べてみます
>>723
やってることは同じなのは感覚として掴めました
しかし全然想像つかないです、じっくり考えてみます
>>725
調べていてDirectoryInfoとかそういうのは見つけました
.GetFiles()とかは使っていましたが引数渡すのは試してないです
ちょっとやりたいことがやられちゃう感じなので今回はパスでお願いします
730:デフォルトの名無しさん
08/01/31 19:02:47
関数を呼び出すたびに、その時点の実行状態がコールスタックに積み上げられる。
しかし、コールスタックは小さいから、すぐに溢れる。
だから、再帰呼び出しをループに展開する。
そのときには、もとと同じようにスタックを使って実装すると楽。
731:デフォルトの名無しさん
08/01/31 19:12:04
コールスタックについて学ぶのは良いことだけどさ、
たかがコールスタックが増えたごときで動作は遅くならん。
ましてやディレクトリの深さが 1000 や 2000 も無いかぎり溢れるなんて。
732:デフォルトの名無しさん
08/01/31 19:13:27
どうでもいいかもしれないけどファイル階層列挙場合はQueueの方が好きかなあ
並び的に
733:デフォルトの名無しさん
08/01/31 19:49:26
>>730
つまり関数の中で関数が呼ばれてその中で更に・・・みたいのだとあふれちゃうんですよね
スタックはC++でクラスを勉強する時にそういう構造を作ってみた記憶があるので
やってみようと思います
>>731
ですよね・・ちょっと1から作り直してみます
ありがとうございました、助かりました
734:デフォルトの名無しさん
08/01/31 19:56:24
それにしても良い子であった
スタックの実装にArrayListを使ってくれればいいけど
735:デフォルトの名無しさん
08/01/31 20:06:27
>>734
なんで”Array”Listなん?
736:デフォルトの名無しさん
08/01/31 20:16:56
Stack<T>でおk
737:デフォルトの名無しさん
08/01/31 20:39:51
.NETってどうしてもっさりなん?
738:デフォルトの名無しさん
08/01/31 20:59:41
メモリ大量に積んだvista使ってから言え!
ってゲイツが言ってた
739:デフォルトの名無しさん
08/01/31 21:02:21
32bitCPUだといまのメモリで限界だろ(2GB)
740:デフォルトの名無しさん
08/01/31 21:04:38
つーか、スタックぐらい自分で作ればよくね?
741:デフォルトの名無しさん
08/01/31 21:46:08
Expression Treeって面白いな
時々話題になるT Multiply<T>(T left, T right)みたいなのも簡単に作れる
742:デフォルトの名無しさん
08/01/31 21:57:21
Mapが見当たらないので作ってしまったが,拡張性高いのはいいなC#
static class Extension {
public delegate Y MapFuncor<X, Y>(X item);
public static IEnumerable<TDst> Map<TSource, TDst>(this IEnumerable<TSource> source, MapFuncor<TSource, TDst> functor) {
foreach (TSource s in source) {
yield return functor(s);
}
}
}
743:デフォルトの名無しさん
08/01/31 22:00:26
Enumerable.Selectでいいだろ
744:デフォルトの名無しさん
08/01/31 22:37:36
>>743いまわかた^p^
745:デフォルトの名無しさん
08/01/31 23:29:50
.netもっさりとか言ってるやつはどんなボロいPC使ってるん?
746:デフォルトの名無しさん
08/01/31 23:33:35
.netもっさりって気分は分からんでもない。
結局は結構windowsのAPI使用することが多いし。
何のための.netなんか分からんときがある。
747:デフォルトの名無しさん
08/01/31 23:36:31
それでも楽じゃん。
748:デフォルトの名無しさん
08/01/31 23:42:18
>>745
Athlon64 3500+ですがもっさりです
749:デフォルトの名無しさん
08/01/31 23:46:47
それじゃあたりまえ。
750:デフォルトの名無しさん
08/01/31 23:58:33
どれ位のCPU使うともっさりしなくなりますか?
751:デフォルトの名無しさん
08/02/01 00:04:34
>>750
ヅアルコア
752:デフォルトの名無しさん
08/02/01 00:06:00
>>748
日ごろのメンテナンス次第でいくらでも遅くできるよ
753:デフォルトの名無しさん
08/02/01 00:13:31
Pen4とかでも、チューニング次第じゃそこそこ動くんじゃね?
754:デフォルトの名無しさん
08/02/01 00:24:18
今Core2Duoを買う金がないのでAthlon64 X2にでもしてみます。
あの重い2005が軽くなるなら。
755:デフォルトの名無しさん
08/02/01 00:26:14
メモリ搭載量の方が重要
756:デフォルトの名無しさん
08/02/01 00:30:04
今AMDは駄目だろ。
757:デフォルトの名無しさん
08/02/01 00:30:50
メモリ3G詰め込めばOK
758:デフォルトの名無しさん
08/02/01 00:31:20
2G積んでます。
それと2度目以降の起動はキャッシュが効いて速いです。
よく見ると2005自体にNTFS圧縮が掛けてあるみたいです。
759:デフォルトの名無しさん
08/02/01 00:32:42
>>754
OS入れなおしだよ
760:デフォルトの名無しさん
08/02/01 00:32:50
常駐プロセスいくつあるよ?
761:デフォルトの名無しさん
08/02/01 00:33:28
>>756
安いのならコストパフォーマンス高いんじゃね?
15k以下のラインで
762:デフォルトの名無しさん
08/02/01 00:35:52
>>759
それやっても大して変化なかったです。
>>760
42個です。極力いらないものは切っています。
763:デフォルトの名無しさん
08/02/01 00:36:36
NTFS 圧縮のせいじゃね?
764:デフォルトの名無しさん
08/02/01 00:36:49
4万だせばX2 4000+でGeForce6150のケース付きが変えます。
メモリは別ですが今は5000円あればお釣りが来ますので。
765:デフォルトの名無しさん
08/02/01 00:37:53
>>763
わかりました。やはりNTFS圧縮のせいでもっさりなのかもしれません。
WordやExcelにもNTFS圧縮掛けていますがもっさりしませんけど。
あとC++Builder2007にも圧縮掛けてありますがもっさりしません。
766:デフォルトの名無しさん
08/02/01 00:38:19
中間ファイルに圧縮かかってたらもっさりしそう
767:デフォルトの名無しさん
08/02/01 00:38:44
CPU : pentium4 3ghz
mem : 256*2
これでも十分。
768:デフォルトの名無しさん
08/02/01 00:39:52
>>764
4万出してそれはないわ。
769:デフォルトの名無しさん
08/02/01 00:40:09
>>767
えー
やっぱりNTFS圧縮のせいっぽいですね。
他に原因が思いつかない。
770:デフォルトの名無しさん
08/02/01 00:40:15
おまえらPC自作板かよ
771:デフォルトの名無しさん
08/02/01 00:41:44
今思い出しましたが2003の時はNTFS圧縮を掛けてなかったのでか
もっさりしてませんでした。
さっそく圧縮を解除してみます。これでだめなら本格的にPCの交換を
考えます。
772:デフォルトの名無しさん
08/02/01 00:42:56
俺NTFS圧縮掛けてない
ちなみにCドライブは80GB
773:デフォルトの名無しさん
08/02/01 00:51:56
>>762
常駐多すぎ
ノートンいれて起動時に30切るくらい、スタンドアロンで20弱くらいで
774:デフォルトの名無しさん
08/02/01 00:54:39
>>773
30個?どうやったらそんなに少なくなるんだろう。
WinampエージェントとかDaemon Toolsとか切るしかないか。
775:デフォルトの名無しさん
08/02/01 00:55:32
俺今3GBだけど起動直後で60個くらいあるわ・・・
しばらく前までは1GBで常駐プロセスとか気にしてたんだが・・・
776:デフォルトの名無しさん
08/02/01 00:56:42
60は多すぎ。
777:デフォルトの名無しさん
08/02/01 00:58:40
ちなみに仮想メモリは切ってある
778:デフォルトの名無しさん
08/02/01 00:59:39
変態的にカスタマイズし過ぎかと
779:デフォルトの名無しさん
08/02/01 00:59:55
>>774
デーモンとかwinampは関係ないだろ・・・切れよ・・・
780:デフォルトの名無しさん
08/02/01 01:01:19
>>779
切りますか・・・・
781:デフォルトの名無しさん
08/02/01 01:02:33
msconfigして、スタートアップとサービスから
マイクロソフトとセキュリティ関係のやつ全部とめて
デーモンバスターいれて、不要なwindowsプロセスとめるといいよ
782:デフォルトの名無しさん
08/02/01 01:03:08
それくらいはやってるが
783:デフォルトの名無しさん
08/02/01 01:03:48
ituneHelperとかなめてるよな。
784:デフォルトの名無しさん
08/02/01 01:04:24
QuickTimeのおそろしさは異常
785:デフォルトの名無しさん
08/02/01 01:05:14
まったくだw
786:デフォルトの名無しさん
08/02/01 01:06:03
それ考えるとAcronis True ImageとDiskeeper2007入れてるのが
痛いかもなあ。
Acronis True Imageは定期的にバックアップ取るので仕方ないとして
Diskeeperはバックグラウンドでデフラグするので止めた方がいいのかも。
でも何かやってる間はデフラグ止めてくれるんだけど。
787:デフォルトの名無しさん
08/02/01 01:06:46
>>784
QUick Time Alternative入れてます。
788:デフォルトの名無しさん
08/02/01 01:08:34
>>787
賢いな
789:デフォルトの名無しさん
08/02/01 01:14:54
なんか話がスレとかなり違ってきている。
790:デフォルトの名無しさん
08/02/01 01:15:14
コーデックそのものがffdshowしか入れてないので・・・・って
だいぶスレチになってきました。
791:デフォルトの名無しさん
08/02/01 01:15:36
こういう話なら敷居が低くなるから盛り上がる
792:デフォルトの名無しさん
08/02/01 01:35:50
うんこな話題にハエがよって来てるだけだろ
793:デフォルトの名無しさん
08/02/01 02:05:46
そのうんこをためらいなく踏み潰す >>792。かっこいー!
794:デフォルトの名無しさん
08/02/01 03:01:02
開発環境は「できるだけ」素のOSっぽくしときたいよな
795:デフォルトの名無しさん
08/02/01 03:07:05
まっさらなHDDにOSだけ入れればいいんじゃね?
796:デフォルトの名無しさん
08/02/01 03:10:54
でもそれだと不便だよ
最低限便利なファイラとか解凍ソフトが欲しい
797:デフォルトの名無しさん
08/02/01 03:12:28
おまえら学生とかアマグラマ?
798:デフォルトの名無しさん
08/02/01 03:59:14
cvsサーバーが必要だよな
799:デフォルトの名無しさん
08/02/01 04:47:17
>>798
どこの古代人だw
800:デフォルトの名無しさん
08/02/01 04:55:18
Windows専用ソフトならWin標準GUI使って欲しい
正直.NET快適、Javaは起動以外快適、動作はもっさり
.NETがもっさりするPC使ってみてえ
Win98時代のが残ってるけどそっちはHDD小さすぎてなんもできないしな
801:デフォルトの名無しさん
08/02/01 05:10:56
日本語でおk
802:デフォルトの名無しさん
08/02/01 05:28:12
常駐起動時50くらいだしStylerとか入れてるがすいすい起動する
ブートファイルデフラグを何回かやっていくと起動が目に見えて早くなることがあるから
ブートファイルデフラグ→再起動繰り返しでちょくちょく様子みてる
803:デフォルトの名無しさん
08/02/01 11:10:58
.NET2.0のMDIアプリで親フォームと子フォームの両方にToolStripPanelを付けたのですが、
なぜか、この親子間でToolStripPanelのドッキングツールバーが移動できていまうのですが、
両者のツールバーは全く意味が違うツールバーなので移動できないようにしたいのですが、
どうすればよいでしょうか?
804:デフォルトの名無しさん
08/02/01 15:14:59
何故そんなことをする必要があるのかは抜きにして、
labelに表示してある文字列をstring型で再取得する方法ってあるのでしょうか?
805:デフォルトの名無しさん
08/02/01 15:36:10
label.Text
806:デフォルトの名無しさん
08/02/01 15:42:40
その方法だと表示してある文字列じゃなくて
"label1"という文字列を取得してしまうのですが・・・やり方が悪いのかな
807:デフォルトの名無しさん
08/02/01 15:46:41
それはlabelにlabel1って入ってるんじゃないの
808:デフォルトの名無しさん
08/02/01 16:04:34
すみません、情報が小出しになってしまって。
DateTime nitiji = DateTime.now;
label1.Text = nitiji.ToString("d");
これでlabel1に「2008/2/1」って表示されてるとしたら
label1に表示されている"2008/2/1"ってのを
文字列で取得したいんです。(nitijiを使わずに)
これがやりたいんですが、出来ますか?
809:デフォルトの名無しさん
08/02/01 16:06:09
いや、だからlabel1.Textだって
810:デフォルトの名無しさん
08/02/01 16:06:15
小出しにするやつは相手にしない
811:デフォルトの名無しさん
08/02/01 16:06:16
>>808
>>805
812:デフォルトの名無しさん
08/02/01 16:12:50
labelに表示するタイミングとlabelの文字列を取得するタイミングが
後者の方が早くなってしまっていたみたいです。
最初から正解を教えていただいていたのに申し訳ありませんでした。
>>805さん、807さん、809-811さんありがとうございました。
813:デフォルトの名無しさん
08/02/01 16:28:39
人の悩み所って色々あってすごいね・・
814:デフォルトの名無しさん
08/02/01 16:30:34
最近C#を習い始めてまだよく分からないのですが、
学習本の中にはインターフェイスを定義するとき、
public interface Itest {
…
}
と、インターフェイスの先頭にpublic修飾子を付けているものがあります。
本の中で詳しく解説されていないのでよく分からないのですが、
このpublicを付ける場合と付けない場合とでは、何か違いがあるのですか?
815:デフォルトの名無しさん
08/02/01 16:33:22
>>814
publicでアセンブル(DLL)の外部から使える。
何もつけない場合はinternalで内部のみで有効。
816:デフォルトの名無しさん
08/02/01 16:48:56
>>815
素早い解答有難う御座います。
なるほど、デフォルトではinternalとなるのですか。
分かりました。
817:デフォルトの名無しさん
08/02/01 19:20:21
挫折するタイプだな。
818:デフォルトの名無しさん
08/02/01 19:21:13
すみません。質問いいですか?
サーバーに置いたC#のexeってそのままじゃクライアントから起動できないんですか?
セキュリティ関係なんでしょうか。。。。
誰かお力をお貸しください
819:818
08/02/01 19:22:40
すみません。ローカルサーバーです。
言葉が足りませんでした
820:デフォルトの名無しさん
08/02/01 19:24:27
サーバーソフトは?
821:デフォルトの名無しさん
08/02/01 19:25:41
どちら側のCPUを使って処理するかによるんじゃないの?
822:818
08/02/01 19:26:58
んー、すみません・・・
知識不足で理解できません・・・
\\hogehoge\\hore\foreって感じのパスになるんですが。
本当にお世話掛けます。すみません
823:818
08/02/01 19:28:01
×\\hogehoge\\hore\fore
○\\hogehoge\hore\fore
でした
824:デフォルトの名無しさん
08/02/01 19:30:51
パスとか何の役にも立たない情報を提供されてもw
ちなみに hoge の次は fuga, piyo と続く。
825:818
08/02/01 19:31:52
>>824
wすみません><
> fuga, piyo
これ信じていいんですか?
826:デフォルトの名無しさん
08/02/01 19:32:23
ここまでの情報で言うと
おそらくSequrityExceptionが発生して終了かと
827:818
08/02/01 19:34:34
>>826
会社でちょっとしたツール作ってるんですけど
会社で2chはまずいので自宅から書き込みです。
。。ですので詳細を説明する事ができないのが申し訳ないのですが・・・・
828:デフォルトの名無しさん
08/02/01 19:34:44
そもそもC#じゃなくても実行ファイルは・・・・・・・・・・・起動できるの?
かなり危険だよね。
829:デフォルトの名無しさん
08/02/01 19:38:56
C#でサーバに置いたファイル、ということならクリックワンス使うのがいい気がするな
830:デフォルトの名無しさん
08/02/01 19:39:35
.net言語は一度中間言語に直してから必要な部分をそのつどコンパイラして実行しているわけですよね?
これをサーバー側のpcのcpuで行ってデータだけをユーザー側に送るなら、サーバーのPCに対してユーザーにアクセス権?を与える必要があるんじゃないですか?
831:818
08/02/01 19:39:38
>>828
!!
・・・・なるほど。そういうもんなんですかぁ・・・
こちらの住人さんがおっしゃるなら正しいと思います。(本気ですよ)
ありがとうございました。そしてお騒がせしました
832:デフォルトの名無しさん
08/02/01 19:41:17
>>831
いや、聞いているんですけどね・・・・・・・・・・・・・・・・
833:デフォルトの名無しさん
08/02/01 19:42:14
実行ファイルをを CGI に使うのはわりと普通だよ。
834:818
08/02/01 19:42:43
> .net言語は一度中間言語に直してから必要な部分をそのつどコンパイラして実行しているわけですよね?
なるほど!目からウロコです。そうですよね、JITコンパイルするのは
サーバー側になってしまいますよね。
んー簡単に考えていた私が浅はかで恥ずかしいです><
835:デフォルトの名無しさん
08/02/01 19:44:16
クリックわんこで解決。
836:デフォルトの名無しさん
08/02/01 19:44:57
>>830
\\hoge~.exeでクリックすると実行されるFWはローカルじゃなかったかな
でもセキュリティ例外が出るので鯖での権限設定は必要だったかと
・・・あきらめてEXEばら撒いたので解決策はよくわからない^^
837:デフォルトの名無しさん
08/02/01 19:47:26
webブラウザが要求してプログラムを起動させるんですよね?
838:818
08/02/01 19:47:36
すみません。会社から呼び出しが掛かってしまいました・・・・・・・
もし宜しければ色々と情報をお教えいただけると助かります。
クリックわんこも自分なりに調べてみますね
・・・・・・んでは行ってきますorz
839:818
08/02/01 19:48:50
>>837
あ、すみません。サーバーフォルダのexeをショートカットで直に叩くつもりなんです
840:デフォルトの名無しさん
08/02/01 19:49:06
クリックわんこが気になる・・・・・・・・・・・・・
841:デフォルトの名無しさん
08/02/01 19:58:56
会社から2chで質問って・・
MSDNフォーラムにでも行っとけまじで。
つかその状態ならクリックワンス配信だろJK
842:デフォルトの名無しさん
08/02/01 20:00:22
たしかにClicOneceに可能性がある。
すごいなC#・・・・・・・・・・。
843:デフォルトの名無しさん
08/02/01 20:10:02
ClickOnceでは、配置時のオプションとして、アプリケーションを配布(=デプロイメント)する方法を、次の2種類から選択できる。
(1)ローカル環境へインストールするモード(オンライン/オフライン・モード)
(2)ネットワーク上から起動するモード(オンライン・モード)
(2)だね。
参考に張っておきます。
URLリンク(www.atmarkit.co.jp)
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4960日前に更新/230 KB
担当:undef