ふらっとC#,C♯,C#( ..
[2ch|▼Menu]
446:デフォルトの名無しさん
08/01/23 13:46:47
>>445
Path.GetExtensionすりゃいいじゃん

447:デフォルトの名無しさん
08/01/23 14:13:02
>>444
CoClass属性のが実体クラス。

448:デフォルトの名無しさん
08/01/23 15:50:08
>>445
C#の、ってここはC#スレだ、決まってんだろ、ハゲ
第一C#の、じゃなくて.net frameworkの、だろ、ハゲ
それにクラス名まで、書けや、ハゲ

Directory.GetFilesならsearchPatternとるオーバーロードがあるっしょ

449:デフォルトの名無しさん
08/01/23 16:20:38
ツンデレの>>448に萌えた

450:デフォルトの名無しさん
08/01/23 17:48:10
>>448
揚げ足とるな。ばか!!!!!!!!!!!!!!

451:デフォルトの名無しさん
08/01/23 17:50:18
>>450は騙り?

452:デフォルトの名無しさん
08/01/23 18:47:52
トランザクションオブジェクトつくって
INSERTとかUPDATEとかしたあと
コミットもロールバックもしないとどうなりまつか?

453:デフォルトの名無しさん
08/01/23 19:40:34
コネクション閉じる時点でロールバック。
だったと思うけどプロバイダに依存しそう。
ものによっては保留状態になるかも。
いや、手動トランザクションなら保留はないかな?


454:デフォルトの名無しさん
08/01/23 20:36:10
>>453
トンクス
SQL Serverだとそんな感じみたいでつね

455:デフォルトの名無しさん
08/01/23 23:26:09
TabControlのTabPageにいくつかTextBoxとRichTextBoxを配置しました。
あるタイミングで,Text

456:デフォルトの名無しさん
08/01/23 23:31:33
すいません,誤って途中のものを書き込んでしまいました。

TabControlのTabPageにいくつかTextBoxとRichTextBoxを配置しました。
あるタイミングで,TextBoxとRichTextBoxのレイアウトを Fixed3D から FixedSingle
に一気に変更しようとしています。

テキストボックスの変更はできたのですが,同様の方法でRichTextBoxの変更ができませんでした。
以下のようにしたのですが,何が問題でしょうか。
RichTextBox rtb = new RichTextBox();

foreach(Object ctrl in tabControl1.SelectedTab.Controls)
{
if(ctrl.GetType().Equals(rtb.GetType()))
{
rtb = (RichTextBox)ctrl;
rtb.BorderStyle = BorderStyle.FixedSingle;
}
}

457:デフォルトの名無しさん
08/01/23 23:56:04
>>456

・まず直接フォームのリッチテキストのフィールドで同じことをしてどうなるか
 確認しよう。

・ブレークポイントの使い方を覚えよう。

・こんなくだらないことでいちいち悩んでるようなら、君才能ないのかも

458:デフォルトの名無しさん
08/01/24 00:10:40
RichTextBox rtb = new RichTextBox();
こうしてから、
if(ctrl.GetType().Equals(rtb.GetType()))
こう判定して、
rtb = (RichTextBox)ctrl;
こうやってしまうところに並々ならぬ才能を感じた。


向いてないよ、やっぱり。

459:デフォルトの名無しさん
08/01/24 00:19:16
なれてないだけ

as null

460:456
08/01/24 00:24:57
>>458さん
ご指導ありがとうございます。
勉強になります。

>>459さん
nullなんですね。
ありがとうございます。

デバッガの使い方も分からず,すいません。
ブレークポイントを指定してBorderStyleを見てみるとちゃんとFixedSingle
になっていました。
RichTextBoxはFixedSingleにしても表示が変わりませんでした。
もしかして,そういうものなんですかね。

461:デフォルトの名無しさん
08/01/24 00:47:41
if(ctrl is TextBox)
って,できるんですね...orz

462:デフォルトの名無しさん
08/01/24 01:10:50
キャストするならctrl as TextBoxとしてnullかどうか見た方がいい。

463:デフォルトの名無しさん
08/01/24 01:12:35
>>462
ありがとうございます。
459さんのヒントを頂き,そのようにしました。
型判定について全く無知でした。。。

464:デフォルトの名無しさん
08/01/24 13:11:02
検討違いなこと言っていたらすみません

public static void func(string str1, string str2, bool flag){
 処理
}
このような文字列を2つと論理型で1つを引数とする関数を再帰的に呼び出す部分なのですが
今現在作成中のプログラムの中で、この関数による処理がほぼ全てのようなものです

なのでこの再帰的にこの関数を呼び出すという部分について何か最適化の方法がないかと探しています

関数内の処理はforeachと.NET内のクラスを利用したものでほぼ埋まっているため
そちらに関しては最適化はやりようがないかなと思っています

それではよろしくお願いします

465:デフォルトの名無しさん
08/01/24 13:21:53
>>464
プログラムの概要を教えてもらえんとなんともなぁ
そもそも本当に再帰が必要なのかもわからないし

466:デフォルトの名無しさん
08/01/24 13:42:20
>>465
すみませんでした、書くと長いので概要を

str1にはディレクトリへのパスを(こちらをA)
str2にはまた別のディレクトリへのパスを(こちらをB)受け取ります。

Bが存在するか確認
A内に存在するファイルを探していきながら、随時B内にA内のファイルを移動していく

その後、A内でディレクトリを検索し、無ければ終了、発見した場合
(今現在のstr1とstr2の値が以下だとしたら
 str1 C:\aaa
 str2 D:\xxx)
A内でディレクトリ検索をして見つけたものが
C:\aaa\abcだとすると
func("C:\\aaa\\abc", "D:\\xxx\\abc", true)
こんな感じで自信を呼び出します

つまりBディレクトリ以下にAディレクトリをサブフォルダ内等一切合財移動させるという感じです


467:デフォルトの名無しさん
08/01/24 14:49:16
最適化する意味はどこにもないな。
せいぜい再帰やめることで万が一のStackOverflowを回避するぐらい。

468:デフォルトの名無しさん
08/01/24 15:06:46
再帰させる必要ないでしょ。
Private Sub moveFile(ByVal a As String, ByVal b As String)
Directory.CreateDirectory(b)
Dim files() As String = Directory.GetFiles(a, "*.*", SearchOption.AllDirectories)
For Each f As String In files
Dim newpath As String = f.Replace(a, b)
Dim newdir As String = Path.GetDirectoryName(newpath)
Directory.CreateDirectory(newdir)
File.Move(f, newpath)
Next
End Sub

469:デフォルトの名無しさん
08/01/24 16:22:56
なんでVBなんだよ。死ぬほど読みにくいわ
466は書くと長いって書いてるんだから
全部のファイルじゃなくて、何か条件付けがあるんだろ

470:デフォルトの名無しさん
08/01/24 16:49:37
手元のマシンには、VBしか入っていないからVBで答えたまで。
なんか条件付けがあるというのならなぜその条件を説明しない。
その条件をこっちで考えろってか?
全部のファイルじゃない?
「一切合財移動させる」と書いてあるだろ。

471:デフォルトの名無しさん
08/01/24 16:53:22
.netじゃフォルダ移動したら、その下にあるのも一緒に移動しないの?

472:デフォルトの名無しさん
08/01/24 18:08:56
>>470
スレタイ読んでくれよ・・・

473:デフォルトの名無しさん
08/01/24 19:24:41
 C++の頃に、switch文を嫌ってポリモーフィックを使って対応していた場合(GoFのstateやTemplete Method系?)、
C#にそのまま移植するとキャストやガベコレの為に返って処理が重たくなる事は有りませんか?

 これから具体例を用意しようと思いますが、2,3時間後になると思うので、
場合によるときは何処が焦点になるか、忠告頂けると助かります。
ちなみにC# 2.0です。ジェネリックの恩恵を受けれると嬉しいのですが。


474:デフォルトの名無しさん
08/01/24 19:34:38
参照型→参照型のキャストは無問題
参照型→値型はボクシングが入って遅くなる
void Hoge<T> where T : IHogeHoge (T value) { ... }
こうすればボクシングは回避できて、インターフェイスメンバも使える
メソッドが一つならインターフェイスじゃなくてデリゲートを使うのも流行り

475:474
08/01/24 19:35:30
間違えた
値型→参照型はボクシングが入って遅くなる

476:デフォルトの名無しさん
08/01/24 19:35:38
そこが処理のボトルネックになってるかどうかがまず問題だろ

477:デフォルトの名無しさん
08/01/24 19:45:25
>476 swichを使いたがる人に人的な問題が有るだけなので、ネックにならない事がわかればすっきりできます。

>474さんのおかげで解決ですけど、私も興味が有るので、もうちょっと面白い話がを集めたいんですけどスレ違ですかね。

私が今書き出したサンプルはデリゲートの方がスマートっぽいので練り直さないと。
void Hoge<T> where T : IHogeHoge (T value) { ... } を有効利用したサンプルを書けてないと足下をすくわれそうだし。


478:デフォルトの名無しさん
08/01/24 20:00:11
手段と目的を履き違えていないか?

479:477
08/01/24 20:07:17
>478
そうですね。 「参照型→参照型のキャストは無問題 」の理由は解ってないし。
>where T : IHogeHoge (T value) { ... }  は自分の件では要らない事が、返事を書いてから気づきました。

未だベンチテストとかできる状態では無いのでボトルネックの洗い出しはできません。

 目安としてはポリモーフィックされたupdate()関数は一秒間に180回ぐらい行われて、 satateが切り替わるのは2,3秒に一回あるか無いかです。
それでupdate()関数内に switchが有るのは嫌だなと思う次第です。

480:デフォルトの名無しさん
08/01/24 20:42:01
C# を使うことそれ自体がボトルネックだとおもいまーす

481:デフォルトの名無しさん
08/01/24 20:53:24
switch使ったっていいと思うが
Enumってswitch用じゃね?

482:デフォルトの名無しさん
08/01/24 21:11:10
問題のサンプルソースできた。
100行ある。ここに貼るとしたらどうしたら良い?

483:デフォルトの名無しさん
08/01/24 21:27:57
(´・ω・`)しらんがな

484:デフォルトの名無しさん
08/01/24 21:30:45
お好きにどうぞ
URLリンク(zero0.x0.com)

485:デフォルトの名無しさん
08/01/24 21:32:37
URLリンク(www.uploda.net)
オリジナルのファイル名でDLすると良いみたい。

かなり汚いけど、これのswitch版を作ってみる。

486:デフォルトの名無しさん
08/01/24 21:32:53
一秒間に180回なら全く気にする必要ないだろ

487:デフォルトの名無しさん
08/01/24 21:44:26
stringの連結とかやってる時点で無意味だろ

488:デフォルトの名無しさん
08/01/24 21:52:36
switch有りのソース
URLリンク(www.uploda.net)

結果
switch無し 117261
switch有り 114267

switchの方が良かった。\(^o^)/
 おまえらさー、 これ信じて本当に大丈夫?

>487 良い事言った。

489:デフォルトの名無しさん
08/01/24 21:57:23
テキスト連結を削除して試したら両方15ms以下で終わったよ

490:デフォルトの名無しさん
08/01/24 22:03:37
>489
LinkedListの大きさを20000にして、string xをint xにして只の足し算にした。

switch無し 35928
switch 21836

C#のキャストってやっぱり痛いんだな。

491:デフォルトの名無しさん
08/01/24 22:33:24
インライン展開されてるみたい
[MethodImpl(MethodImplOptions.NoInlining)]をswitch版のupdateに付けてみ

492:デフォルトの名無しさん
08/01/24 22:51:29
つけては見ましたけど、特に変わらなかったです。 21600ぐらい。
---------
using System.Runtime.CompilerServices;
--中略---
 [MethodImpl(MethodImplOptions.NoInlining)]
 public void update()
 {
  switch (this.state)
-----

UMLやDPを使って設計した方が遅くなるってのはC#ユーザーなら通らされる道なんでしょうね。
キャストやガベコレの世界ってこうなっちゃうんだな。 UMLは概念?だかで実装はswitch。

493:デフォルトの名無しさん
08/01/24 23:10:11
間違えた
インライン展開抑制でこっちで効果があったのはFunc1updateとFunc2updateの方。差がかなり小さくなった。
まあつきつめたらswitchの方が速いのは当たり前だけどそんなことに意味があるかどうかの方が大事

494:デフォルトの名無しさん
08/01/24 23:42:57
そりゃそんな感じの作りならswitchのが効率いいだろうし
3パターンじゃなおさらswitch有利だろうけど
だからどうしたってレベルの話だな。

そのレベルでパフォーマンス重視ならC#なんざ使うのが間違い。
まあ大抵はこんなレベルの差はどうでもいい。
普通は処理そのものがもっとずっと重いしな。


495:デフォルトの名無しさん
08/01/24 23:53:04
でどこでキャストとガベコレが関係してるわけ?

496:デフォルトの名無しさん
08/01/24 23:56:41
まったく関係ないw
switchの方が最適化されて有利っていうだけのこと

497:464
08/01/24 23:57:54
レスくださった方、ありがとうございます

最適化の意味がないというのがいまいちピンと来ませんでしたが
少し説明不足なところがありました。
関数内の処理をどうこうしたいのではなく、関数に引数を渡す部分に関して
何か速度を上げるのに繋がる手法のようなものがあれば・・・と思ってのことでした
なので検討違いかもしれないと今でも思っていますorz

再帰処理がいらないという意見がありましたが、私自身の力量ではこれで全力でして
これ自体アドバイス貰いながらの完成だったりします。
どんどんと階層を深く辿るにはどうしてもこれ以外の方法が思いつきませんでした

498:デフォルトの名無しさん
08/01/25 00:02:47
>494
>普通は処理そのものがもっとずっと重いしな。

テキスト連結
117261-114267= 2994
足し算
35928- 21836= 14092
そうですね。

>495
 どう関係しているか解らないので、適当です。
C++のポインタとキャストならこうは成らないのでは?

 switch無しは、何回キャストしているか把握してないし。 ガベコレとauto pointerを勘違いしているかも、
>495が関係ないと言うなら、もっとましなソースになるかもしれませんね。


499:498
08/01/25 00:05:31
>496 今見た。

500:デフォルトの名無しさん
08/01/25 00:06:08
>>497
>最適化の意味がない
どう見てもディスクIOの方が圧倒的に重いからじゃね

501:497
08/01/25 00:12:12
>>500
なるほど、確かにorz
少しでもと思ったんですが厳しそうですね
ありがとうございました

502:デフォルトの名無しさん
08/01/25 00:17:10
>>501
IOって面で工夫するとしたら
文字列で渡さずにDirectoryInfoを渡すようにしたらいいのでは

503:デフォルトの名無しさん
08/01/25 01:31:02
インラインとか書かれてるのをみると
脳内で淫乱に変換される漏れの頭を何とかしてください

504:デフォルトの名無しさん
08/01/25 04:51:44
PropertyGridで、uint型の配列を展開したとき、数値を16進数で表示するには
どうしたらいいのでしょうか。

505:デフォルトの名無しさん
08/01/25 07:57:25
頑張るのならば ArrayConverter を真似して実装してから
uint[] 型のプロパティに TypeConverter 属性で実装したのをつける
ArrayConverter の内部クラスが private なので面倒

頑張らないのならば
[TypeConverter(tyeof(UInt32HexConverter))]
struct UInt32Hex{
 public uint Value;
}
とでもして Uint32HexConverter をお手軽に実装してから
UInt32Hex の配列を使う

506:504
08/01/25 09:13:17
>>505
ありがとうございます。
とりあえず、頑張らない方向でやってみます…。

507:デフォルトの名無しさん
08/01/25 09:57:14
がんばろうぜ…






いやまあどうでもいいんだけど

508:デフォルトの名無しさん
08/01/25 10:17:29
XMLコメントを書くと
メソッド自体とパラメータのコメントはカーソルを合わせたり、Ctrl+K,Pとかすれば表示されますが
戻り値の/// <returns>xxxx</returns>に書いたものは
どうすれば表示されるのでしょうか?

あとデバッガでメソッドの戻り値が何になったのかを
そのメソッド内で見ることは出来ないのでしょうか?
バージョンは2008です

509:デフォルトの名無しさん
08/01/25 11:33:12
>>323
VC# 2008 Express使ってて思ったのは、
クイックウォッチが使えないこと。

ブレークポイントからステップインして処理を追っていくときに、
その時点における式の評価ができるのは結構便利なんだよな。
それ以外では全く不満はないので、それだけの為にVS2005Proに戻そうとまでは思わんね。

VS2008Pro、アップグレード版の値段によっては購入を検討する。

510:デフォルトの名無しさん
08/01/25 11:52:13
前を使ってないからクイックウォッチってのがわからないけど、
文面からイミディエイトウインドウのような気がする。
?を最初につけてメソッドとか記述すれば結果がみれるし、フィールドに代入も出来る

初期状態では確かメニューにないから、ユーザー設定から追加。

511:デフォルトの名無しさん
08/01/25 11:56:44
式を評価するだけならウォッチ式でできるよ
2008では演算子の上にマウスカーソルを置くと評価した結果が表示されるようになってる

512:デフォルトの名無しさん
08/01/25 12:27:59
>>510
なるほど、イミディエイトウインドウで自作式を評価できるのか。
今まであんまり使ったこと無かったもんで知らなかった。
それならクイックウォッチいらないかもね。

>>511
それはソースに記述してある式の評価でしょ?
それは当然できる。
俺が言ってたのは、ソースに記述してない評価式のこと。


513:デフォルトの名無しさん
08/01/25 12:46:42
>>512
ウォッチウインドウにある空の行をダブルクリックして式を入力するだけ

514:デフォルトの名無しさん
08/01/25 13:14:35
.netだから出来るんだろうけど、
最初にイミディエイトウインドウを知ったときには感動した

ドキュメント見て、実際の動作確認をしたくなったら
参照さえしてあれば、そのままF10(ステップオーバー)だけ押せば
ソースコードに全くないクラスでもそのまま試せるし、IntelliSense効くし
ちょっとしたことなら確認用のプログラム書かなくてもいいんだよな
テストしたいクラスがあったときもイミディエイトウインドウから実行できるし
ブレイクポイント設定しておけばちゃんと止まるし

515:デフォルトの名無しさん
08/01/25 15:36:46
>>502
DirectoryInfoとFileInfoにして色々試してみました
大きなディレクトリを移動させる際の重さがなくなったのですが、移動スピード(?)というか処理にかかる時間が延びてしまったようです

まだ色々試している段階なのですが、これは良くも悪くも安定したということか・・

何はともあれ新しい可能性です、もう少し試行錯誤していこうと思います
ありがとうございました

516:デフォルトの名無しさん
08/01/25 16:32:16
DataGridView 内のセルにて
長い文字列を入力した時に折り返すようにしたいのですが
どのように設定すれば良いのでしょうか?
WrapMode を True に設定したら全角文字は上手く折り返されるんですが
スペースを含まない半角文字はセルから溢れてしまい、困ってます。

517:デフォルトの名無しさん
08/01/25 23:56:07
今データベースを使用するアプリケーションを書いているのですが、
SQL文が非常に長くて可読性が悪いので文を分割しようと考えてます。
この場合、

string query = "select hoge, fuga, hage from test"
+ " where hage = 1 ・・・";

見たいな書き方しますか?それともStringBuilderを使ってApendしていきますか?
どう書くのが一般的なんでしょうか?

518:デフォルトの名無しさん
08/01/26 00:28:05
多いのは単に+で連結じゃないかね?
俺は@でヒアドキュメントもどきが好きだが。


519:デフォルトの名無しさん
08/01/26 00:29:32
ループ等の中にないならstringで連結してもいいんじゃね
それか余所においとくかリソースにつっこむか

520:デフォルトの名無しさん
08/01/26 00:36:50
リテラルの+はコンパイル時に解決されるからStringBuilderなんて使うと余計に遅くなるよ。

521:デフォルトの名無しさん
08/01/26 00:44:27
C#のtry-catchの質問です
シリアル通信を用いたセンサのグラフを表示するプログラムを作っています。
UIのデザインForm1.csとセンサを扱うクラスSensorClass1.csにわけています。
で、シリアル通信の関連のエラー処理をしたいのですが、かきのどちらに
try-catchを施せばよいでしょうか。

Form1.cs
private void buttonWaaSens_Click(object sender, EventArgs e)
{
this.sensorClass.sens();
}

SensorClass1.cs
public void sens()
{
this.serialPort.DiscardInBuffer();
this.serialPort.WriteLine("sens +000001000 20 5 0");
System.Diagnostics.Debug.WriteLine("取得開始");
}




522:デフォルトの名無しさん
08/01/26 00:51:25
>>521
いや、日本語書けよw
君はエスパーかもしれんが、ここ読んでるキミ以外の人間はエスパーじゃないんだけど。

523:デフォルトの名無しさん
08/01/26 00:57:03
ぼくはエスパーです
どちらでも好きなほうにどうぞ

524:デフォルトの名無しさん
08/01/26 01:08:10
>>521
ベストアンサー

 すべて


525:デフォルトの名無しさん
08/01/26 02:33:53
PropertyGridのような折り畳み・展開可能なGrid(複数カラム保持)を作成したいのですが、
参考になるURL・方法を知っている方教えていただけますか?
こんな感じを想定しています。
ColA   |ColB |ColC
-NodeA |    |
 -NodeC|     |
+NodeB |     |

526:デフォルトの名無しさん
08/01/26 02:42:09
>>525
URLリンク(www.codeproject.com)

527:デフォルトの名無しさん
08/01/26 03:05:21
>>526
ありがとうございます。
コード参考にして作ります。

528:デフォルトの名無しさん
08/01/26 05:13:40
if(dir.Attributes == FileAttributes.ReadOnly)
{
 dir.Attributes = dir.Attributes & ~FileAttributes.ReadOnly;
}
dirはDirectoryInfoです

これで読み取り属性なら読み取り属性を解除するということになっているでしょうか?

529:デフォルトの名無しさん
08/01/26 06:39:01
if ((dir.Attributes & FileAttributes.ReadOnly) != 0)
とでもしておかないと、読み取り専用以外の属性を併せ持つディレクトリを漏らす。

530:デフォルトの名無しさん
08/01/26 06:45:14
ディレクトリには必ずディレクトリ属性がついているから、>>528のやり方では絶対に条件が成り立たないな。

531:デフォルトの名無しさん
08/01/26 07:22:43
>>529
ありがとうございます
流石に単純すぎて自分のものはいぶかしんでいたんですが
読み取り専用なだけ、という場合しか考慮されていなかったんですね、助かりました

>>530
DirectoryAttributes的なものでもあるんでしょうか?
一応こちらの環境では(読み取り専用にチェック入れただけのディレクトリに対しては)できましたが

532:デフォルトの名無しさん
08/01/26 07:25:26
あれ>>529がいけそうになさそうな・・

533:デフォルトの名無しさん
08/01/26 07:35:47
状況によって消えたり消えなかったり、読み取り属性だけころっとかわったりorz

もうちょっと試行錯誤してきます、すみません

534:508
08/01/26 07:50:21
>>508
やっぱりどちらも無理なんでしょうか?

535:デフォルトの名無しさん
08/01/26 07:57:37
>>534
どっちも必要ないから無理じゃない?

536:デフォルトの名無しさん
08/01/26 09:32:29
>>534
メソッドの戻り値はreturnの部分にブレークポイント仕掛ければ分かるよ

537:デフォルトの名無しさん
08/01/26 11:43:12
>>518,519,520 さんありがとうございました。

>>518 @使ったヒアドキュメントもどき私も使っています。
>>520 コンパイル時に解決してくれんですね。安心して+で連結できます。

538:デフォルトの名無しさん
08/01/26 13:22:07
form1、form2、form3があり、
form1からボタンのイベントでダイアログ形式でform2を開き、そこに値(TextBox)を入力します
そのあと、okでform1に戻り、今度は別のボタンのイベントでform3を開き、そこでSaveFileDialogを開きます
このときSaveFileDialogのFileName先ほどのTextBoxの値を入れたいのですがどうしたらよいでしょう?



539:デフォルトの名無しさん
08/01/26 13:28:42
form2にそのテキストボックスの値を取得するプロパティを定義する
form2を表示して,okで戻った後にform1のコードからそのプロパティを通して値を取得して
form1のフィールドに入れとく
form3を開く前にプロパティとかコンストラクタとかでその値をform3に渡す

540:デフォルトの名無しさん
08/01/26 13:29:50
SaveFileDialogのヘルプ見れば一発でわかりそうなもんだが
一体なにがわからんの?
もしかしてform1からform3にファイル名を渡す方法?

そんなもん、form3を開く時にファイル名を渡すなりなんなり、自分で考えろ。

541:デフォルトの名無しさん
08/01/26 13:32:21
>>539
すみません
実際のコードで簡単に書いていただけないでしょうか?

542:デフォルトの名無しさん
08/01/26 13:40:58
>>540
お前初心者スレからでてったほうがいいと思うぞ

543:デフォルトの名無しさん
08/01/26 13:41:36
>>541
基礎からやり直せ
そのレスで確信したが全くわかってないだろ

544:デフォルトの名無しさん
08/01/26 13:43:43
>>540
具体的に言えばそうです
ただそのform3のsavefiledialogのFileNameプロパティに名前を設定するとき、
sfd.Filename = の後にどうやったらform2のテキストボックスの値を参照できるのかがしりたいです

545:デフォルトの名無しさん
08/01/26 13:44:07
class Form2 {
 public string テキストボックスの値 { get { return this.textBox1.Text; } }
}
class Form3 {
 private string fileName;
 public string ファイル名 { get { return fileName; } set { this.fileName = value; } }
 void SaveFileDialogを開くイベント() { //(略) saveFileDialog.FileName = fileName; }
}
class Form1 {
 private string fileName;
 void Form2を開くイベント() {
  using (Form2 form2 = new Form2()) {
   if (form2.ShowDialog() == DialogResult.OK)
    this.fileName = form2.テキストボックスの値;
  }
 }
 void Form3を開くイベント(){
  Form3 form3 = new Form3();
  form3.ファイル名 = this.fileName;
  //form3を表示
 }

546:デフォルトの名無しさん
08/01/26 13:44:30
>>544
クラスの基礎だけでいいからどっかの解説ページを読むんだ

ここで一時凌ぎすべきじゃない項目だぞ

547:デフォルトの名無しさん
08/01/26 14:09:30
>>545
型 'System.Windows.Forms.TextBox' を型 'string' に暗黙的に変換できません
AD_Adjust.textBox1' はアクセスできない保護レベルになっています。

ってエラーが出てしまいました



548:デフォルトの名無しさん
08/01/26 14:17:41
>>547
>>546

やる気あんのか屑

549:デフォルトの名無しさん
08/01/26 14:20:15
>>542
ロクにマニュアルも見ず、自分で試してみることもしないのは
初心者以前。

>>544
だから、
form2のテキストボックスの値を参照できるように、プロパティなり
メソッドの引数なりで自分で参照できるように作るんだよ。

550:デフォルトの名無しさん
08/01/26 14:21:24
↑ごめんなさい、解決です

551:719
08/01/26 14:29:25
>>719です。
もう一度起動してWINXPを起動したのですが今度は正常に読み込みました。
が・・・
起動しても何か処理が重い・・・(普段なら10秒もすれば起動して処理が終わるのに・・・)
それで色々作業中にまたまた急に電源が切れました。。
そう、719を書き込んだときとまったく同じ症状で
で、「これはウィルスだな。」と思い、そうと決まれば駆除しかない!
そう思って俺の計算では成功する予定でした。(←馬鹿
しかしその結果、ウィルスチェッカー中に電源が落ちてしまいます。
(ちなみにしばらく時間を置いてから起動すれば立ち上がるみたいなんです。)
で3回程度試したんですが・・・必ずチェック数が1万を越える前に電源が落ちます。
ウィルスチェックしていない間は落ちることがないのでまず電源アダプタとかでは無いはずなんですが・・・
ニコニコにウィルスでも混入したのかな・・・?(←先にチェックして来い
というわけでちょっとニコニコに何か手がかりみたいなの無いか見てきます。

552:デフォルトの名無しさん
08/01/26 18:09:08
(´・ω・`)知らんがな

553:デフォルトの名無しさん
08/01/26 18:48:10
>>719の頭ん中にもウィスル湧いてんじゃねw

554:デフォルトの名無しさん
08/01/26 19:20:38
Point[] p = new Point[4];
p[0] = new Point(0, 0);
p[1] = new Point(1, 1);
p[2] = new Point(2, 2);
p[3] = new Point(3, 3);


クラスの配列をnewするとき↑みたいに
1個ずつnewするのがめんどいんですが
スマートにやる方法教えてください

555:デフォルトの名無しさん
08/01/26 19:25:58
Point[] p = new Point[4];
for(int i = 0; i < 4; i++){
 p[i] = new Point(i, i);
}

556:デフォルトの名無しさん
08/01/26 19:26:31
Point は構造体だから配列つくっちゃったら
要素ごとに new する必要なんてない
なので new は最初の1個だけでよい

557:デフォルトの名無しさん
08/01/26 19:28:33
Point[] p = { new Point(0, 0), new Point(1, 1), new Point(2, 2), new Point(3, 3) };

558:デフォルトの名無しさん
08/01/26 19:31:07
C#でさぁWindowsのAPIを利用するのは.netのコンセプトに反してるよね?


559:デフォルトの名無しさん
08/01/26 19:32:24
それがいやなら .net 側で API 用意してくれ!

560:554
08/01/26 19:33:30
>>555 (;´Д`)却下
>>556 (゚д゚)ハァ?
>>557 (´∀` )採用!!

561:デフォルトの名無しさん
08/01/26 19:34:50
構造体の概念を全く理解してないでよくPointクラスを使用できるね。
掛け算の概念を知らないで九九をひたすら暗記している家の息子みたいなもんだ。

562:デフォルトの名無しさん
08/01/26 19:36:01
for を却下して new を羅列してる方を採用って・・・
何がやりたいのか分からない。

563:デフォルトの名無しさん
08/01/26 19:37:38
>>560
Point[] p = Enumerable.Range(0, 4).Select(i => new Point(i, i)).ToArray();

564:デフォルトの名無しさん
08/01/26 19:38:05
>>561


565:デフォルトの名無しさん
08/01/26 20:33:37
今までC/C++やってたんですが
最近C#やることになって勉強中です。
ものすごく親切な仕様という印象です。

566:デフォルトの名無しさん
08/01/26 20:51:14
文字列のn番目の文字だけを別の文字に変えたいときはどうしたら良いでしょうか?


567:デフォルトの名無しさん
08/01/26 20:56:55
文字列.replace(a,b);
a→b


568:デフォルトの名無しさん
08/01/26 20:58:55
>>554
Point[] p = new Dictionary<int, int> { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 } }.Select(xy=>new Point(xy.Key, xy.Value)).ToArray();

569:デフォルトの名無しさん
08/01/26 21:15:55
一旦ToCharArray()で文字配列にしていじった後にnewし直す。とか

570:デフォルトの名無しさん
08/01/26 21:32:19
>>566
StringBuilderならインデクサ経由で変更できるよ。

571:デフォルトの名無しさん
08/01/26 21:33:07
>>565
親切っていうよりガチガチに制限かけまくってるだけ

572:デフォルトの名無しさん
08/01/26 21:51:04
画像処理のラスター処理関連の質問です。

画面上に何か図形を2つ書いて(例えば10角形2つ)を書いて
その図形の重なった部分の面積を求めるっていうとき
どうやればできますか?



573:デフォルトの名無しさん
08/01/26 21:54:17
三角形9つにずつ分解して、重なり部分81箇所の面積の和をとる。
幾何学の問題。

574:デフォルトの名無しさん
08/01/26 21:54:58
9じゃねえわ。8x8=64

575:デフォルトの名無しさん
08/01/26 21:57:56
重なり部分をどう求めるの?

576:デフォルトの名無しさん
08/01/26 22:06:03
>>572
紙と鉛筆で「ry)っていうときの」アルゴリズム書ける人か書けない人かで分岐。
書ける人ならとりあえずアルゴリズム書いて晒してみると親切な人がC#での書き方のヒントくれるかも。
書けない人は……ライブラリ探すところから始める? ちなみに.NET標準にはないよ。

まあ標準ではなくてもGeometryクラスを流用すればできるかもしれんが。
URLリンク(d.hatena.ne.jp)

577:デフォルトの名無しさん
08/01/26 22:12:22
>>572みたいな問題って意外と難しいんじゃないの?
いつでも代数的に解ける図形が与えられるとは限らないし。
だからモンテカルロ法みたいなのがあるわけじゃないの?

つーか、>>572は図形がどういうデータ構造で与えられるかをまず提示しなきゃ
話にならないね。

578:デフォルトの名無しさん
08/01/26 22:18:36
>>576も言ってるけどWPF使えば超簡単にできるよ

579:578
08/01/26 22:19:29
>>576が言ってるのは違うGeometryだったな

580:572
08/01/26 22:24:03
図形の形状は不定です。
C言語上でやったときは
メモリデバイスコンテキスト上に図形を描画して
それぞれ配列に格納して論理演算で求めてました
↓みたいなかんじ

■■■■■■
■□□□□■
■□□□□■
■■■■■■
■■■■■■
■■■■■■

■■■■■■
■■■□□■
■■■□□■
■■■□□■
■■■□□■
■■■■■■

重なり部分
■■■■■■
■■■□□■
■■■□□■
■■■■■■
■■■■■■
■■■■■■

C#だとメモリデバイスコンテキストに相当するものが
あるのかよくわからないので聞いてみました
WPFというのでできるんですか
調べてみます

581:576
08/01/26 22:25:14
>>578
WPFのGeometry.GetAreaでいけそだね。
だとしたら「標準にはない」は嘘になる。サンクス

582:デフォルトの名無しさん
08/01/26 22:43:15
>>580
メモリデバイスコンテキストに相当するものならSystem.Drawing以下にあるかな。
GraphicsPathからRegion作って残りとIntersectして共通領域のRegionを作る。
できたRegionをGraphics.Clipにセットして適当に塗りつぶして塗りつぶし色でピクセル数え上げか。
それでいいならできなくはないと思う。

WPFはSystem.Drawing以下のとは別の描画ライブラリ。

583:572
08/01/26 22:50:39
>>582

URLリンク(dobon.net)

↑のHPのやり方ですか?
キーワードでググってみたら出てきました。
とりあえずこのやり方でやってみます。
ありがとうございました。


584:566
08/01/26 23:35:17
>>570
ありがとう

585:デフォルトの名無しさん
08/01/26 23:37:28
フォントの名前からフォントファイルの名前を取得する方法ってありますか?

"MS ゴシック"->"MSGOTHIC.TTC" みたいな感じで。

586:デフォルトの名無しさん
08/01/26 23:51:31
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts

587:デフォルトの名無しさん
08/01/27 01:41:37
以下のような任意の2つのRectがあって、

□□□□□□□□□
□□□□□□□□□ Rect1
□□□□□□□□□

         □□□□
         □□□□ Rect2
         □□□□

これを次のようにマージするには、空白部分をどうやって補完すればいいんでしょ。

□□□□□□□□□
□□□□□□□□□
□□□□□□□□□ Region1(=Rect1+Rect2+補完部分)
         □□□
         □□□□
         □□□□
         □□□□



588:デフォルトの名無しさん
08/01/27 01:45:08
まず間違いなく必要なのは
「次のように」
の部分を厳密に定義することじゃないだろうか。

589:デフォルトの名無しさん
08/01/27 01:46:26
書き込んでから閃いた。

Rect1のBottomをRect2のTopの位置まで下げ、新しいRect1とする。
Rect2のTopをRect1のBottomまで上げ、新しいRect2とする。

次に、新しいRect1とRect2の重なりを>>583のHPのやり方で求めると、
これが補完部分になる。

より簡単で、いろんな場合に使える方法がありましたら教えてください。

590:デフォルトの名無しさん
08/01/27 01:56:32
矩形同士の重なりなんてRectangle.Intersectでいいだろ

591:デフォルトの名無しさん
08/01/27 03:09:06
menustripをウインドウの上に固定するにはどうしたらいい?
今は大きい画像を読み込んで↓の方にスクロールさせると
menustripが消えてしまう

592:デフォルトの名無しさん
08/01/27 03:11:36
>>591
画像を表示するパネルに一緒にMenuStripを乗っける馬鹿がいるか。

593:デフォルトの名無しさん
08/01/27 04:40:33
画像処理する時処理を少しでも軽くするため
ポインタ使おうかと思うんですが
C#の流儀に反する?

594:デフォルトの名無しさん
08/01/27 09:04:16
反しない。普通にunsafeで使え。

595:デフォルトの名無しさん
08/01/27 09:06:05
>>593
不安ならPaint .NETのソースをunsafeでgrepしてみたら?

596:デフォルトの名無しさん
08/01/27 09:13:08
C#のエントリポイント、なにを書くところかさっぱりわからない

597:デフォルトの名無しさん
08/01/27 09:30:56
プログラムを開始してやりたいことを書けばいい。
イベントドリブンなプログラムなら、ハンドラを登録しまくれ。

598:デフォルトの名無しさん
08/01/27 09:36:39
とりあえず自動生成されたのを眺めていたけどクラス(デフォだとForm1)を呼び出して起動、みたいになってる様子

その呼び出されたクラス内のコンストラクタでハンドラだとかコモンコントロール?だとかを登録してる

599:デフォルトの名無しさん
08/01/27 09:42:15
enum型のToString()って独自定義出来ないものだろうか。
ComboBox.Itemsにするのに出し入れで変換するのが面倒くさいから日本語で要素を定義してみた。
IntelliSenseは特に問題ないけど違和感ありまくり

600:デフォルトの名無しさん
08/01/27 11:57:49
>>599
enumみたいな構造体を自分で定義すればいいのでは?

601:デフォルトの名無しさん
08/01/27 13:28:42
struct EnumWrapper<T> where T : struct {
 private T value; public T Value { get { return value; } }
 public EnumWrapper(T value) { this.value = value; }
 public static explicit operator T(EnumWrapper<T> value) { return value.Value; }
 public static explicit operator EnumWrapper<T>(T value) { return new EnumWrapper<T>(value); }
 public override string ToString(){
  ToStringAttribute[] attr = (ToStringAttribute[])typeof(T)
   .GetField(Value.ToString()).GetCustomAttributes(typeof(ToStringAttribute), false);
  return (attr.Length != 0) ? return attr[0].String : Value.ToString();}}
[AttributeUsage(AttributeTargets.Field)]class ToStringAttribute : Attribute {
 public string String { get; private set; }
 public ToStringAttribute(string str) { this.String = str; }}

enum MyEnum { [ToString("いちばん")]One, [ToString("二番")]Two, }
こんな風にするとか

602:デフォルトの名無しさん
08/01/27 14:07:34
enum の要素に属性ってつけられたっけ

603:デフォルトの名無しさん
08/01/27 14:14:32
フィールド扱いだからAttributeTargets.Fieldで可

604:デフォルトの名無しさん
08/01/27 14:44:51
>>601
ぼやきのつもりで書いたのに、あっさりこんなコードが出てきて驚きました。
中程のreturnの行の真ん中のreturnだけ削除したと思います。
使い方にちょっと悩んだけど
初期設定で
ComboBox.Items.Add((EnumWrapper<MyEnum>)MyEnum.One);
使うときには
(MyEnum)(EnumWrapper<MyEnum>)ComboBox.SelectedItem
ですね。
ありがとうございました。

なんかC#ってなんでもできそうな気がしてきた。

605:デフォルトの名無しさん
08/01/27 17:21:47
質問なんですが
struct Foo{...}という構造体があって

Foo foo = new Foo(10, 20, 30);
とやる場合と
foo.a = 10;
foo.b = 20;
foo.c = 30;
では後者のほうが高速なのですか?

構造体のコピーが発生する時ってnewとかreturnとか、あと何がありますか?

606:デフォルトの名無しさん
08/01/27 17:23:29
しるか。

607:デフォルトの名無しさん
08/01/27 17:38:34
>>605
構造体のnewでコピーは発生してない。

608:デフォルトの名無しさん
08/01/27 17:55:59
後者の方が最適化されやすい場合があるみたいだけど基本的にはほとんど変わらないみたい
Foo foo = new Foo { a=10, b=20, c=30 };はだいぶ遅い

609:デフォルトの名無しさん
08/01/27 18:03:13
C#わかんねーな。
>560は只の基地外だと思ってスルーしてたけど、
もしかして最適化狙いかと、勘ぐってしまう。

610:デフォルトの名無しさん
08/01/27 18:14:35
>>606>>607>>608
ありがとうございました

611:デフォルトの名無しさん
08/01/27 18:16:01
>>556は単に図形の頂点か何かを直接書きたかっただけだろ
たまたま規則性のある例を挙げたから誤解されただけで

612:デフォルトの名無しさん
08/01/27 18:18:20
>>608
確かにC#3.0のその構文のときはコピーが発生してるね。
妙なコードを吐いてる。構造体のときは要注意か。

613:デフォルトの名無しさん
08/01/27 18:58:07
Foo temp = new Foo();
temp.a = 10;
temp.b = 20;
temp.c = 30;
Foo foo = temp;

になるんだっけ。

614:デフォルトの名無しさん
08/01/27 19:03:26
>>613
それがなぜかスタック3つも使ってる。
Foo temp1 = new Foo(); 
Foo temp2 = temp1; 
temp2.a = 10; 
temp2.b = 20; 
temp2.c = 30; 
Foo foo = temp2; 

クラスだと2つなのだが。

615:デフォルトの名無しさん
08/01/27 19:05:12
それって何が嬉しいんだろう。
クラスの場合も良く分かんないんだけど。

616:デフォルトの名無しさん
08/01/27 19:12:46
>611
ありがとう。質問するときの参考になった。

617:デフォルトの名無しさん
08/01/27 19:17:31
800*600の画像があったとします。
逆透視変換のためにその画像を上辺900、下辺800、高さ1000の等脚台形に変換したいのですが、
.NETのクラスを使って簡単な方法があれば教えていただきたいです。
OpenCVのアフィン変換とかになるんですかねやっぱり。


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してもいいよ


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4950日前に更新/230 KB
担当:undef