C♯相談室 Part30
レス数が1000を超えています。これ以上書き込みはできません。
0001名無しぃ♯
2006/03/04(土) 13:54:32過去スレは>>2-5あたり。
0002名無しぃ♯
2006/03/04(土) 13:55:32Part28 http://pc8.2ch.net/test/read.cgi/tech/1134514022/
Part27 http://pc8.2ch.net/test/read.cgi/tech/1131544541/
Part26 http://pc8.2ch.net/test/read.cgi/tech/1127063469/
Part25 http://pc8.2ch.net/test/read.cgi/tech/1122352650/
Part24 http://pc8.2ch.net/test/read.cgi/tech/1117631000/
Part23 http://pc8.2ch.net/test/read.cgi/tech/1112968209/
Part22 http://pc8.2ch.net/test/read.cgi/tech/1109630502/
Part21 http://pc5.2ch.net/test/read.cgi/tech/1106490240/
Part20 http://pc5.2ch.net/test/read.cgi/tech/1103005153/
Part19 http://pc5.2ch.net/test/read.cgi/tech/1100240847/
Part18 http://pc5.2ch.net/test/read.cgi/tech/1096112588/
Part17 http://pc5.2ch.net/test/read.cgi/tech/1091284402/
Part16 http://pc5.2ch.net/test/read.cgi/tech/1087297504/
0003名無しぃ♯
2006/03/04(土) 13:56:30Part14 http://pc5.2ch.net/test/read.cgi/tech/1076933504/
Part13 http://pc2.2ch.net/test/read.cgi/tech/1071663456/ (ログ行方不明)
Part12 http://pc5.2ch.net/tech/kako/1066/10660/1066038651.html
Part11 http://pc5.2ch.net/tech/kako/1061/10612/1061262958.html
Part10 http://pc5.2ch.net/tech/kako/1051/10518/1051842450.html
Part9 http://pc2.2ch.net/tech/kako/1039/10396/1039646808.html
Part8 http://pc3.2ch.net/tech/kako/1032/10324/1032488831.html
Part7 http://pc3.2ch.net/tech/kako/1027/10275/1027531796.html
Part6 http://pc3.2ch.net/tech/kako/1022/10222/1022257078.html
Part5 http://pc3.2ch.net/tech/kako/1019/10195/1019533942.html
Part4 http://pc.2ch.net/tech/kako/1016/10165/1016597767.html
Part3 http://pc.2ch.net/tech/kako/1009/10094/1009473982.html
Part2 http://pc.2ch.net/tech/kako/1002/10024/1002468050.html
Part1 http://pc.2ch.net/tech/kako/977/977112364.html
0004デフォルトの名無しさん
2006/03/04(土) 13:58:560005デフォルトの名無しさん
2006/03/04(土) 14:06:49例えば、黒い画像の上にカーソルを持っていくと#000000を取得する、のような感じです。
どなたか教えてください。お願いいたします。
0006デフォルトの名無しさん
2006/03/04(土) 14:09:420007デフォルトの名無しさん
2006/03/04(土) 14:19:350008デフォルトの名無しさん
2006/03/04(土) 14:22:1100095
2006/03/04(土) 15:14:54label2.Text = Bitmap.GetPixel(x, y).ToString();
今このようにやっているのですが、
「静的でないフィールド、メソッド、またはプロパティ 'System.Drawing.Bitmap.GetPixel(int, int)' で、オブジェクト参照が必要です。」
というエラーがでて、コンパイルできません。
どのようにやったらよいのでしょうか?
0010デフォルトの名無しさん
2006/03/04(土) 15:39:490011デフォルトの名無しさん
2006/03/04(土) 16:18:25GetPixelはスタティックなメソッドではないからエラーが出る
例えばprivate PictureBox p;という感じでクラス変数として持ってるなら
p.Image.GetPixel(x, y);こんな感じで使う
ソースがどうなってるかわからんので、こういう感じでしかアドバイスできません
0012デフォルトの名無しさん
2006/03/04(土) 16:36:030013デフォルトの名無しさん
2006/03/04(土) 16:50:57ふらっとC♯(初心者用) Part7
http://pc8.2ch.net/test/read.cgi/tech/1141458468/l50
00145
2006/03/04(土) 18:10:03まだまだ勉強不足ですね。がんばってきます。
0015デフォルトの名無しさん
2006/03/05(日) 16:29:03ガベージコレクションがあるし、そんな気にしなくていいじゃんと、
あんまり使わない派か、ほっとくのも気持ち悪いので、頻繁に
使う派か。
0016デフォルトの名無しさん
2006/03/05(日) 16:36:170017デフォルトの名無しさん
2006/03/05(日) 16:39:02要らないでかいオブジェクトや貴重なリソースを保持するオブジェクトは
不要になったら明示的に捨てるベッキー
0018デフォルトの名無しさん
2006/03/05(日) 16:41:460019デフォルトの名無しさん
2006/03/05(日) 17:26:42ttp://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=28493&forum=7
簡単にいったら状況によって異なるし実装に踏み込まんと分からんのでとりあえず
全部呼べということ。俺もほぼ同じ考え。
つまり頻繁に使う、といったらなんか変だな、使うべきところで使う。
0020デフォルトの名無しさん
2006/03/05(日) 17:34:250021デフォルトの名無しさん
2006/03/05(日) 17:36:51中が長いときはDisposeで短いときはusingやなー
0022デフォルトの名無しさん
2006/03/05(日) 17:39:29でもtry-finallyだとスコープを一個外に出さんといけないのがいや。
まぁケースバイケースだけども。
0023デフォルトの名無しさん
2006/03/05(日) 21:31:17メモリを意識しすぎるとmalloc/freeやnew/deleteと何らかわりないと思うよ。usingしてもGCしてもちゃんと解放されることに変わりはないし。
0024デフォルトの名無しさん
2006/03/05(日) 22:08:25「メモリを意識しすぎる」なんて考えてるから分からんのだよ
例えばGDIリソースならヒープの領域サイズが固定で決まってい
るので、メインメモリ確保量に関係なく、放置してたらデスクトップ
アプリケーションヒープを圧迫する。それはGCが感知することが
出来ない。
一言でいえばコンピュータにある限定されたリソースなんてのは
メモリだけじゃないんだ。あらゆるリソースが限定されていると
いってもいい。GCはそのうち「メインメモリだけ」を扱う。それ以外の
リソースについて管理する手間が減るわけじゃない。
それにFinalizerの実行保証は2.0からだぞ?ついでに言えば
スレッド依存性を持つリソースはFinalizerで開放することは無理
なのでDispose呼んでくれないとリークさせるしかない
0025デフォルトの名無しさん
2006/03/05(日) 22:09:26メソッド抜けたら速攻で消していきますね。
つーか本当に消したのかな。デクストラクタでメッセージ出しただけだが。
0026デフォルトの名無しさん
2006/03/05(日) 22:23:090027デフォルトの名無しさん
2006/03/05(日) 23:10:420028デフォルトの名無しさん
2006/03/06(月) 00:33:42C#のあれをデストラクタなんて呼んでると、C++と関わるときに不幸になる
0029デフォルトの名無しさん
2006/03/06(月) 00:44:49そもそもそれは C++/CLI に言ってやれ
0030デフォルトの名無しさん
2006/03/06(月) 01:15:25ゲーム機も片っ端からC++だし
ま、それは言語議論スレにでもまかせておくが、正直C++にboost::smart_ptrがある以上C#の魅力はあまりないんだよなぁ
0031デフォルトの名無しさん
2006/03/06(月) 01:28:090032デフォルトの名無しさん
2006/03/06(月) 06:08:430033デフォルトの名無しさん
2006/03/06(月) 09:42:47InitializeComponent(void) の中で
this.SetStyle(ControlStyles.ResizeRedraw, true);
を呼んでいるのですが、この設定ってデザイナでできませんか?
手書きすれば済む話なんですが、できるだけ
デザイナでさくさくやりたいなぁ、と。
003433
2006/03/06(月) 10:39:54「後で」の間違いでした。
0035デフォルトの名無しさん
2006/03/06(月) 12:07:06リサイズされうるものならたぶんあると思うんだが
0036デフォルトの名無しさん
2006/03/06(月) 17:34:30日本語でおk
0037デフォルトの名無しさん
2006/03/06(月) 19:31:02その中にクライアント領域のサイズが入ってないのは不便じゃねぇ?
0038デフォルトの名無しさん
2006/03/06(月) 19:42:450039デフォルトの名無しさん
2006/03/06(月) 20:46:130040デフォルトの名無しさん
2006/03/06(月) 20:50:490041デフォルトの名無しさん
2006/03/06(月) 20:59:29ちなみにクリッピング領域はGraphicsオブジェクトに入ってるんだよな。
0042デフォルトの名無しさん
2006/03/06(月) 21:40:09senderとPaintEventArgs.ClipRectangleでサイズ関係は全部取れるのにGraphicsオブジェクトになんで必要なの?
あちこちに同じ情報がある必要は無いし、そもそもGDI+に紐付くGraphicにWindowのサイズ関係が無いと不便と言う発想が理解できない
0043デフォルトの名無しさん
2006/03/07(火) 00:08:12・・・消す・・・
消す消す消す消す
速攻で消す
GCまかせだとこんな感じですか
0044デフォルトの名無しさん
2006/03/07(火) 00:10:470045デフォルトの名無しさん
2006/03/07(火) 00:15:02そんなに焦ってない
消す・・・そろそろ消そうかなぁ・・・忙しいから後で・・・
暇になってきたから消そう・・・次は・・・
何か気分乗ってきたからまとめて消そう!
こんな感じ
つまり、任せて信頼しきると微妙に裏切られる
0046デフォルトの名無しさん
2006/03/07(火) 00:22:320047デフォルトの名無しさん
2006/03/07(火) 00:32:51protected virtual void Dispose(bool disposing)
{
if (!is_disposed)
{
if (disposing)
{
}
}
this.is_disposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
~Class()
{
Dispose(false);
}
雛形ってこんなんですか?
0048デフォルトの名無しさん
2006/03/07(火) 00:34:13is_disposed は必須じゃないとおも
0049デフォルトの名無しさん
2006/03/07(火) 01:54:280050デフォルトの名無しさん
2006/03/07(火) 08:43:29比較的大きなオブジェクトを生成し、
それを長いループの最初の1回だけで使用し
あとはメソッドを抜けるまで1回も使用しないような状況のときだな。
例えばだけど。
0051デフォルトの名無しさん
2006/03/07(火) 11:05:29public class Settings
{
private ArrayList names;
public Settings()
{
this.names= new ArrayList();
this.names.Add("name1");
}
public ArrayList Names{get{return this.names;} set{this.names = value;}}
}
Settingクラスに初期値はあるけれども、XMLに保存したものがあれば
それで置き換える、というふうにしたくて上記のように書きました。
しかしこれでXmlSerializer.SerializeとDeserializeをすると、
Namesのアイテム数が
初期値で1個→書き出される→次の起動で初期値1個→読み込み
→初期値が生きていて計2個になる→書き出し の繰り返しで
どんどん増えてしまいます。
Deserialize時にArrayList namesを自動でクリアしたいんですが、
どうすればいいでしょうか。
0052デフォルトの名無しさん
2006/03/07(火) 14:09:580053デフォルトの名無しさん
2006/03/07(火) 15:30:03005453
2006/03/07(火) 15:30:440055デフォルトの名無しさん
2006/03/07(火) 19:35:490056デフォルトの名無しさん
2006/03/07(火) 19:54:140057デフォルトの名無しさん
2006/03/07(火) 20:11:37お互い頑張ろうorz
0058デフォルトの名無しさん
2006/03/07(火) 21:01:18混合のとき、親ノードのチェックをグレーにするにはどうしたらよいですか?
Windows Formで1.1です。
0059デフォルトの名無しさん
2006/03/07(火) 21:44:36.NET 2.0 ならオーナードローもできるが。
0060デフォルトの名無しさん
2006/03/07(火) 22:09:511.コンストラクタに初期化値をロードするロジックを書かないでロード後に空だった場合にのみ初期化値を書き込む
2.ArrayListを使わないでStringの配列にする。
のどちらかかな
0061デフォルトの名無しさん
2006/03/08(水) 10:41:15>>60
やっぱり初期値を突っ込むかどうかの判断をどこかでするのが単純ですかね・・・
ファイルの有無で判断しようかとも思ってます。あえて0件にカスタマイズ
されているかもしれないんで。
0062デフォルトの名無しさん
2006/03/08(水) 16:33:58IHTMLElementCollection cAtags = doc.getElementsByTagName("a");
IEnumerator ee = cAtags.GetEnumerator();
while(ee.MoveNext())
{
★1
HTMLAnchorElementClass aATag = (HTMLAnchorElementClass)ee.Current;
★2
if (aATag.innerText == "リンク")
{
・
・
・
axWebBrowserに表示したウェブページから、アンカー部分を全て抽出して、
if文で絞込みをするというものを作りたく、以上のようなプログラムを書きました。
★1の位置でbreakするとエラーが出ないのですが、★2の位置でbreakするとエラーが出ます。
つまり★1と★2の間の部分に問題があるのだと思うのですが、分かる方いるでしょうか。
エラーは、
TargetInvocationExceptionはハンドルされませんでした。
というものです。
006362
2006/03/08(水) 17:14:26を
Object aATag = ee.Current;
に変えたところ正常に動作しました。
なぜHTMLAnchorElementClassが使えないのでしょうか。
すみません、分かる方いたらよろしくお願いします。
0064デフォルトの名無しさん
2006/03/08(水) 17:21:170065デフォルトの名無しさん
2006/03/08(水) 17:57:19変数 aATag に格納されているオブジェクトの型を見ればいーんじゃないの
0066デフォルトの名無しさん
2006/03/08(水) 18:01:46もしかしてこういう事?
・★1の地点にブレークポイントを置いてブレークして、その後F5で続行すると例外は起きない
・★2の地点にブレークポイントを置くと、その前で例外が起きてそこまで到達しない
だとすると、WebBrowserのロードが完了していないうちにパースしようとして例外が発生してるんだと思うよ
読み込みは非同期処理だから、コードは DocumentCompleted イベントを使うとか readyState を見るとか読み込みに対して責任を負わなければならない
0067デフォルトの名無しさん
2006/03/08(水) 18:06:25これ参考にしたでしょ
Visual C# .NET による MSDNAA おもしろプログラミング : 第 3 回 VC# で MSHTML テクノロジ
http://www.microsoft.com/japan/msdn/academic/Articles/fun/03/
Aタグの解析箇所をNavigate直後にもってきたんとちゃう?
readyStateが考慮されていないコードだから単に移動しただけじゃダメだよ
0068デフォルトの名無しさん
2006/03/08(水) 18:59:33HTMLAnchorElementに変えたところ動作しました!
いろいろとありがとうございました。
0069デフォルトの名無しさん
2006/03/09(木) 14:31:42教えてエロイ人
0070デフォルトの名無しさん
2006/03/09(木) 14:33:48007169
2006/03/09(木) 14:41:36探し方が悪かった様でこんなところを見つけて解決しそうです。
http://jeanne.wankuma.com/tips/form/findcontrol.html
0072デフォルトの名無しさん
2006/03/09(木) 14:57:26DOMを相手にするならControlは広すぎ
FindControlしてHTMLGenericControl型の変数に入れるのが良いかと
事前に型が特定できるならHTMLGenericControl型の変数ではなくその型に入れるのが良いかと
007362
2006/03/10(金) 00:58:22HTMLパースの良い方法がわかりません。
doc = (HTMLDocument)axWebBrowser.Document;
IHTMLElementCollection allTable = doc.getElementsByTagName("table");
IEnumerator ee = allTable.GetEnumerator();
while (ee.MoveNext())
{
IHTMLElement elem = (IHTMLElement)ee.Current;
df.writeline(elem.innerText); //df = DebugForm
}
現在はこのようにして、ウェブページのすべてのテーブル要素を抜き出すところまで行ったのですが、
tableの入れ子になっている場合は、おかしな表現になってしまいます。
例えば<table><tr><td>AAA<table><tr><td>BBB</td></tr></table></td></tr></table>だと
AAA
BBB
BBB
と表示されます。このようにテーブルの入れ子になっている場合に要素内容が重複してしまいます。
007462
2006/03/10(金) 00:59:23そこで調べたところ、
HTMLDocumentクラス
http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.htmldocument(VS.80).aspx
HTMLElementクラス
http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.htmlelement.aspx
HTMLElement.Childrenプロパティ
http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.htmlelement.children(VS.80).aspx
これらのページによれば、HTMLDocument.GetElementsByTagName("タグ")からHtmlElementCollectionを得られ、
また各要素の子要素や親もChildrenやParentなどから得られるかもしれないと考えたんですが、だめでした。
・HTMLElementCollection ec = HTMLDocument.GetElementsByTagName("タグ")とするとビルドエラー
IHTMLElementCollectionにすると可能
・elem.innerText , elem.parentElement は可能だが、
elem.children , elem.getAttribute , elem.title などは不可。
また、こちらのパースも試したのですが、ビルドエラーになってしまいました。
http://japan.internet.com/developer/20051115/25.html
何が間違っているのでしょうか?
0075デフォルトの名無しさん
2006/03/10(金) 01:06:27> tableの入れ子になっている場合は、おかしな表現になってしまいます。
> 例えば<table><tr><td>AAA<table><tr><td>BBB</td></tr></table></td></tr></table>だと
> AAA
> BBB
> BBB
> と表示されます。このようにテーブルの入れ子になっている場合に要素内容が重複してしまいます。
innerText なら当然そうなるに決まってる。HTML DOMを勉強しろ。
> そうではなくて、HTMLをパースしてツリー状にしたいと思っています。
DOM そのものが要素によるツリー構造になってるわけだが、それをどうしたいんだ結局。
> ・HTMLElementCollection ec = HTMLDocument.GetElementsByTagName("タグ")とするとビルドエラー
> IHTMLElementCollectionにすると可能
> ・elem.innerText , elem.parentElement は可能だが、
> elem.children , elem.getAttribute , elem.title などは不可。
> また、こちらのパースも試したのですが、ビルドエラーになってしまいました。
なんでエラーの詳細すら書かない?
0076デフォルトの名無しさん
2006/03/10(金) 01:38:23ツリーの何階層目がどんなタグで、どの子要素がどんなタグで、widthとheightが○○で、bgcolorが○○で・・・
といったものをすぐに取り出せるようにしたいと思っています。
DOMだとどのようにやるのか今わからない状態です。
HTMLElementCollection ec = HTMLDocument.GetElementsByTagName("タグ")
とすると、
型 'MSHTML.IHTMLElementCollection' を 'MSHTML.HTMLElementCollection' に暗黙的に変換できません。明示的な変換が存在します。(cast が不足していないかどうかを確認してください)
コンパイラ エラー CS0266
になります。
IHTMLElement elem = (IHTMLElement)ee.Current;
IHTMLElement test = elem.parentElement;
は可能なのですが、
HTMLElement test = elem.children;
IHTMLElement test = elem.children;
HTMLElementCollection test = elem.children;
IHTMLElementCollection test = elem.children;
などにすると、
型 'object' を 'MSHTML.HTMLElementCollection' に暗黙的に変換できません。明示的な変換が存在します。(cast が不足していないかどうかを確認してください)
コンパイラ エラー CS0266
となります。
どこが間違っているのでしょうか。
0077デフォルトの名無しさん
2006/03/10(金) 01:49:040078デフォルトの名無しさん
2006/03/10(金) 01:55:470079デフォルトの名無しさん
2006/03/10(金) 01:59:45きついです。助言お願いします。
0080デフォルトの名無しさん
2006/03/10(金) 02:08:13IHTMLElement.children が返す型は何よ?
public object Hoge() {return new object(); } ってメソッドが返す型は何よ?
string str = Hoge(); ってどうよ?
0081デフォルトの名無しさん
2006/03/10(金) 02:39:41http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.htmldocument(VS.80).aspx
こちらのページに、
「GetElementsByTagName は、DIV や TABLE など、指定された HTML タグ名を持つすべての HtmlElement オブジェクトの HtmlElementCollection を返します。」
とあります。しかし
HTMLElementCollection ec = doc.getElementsByTagName("table");
とすると先ほどのエラーになります。
IHTMLElementCollection ec = doc.getElementsByTagName("table");
とするとビルドが出来ます。
これはなぜなのでしょうか?
また、
IHTMLElement elem = (IHTMLElement)ee.Current;
IHTMLElement test = elem.parentElement;
を
HTMLElement elem = (HTMLElement)ee.Current;
HTMLElement test = elem.parentElement;
としても先ほどのエラーになります。
全てのIHTMLをHTMLとしてもエラーになります。
0082デフォルトの名無しさん
2006/03/10(金) 02:40:45IHTMLElement.children の返す型はIHTMLElementCollectionであっているでしょうか?
IHTMLElement elem = (IHTMLElement)ee.Current;
IHTMLElementCollection child = elem.children;
だとしたらこれも同様のエラーになるのはなぜなのでしょうか。
また、
Boolean flag = elem.CanHaveChildren;
'MSHTML.IHTMLElement' に 'CanHaveChildren' の定義がありません。
コンパイラ エラー CS0117
になります。
0083デフォルトの名無しさん
2006/03/10(金) 02:45:460084デフォルトの名無しさん
2006/03/10(金) 02:46:16テーブルの何番目の行の何番目のセルの値や背景色を得る方法を知っている方がいましたら
教えていただければと思います。
0085デフォルトの名無しさん
2006/03/10(金) 02:50:23> ttp://msdn2.microsoft.com/ja-jp/library/system.windows.forms.htmldocument(VS.80).aspx
それは
System.Windows.Forms.HtmlDocument クラスであって、
mshtml.HTMLDocument クラスではなかろうが。
C# でコーディングするならせめて大文字小文字の区別ぐらいは付けれ。
> HTMLElement test = elem.parentElement;
だからさ、IHTMLElement.parentElement が返す型は何よ?
public namespace Foo {
public class A {}
}
public namespace Bar {
public class a {}
}
で
a hoge = new A();
はどうよ。
0086デフォルトの名無しさん
2006/03/10(金) 07:26:18質問のほとんどはローカルウィンドウとかウオッチウィンドウで確認できることばかり
君の現時点の能力以上のことをやろうとしているんだから、今やっつけでクリアできてもまた質問厨になるだけ
008762
2006/03/10(金) 13:45:22System.Windows.Forms.HtmlDocument
mshtml.HTMLDocument
の違いをやっと理解しました。
IHTMLElement.children
が返す型がわかりません。
HTMLDocument , IHTMLElement でキャストしてみたのですが出来ませんでした。
(IHTMLElement.children).GetType()や
(IHTMLElement.children).ToString()
とするとSystem._Comobjectとなり、わかりませんでした。
javaだと.toString()でオブジェクトの種類やプロパティが列挙されたりすると思うんですが、
C#では、オブジェクトやプロパティを調べる一般的な方法はあるんでしょうか?
すみませんが、わかる方いたらよろしくお願いします。
0088デフォルトの名無しさん
2006/03/10(金) 14:33:44オブジェクトブラウザは
object children { get; }
mshtml.IHTMLElement のメンバ
だと言ってますが。
2.0使っているならmshtmlのお世話にならなくても
なんとかなりそうな気配がするんだけども
触らずに言っているので嘘かも。
008962
2006/03/10(金) 15:01:29どのようにして、childrenの各要素をいじれるのかわからないのです。
>2.0使っているならmshtmlのお世話にならなくても
>なんとかなりそうな気配がするんだけども
>触らずに言っているので嘘かも。
試してみたいので、ヒントをお願いします。
HTMLのツリー構造を解析する方法について何か知っている方がいたら、
何でもいいので教えていただけると助かります。
関連ページだけでもいいので、よろしくお願いします。
0090デフォルトの名無しさん
2006/03/10(金) 15:53:24> HTMLのツリー構造を解析する方法について何か知っている方がいたら、
> 何でもいいので教えていただけると助かります。
> 関連ページだけでもいいので、よろしくお願いします。
Web Development
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnanchor/html/anch_webdev.asp?frame=true
これのHTML関係一通り読破してから出直してきてね
0091デフォルトの名無しさん
2006/03/10(金) 16:18:44お前超ウザいから消えて
おみやげあげるからあとは自分で考えろ
理解できなきゃ無能と思って諦めろ
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
treeView1.BeginUpdate();
treeView1.Nodes.Clear();
ParseHTML(webBrowser1.Document.All, treeView1.Nodes.Add(webBrowser1.Url.AbsoluteUri));
treeView1.EndUpdate();
}
private void ParseHTML(HtmlElementCollection hec, TreeNode node)
{
foreach (HtmlElement he in hec)
{
TreeNode NewTreeNode = node.Nodes.Add(he.TagName);
if (he.Children != null)
{
ParseHTML(he.Children, NewTreeNode);
}
}
}
0092デフォルトの名無しさん
2006/03/11(土) 15:30:37つーかプログラマって対人能力無いから嫌い
0093デフォルトの名無しさん
2006/03/11(土) 16:11:36俺も空気の読めないお前が嫌い。
0094デフォルトの名無しさん
2006/03/11(土) 16:30:44というエラーになります。対策をご教授願います。
int iRec;
・
・
iRec = Ora.GetInt32(0); ←ここでエラー
0095デフォルトの名無しさん
2006/03/11(土) 16:36:230096デフォルトの名無しさん
2006/03/11(土) 16:39:00レスどうも。
トレースしたら「20」という値が入っていました。(SQLはカウント文です。)
GetInt16でも駄目でした。OracleValues(0)でも駄目です。
0097デフォルトの名無しさん
2006/03/11(土) 16:50:570098デフォルトの名無しさん
2006/03/11(土) 16:53:32けど駄目です。
0100デフォルトの名無しさん
2006/03/11(土) 21:23:42直接decimal以外の数値型にはキャストできないんだよね。
0101デフォルトの名無しさん
2006/03/11(土) 22:45:280102デフォルトの名無しさん
2006/03/12(日) 12:42:51DataGridViewの内容をクリアするにはどうしたらよいでしょうか?
某サンプルにDataGridView1.Rows.Clearが載っていたから試しましたが上手く動きません。
ヘルプを見たりググっても見当たらないのですが。
0103デフォルトの名無しさん
2006/03/12(日) 12:57:38データソースは何さ。
0104102
2006/03/12(日) 13:09:58データソースは使っていません。
ホームページから取り込んだ表(HtmlElementCollection)を以下のように表に取り込んでいます。
DataGridView1.Rows.Add(new object[] { Data1, Data2, Data3 });
更新が出来なくて困ってるんです。
0105デフォルトの名無しさん
2006/03/12(日) 13:17:53>>91
これだけ書いてもらえれば十分優しいだろ。
一人でいくつも投稿したら、うざがられるにきまってる。
mixiでトピでも立てろ。コテだとみんな親切に振る舞うからな。
0106デフォルトの名無しさん
2006/03/12(日) 13:27:42Rows.Clear で問題なさそうだが、どう「うまく動かない」んだ?
0107デフォルトの名無しさん
2006/03/12(日) 13:51:09下記のインスタンスを生成した際、「構造体にインスタンスフィールド
初期化子を指定することはできません。」というエラーとなります。
ご教授願います。
structure{
public [] array = new string[10]
}
0108デフォルトの名無しさん
2006/03/12(日) 13:52:360109デフォルトの名無しさん
2006/03/12(日) 14:30:27どうも、調べてみます。
0110デフォルトの名無しさん
2006/03/12(日) 16:48:52初めてなので、色々と勉強しております。(今までVB6かVC6でした)
そこで、質問なのですが、DBを使用して色々と弄ってみようと思ったのですが、
色々と疑問が湧いてきました。
コネクションやらアダプタを貼り付けて・・・というサンプルを書籍やインターネット上でよく見かけます。
確かに、そういった開発はサンプルを元に出来るようにはなったのですが、
複数画面あるアプリケーションが一般的であり、そういった画面1つ1つにコントロールを貼り付けて・・・
という作業は非効率的な気がします。
また、データベース接続部分などを関数化して・・・というサンプルも見かけるのですが、
どれも接続文字列のみを外部や引数などで取得し、DataSetやDataAdapterを作ってから、
それらのオブジェクトを戻り値として返すようなものを多く見かけます。
VB6などでは、グローバル変数にコネクションなどを宣言しておいて、
ログイン処理などのあとは1つのコネクション変数に対してレコードセットを作成したりしていました。
C#でまったく同じという訳にはいかないでしょうが、アプリケーションが終了するまで
1つのコネクション参照するといった事はNGなのでしょうか?
もしNGでないならば、そういったサンプルがありましたら書籍やHPなどの情報を教えて頂きたく。
0111デフォルトの名無しさん
2006/03/12(日) 16:52:170112110
2006/03/12(日) 17:47:46なるほど。
でも、そうすると別の疑問が湧いてきます。
DBアプリケーション全般に言える事だと思うのですが、
DB接続のコストはCPU負荷も時間も相当のコストを使うものだと思うのですが、
そんなに接続・切断を繰り返していいものなのでしょうか?
また、(機能の異なる)複数の画面が同時に立ち上がったとき、
コネクションの数はどうなるのでしょうか?
1つのアプリケーションで2つ3つ、場合によっては数十個のコネクションが生成されるのでしょうか?
0113デフォルトの名無しさん
2006/03/12(日) 17:53:32プログラマが意識する必要はないが
0114デフォルトの名無しさん
2006/03/12(日) 18:46:22111に補足すると、必要な時と言うのは別に1レコードセット単位という訳ではない。
連続したDBアクセスがあるなら1つのコネクションを使いまわすべき。
途中にユーザのアクセスを挟まないのを基本的な1単位とすると良い。
次に、DBとのコネクションは「同じユーザ」が「同じ接続文字列」で接続した場合にコネクションプーリングが機能して無駄なコネクションが発生しなくなる。
普通アプリケーション内では同じ接続文字列を利用するため、キーになるのは「同じユーザ」であること。
もし認証機構の都合で同じユーザにならない場合は、擬装を用いて同じユーザにする。
ASP.NETでは基本的に同一の接続文字列を使うだけでプーリングが機能するので楽だが、Windowsアプリでは色々と意識することが必要(データ層で擬装するなど)
また、どうしても複数ユーザを用いる場合はプール数を調整するなど色々な対処方法がある。
この手のことはMCPを勉強すると当たり前の知識になる
MCPを開発者は馬鹿にすることが多いが、初心者はMCPの勉強を一通りやることをお勧めする(実際に受験する必要はない)
下手な参考書見てぐぐるよりよっぽど体系的な知識が付く
0115102
2006/03/12(日) 19:00:06>Rows.Clear で問題なさそうだが・・・
とおっしゃるので実験したら、出来ました。
どうもウェブの再読み込みに問題があるようです。
どうもありがとうございました。
0116110
2006/03/12(日) 20:01:38なるほど参考になります。
ただ1つ気になったのは、
>もし認証機構の都合で同じユーザにならない場合は、擬装を用いて同じユーザにする。
>ASP.NETでは基本的に同一の接続文字列を使うだけでプーリングが機能するので楽だが、Windowsアプリでは色々と意識することが必要(データ層で擬装するなど)
偽装をした場合、DBに対しては接続ユーザを正確に知らせる事は出来るのでしょうか?
(例えばOracleのログイン・ログオフ データベーストリガーでユーザのアクセスログなどを取っている場合など)
個人情報保護法の関係で、こういった情報が必要ですので、誤魔化せるとなると
逆にどうやっても誤魔化せないように実装しないといけないので・・・
0117デフォルトの名無しさん
2006/03/12(日) 21:01:40> 偽装をした場合、DBに対しては接続ユーザを正確に知らせる事は出来るのでしょうか?
無論偽装したんだからできない
DBレベルでセキュリティ強化するのであればプーリングはユーザ単位にするしかない
あらゆる要素を都合良く盛り込むことはできないから、何かをトレードオフする必要があるわな
ただ、Oracleの接続にADO.NET以外を使えば解決策があるかもしれない
そこはもうADO.NETもC#も関係ないOracle開発の世界だからそっちのコミュニティなりスレで聞くべし
0118デフォルトの名無しさん
2006/03/13(月) 00:39:330119デフォルトの名無しさん
2006/03/13(月) 00:39:510120102
2006/03/13(月) 00:54:25webBrowser_DocumentCompletedでHtmlDocumentを解析して表を取り込んでいるのですが、
更新が上手く出来ません。Navigateで飛ばすとキャッシュを読み込んでしまいます。
Refreshでキャッシュを消してもDocumentCompletedを呼び出してくれません。
Refresh後SleepさせてからNavigateでDocumentCompletedで呼び出しても駄目でした。。
ヘルプに、「キャッシュ内で存続できる時間を示す有効期限を指定できます」とあるのですが、
その方法が記されていません。ならばレジストリを直に操作しようと思ったのですがググっても出てきません。
どなたか良い方法を御存知でないでしょうか?
0121デフォルトの名無しさん
2006/03/13(月) 01:25:18いっそ WebClient でローカルにファイルを保存してそれを開くようにした方が手っ取り早いかもね
>キャッシュ内で存続できる時間を示す有効期限を指定できます
これは相手のサーバが返す値をキャッシュに保存してるってことのはず
指定するのは相手のサーバ
0122デフォルトの名無しさん
2006/03/13(月) 09:14:26君さー、いい加減基礎知識の勉強からやってよ
話してる次元がC#で実装する以前のレベルだから
そもそもWebBrowserコンポーネントって内部的に何だか理解してる?
あと、ざっとでいいからHTTPヘッダ読んで意味を理解できる?
単にHTMLページを表示するだけの話じゃないから、そういうところの知識が要る
どうせ文句だけ書くと読まない厨だろうからここからざっと回答
キャッシュを取り込むのはIEとして普通
キャッシュを取りたくないのであれば、サーバ側でpragmaにno-cache突っ込むとかmetaでexpiresを-1にするとか色々な方法がある
[HOWTO] Internet Explorer でキャッシュを無効にする
http://support.microsoft.com/default.aspx?scid=kb;ja;234067
あとAPIを利用する方法もある。
これはVBの例だが移植すれば使える。
アプリケーションが WebBrowser コントロール をホストするとき、操作方法クリア キャッシュ
http://support.microsoft.com/kb/262110/
URLが変われば違うページと認識することを利用して、毎回ランダムな引数を付与するって方法もある。
基本を知っていればこの程度の情報は簡単に検索できる。
逆を返せば、最低限の知識も無く実装しようとしている。
もっと基本的な事を理解してから手をつけるべきだと思うよ。
誰が使うか知らんが、リリース後にクレーム受けまくって対処できなくなっても知らんよ。
0123102
2006/03/13(月) 11:10:28ちょっと待ってください!
質問似てるけど私は >92とは全くの別人です!
彼のやろうとしてることは出来ます!
でもアドバイスありがとですw
0124デフォルトの名無しさん
2006/03/13(月) 12:07:280125デフォルトの名無しさん
2006/03/13(月) 12:15:30何気に自分の方が優秀だとアピールすな。
0126デフォルトの名無しさん
2006/03/13(月) 12:29:49ご教授願います。
0127デフォルトの名無しさん
2006/03/13(月) 12:36:44目をくまなくして見ろ。このうんこ野郎が!
0128デフォルトの名無しさん
2006/03/13(月) 12:41:49C#ではヌルストリングを表すのに空の文字列とnull(VBではNothing)が混在するような場合
どうするのが通常でしょうか?
ヌルストリングかどうか判定する際、いちいちorをとるコードを書くのが普通か。
それとも、そもそも混在を許さないようにどちらかに強制するようにするべきか。
VBでは「空の文字列とNothingは等価扱い」という(いい意味で?)いい加減な仕様になっているので
何も考えなくていいんですが。
0129デフォルトの名無しさん
2006/03/13(月) 12:54:39どんな状況を想定してるんだ?
.NET 2.0 では Stribg,IsNullOrEmpty メソッドが増えたが。
0130デフォルトの名無しさん
2006/03/13(月) 13:31:39public struct Foo
{
public string[] KonoUnkoYarou;
public Foo( string[] netas )
{
KonoUnkoYarou = netas;
}
}
0131デフォルトの名無しさん
2006/03/13(月) 13:33:550132デフォルトの名無しさん
2006/03/13(月) 13:48:58C#のビルド速度ってどうですか?
まぁまぁ速いならちょっと勉強しようかな・・と
0133デフォルトの名無しさん
2006/03/13(月) 13:56:50VBでは「空の文字列とNothingは等価扱い」って嘘じゃない?
str=Nothing と str="" が等価なのは便宜上のうんこ仕様
vbの str Is Nothing がC#の str==null
空文字判定は、C#ではstr==""だとインスタンスが生成されるから
str==String.Emptyか、
nullじゃないことが分かってるならstr.Length==0を見るのが一般的
0134デフォルトの名無しさん
2006/03/13(月) 14:26:47TurboCでも使ったら?
きっとDelphiなんて捨ててしまいたいくらい感動するから
0135デフォルトの名無しさん
2006/03/13(月) 14:35:55同じボリュームのソースならC++のコンパイルより速い。
てか何でこんな速いのか謎なくらい。
0136120
2006/03/13(月) 15:01:25どうもありがとう御座います。
0137デフォルトの名無しさん
2006/03/13(月) 15:07:52それぐらい最適化されるんじゃない?
と言ってみるテスト
0138デフォルトの名無しさん
2006/03/13(月) 15:12:18IsNullOrEmptyは個人的にはおっけー
if(foobar==null || foobar.Length==0){
ほにゃらら
}
0139デフォルトの名無しさん
2006/03/13(月) 15:13:46"" と String.Empty は別インスタンスが作られる。
"" は "" で一つのインスタンスを使い回す。
0140デフォルトの名無しさん
2006/03/13(月) 15:14:53俺は基本的にstringにnullはいれない方針。
おっしゃるとおり混在するとめんどいしね。
ただ空文字も意味がある場合は、無効な値の場合はnullを入れる
という使い方をするときもある。
0141デフォルトの名無しさん
2006/03/13(月) 15:22:13MenuItem には RadioChecked がありますが、ToolStripMenuItem で見当たらないようですが。
0142デフォルトの名無しさん
2006/03/13(月) 15:22:14{
public event EventHandler Hoge;
...
}
class child : parent
{
public override void foo()
{
...
Hoge(this, EventArgs.Empty);
// ↑ コンパイルエラー: イベント '〜.Parent.Hoge' は +=、-= の左辺にのみ使用できます。ただし、'〜.Parent' 型内から使用されている場合を除きます。
...
}
...
}
継承したクラスから継承元クラスで定義されたイベントを発生させるにはどうすればよいのでしょうか?
環境はVisual C# 2005です。
0143デフォルトの名無しさん
2006/03/13(月) 15:22:42速いのは結構だが、最適化とかちゃんとされてるの?
リンクされるライブラリの差は?
単に速ければいいってもんじゃないと思うんだけどね
オレはVC#2005とDelphiの同じボリューのソースのコンパイル速度がDelphiの方が圧倒的に超絶に速くてもVC#を選ぶ
ビルド速度なんて超絶に遅くなけりゃどうでもいい
ビルドの速さごときで全く違う開発系のDelphiからVC#へ乗り換えようと思うってことは、何かその部分を圧倒的に重視する理由があるんだよね
そこを重視する理由に興味がある
是非教えて欲しい
0144102
2006/03/13(月) 15:23:20いえ、別人だとアピールしたかっただけですw
0145デフォルトの名無しさん
2006/03/13(月) 15:28:35基底クラスに protected virtual OnHoge を用意する。
0146デフォルトの名無しさん
2006/03/13(月) 15:37:21早速のレスありがとうございます。
継承したクラスのメソッドが基底クラスのOnHoge()を呼んで、
基底クラスのOnHoge()でイベントを投げればよいということでしょうか?
0147デフォルトの名無しさん
2006/03/13(月) 15:43:20System.Windows.Forms のコントロール群見てもそうなってるでしょ?
>派生させて OnTextChanged をオーバーライドして base.OnTextChanged を呼ばないと、
TextChanged イベントに登録したハンドラが実行されない
0148デフォルトの名無しさん
2006/03/13(月) 15:43:41別人だけど、トライ&エラーで学習するなら
ビルドは速ければ速いほどいいんじゃない?
実行速度よりも重要かも。
0149デフォルトの名無しさん
2006/03/13(月) 15:47:30俺も別人だけど、学習レベルのコード量で
トライ&エラーが遅くて勉強にならないという
糞マシンのスペックを教えて欲しい。
0150148
2006/03/13(月) 15:57:52さあ?
うちのPCは P4 1.7GHz+1GBmem だけど、 ビルドで不快な程待たされたことはないなあ。
最大でも30kstepくらいのものしかビルドしてないけど。
celeron1GHz+256MBmemとかの、一昔前のエントリーマシンなら
それなりに時間かかるんじゃね?知らないけど。
0151デフォルトの名無しさん
2006/03/13(月) 16:15:041.配列をコピー
2.配列の要素数を増やして初期化
3.コピーした配列をセット
4.追加したい要素をセット
現在このような方法をとっているのですが、
array.Add(index, 要素)
のように、配列の要素数を簡単に動的に扱う機能というのはあるでしょうか。
Arrayクラスあたりのメソッドにあるかと思ったのですが、見つかりませんでした。
0152デフォルトの名無しさん
2006/03/13(月) 16:17:360153デフォルトの名無しさん
2006/03/13(月) 16:23:240154148
2006/03/13(月) 16:24:562.0ならGenericのList<>も候補
そういう「集まり」を扱うクラスは、System.Collectionsもしくは
System.Collections.Genericに色々あるから見てみるといいよ
0155デフォルトの名無しさん
2006/03/13(月) 16:27:53ありがとうございます。
0156デフォルトの名無しさん
2006/03/13(月) 17:04:30TurboPascalはTurboCよりさらにコンパイルが速かったのを覚えています。
>>132
私はDelphi使いですがWindowsCEアプリを開発する必要にせまられて
VS2005を評価しています。
同じ大きさのソースで較べたんじゃないけど今までのMSの開発環境に
較べて圧倒的に速い。かつ、IDEがとても使いやすい。
DelphiがVer7の次からどんどんもっさりして使いにくくなっていってるのに
対してこれがMicrosoftの製品かと思うくらい使いやすくなってる。
以前Delphiの開発者がMicrosoftに引き抜かれたという話を聞いたことがあるが
その影響を痛切に感じました。
0157デフォルトの名無しさん
2006/03/13(月) 17:13:43ベースにDelphiマンセーがあるようだけど、コア技術者が引き抜かれたってのは相当前の話だから
君が評価してるっぽい7の頃にはコア技術者はとっくにMSの住人ですよ
0158デフォルトの名無しさん
2006/03/13(月) 17:36:33いきなりリターンキーやバックスペースキー、デリートキーが
入力不能になることって、ないですか?
0159デフォルトの名無しさん
2006/03/13(月) 17:38:04B2って何?ベータ版ってこと?
既に製品版が期間限定で無償提供されてるからそっち使え
とっくにベータ版の評価受付は終わってるから、評価しても受け取ってもらえないよ
0160デフォルトの名無しさん
2006/03/13(月) 17:44:19Eclipseに比べると見劣りするな。
せめてgetter/setterまとめて作ることはできんのかな。
0161デフォルトの名無しさん
2006/03/13(月) 17:47:19Standard 以上には確かついてるぜ。
0162158
2006/03/13(月) 17:50:12ありがとう。さっそくやてみるー
0163デフォルトの名無しさん
2006/03/13(月) 17:58:02うん、DlphiマンセーというかDlphiを開発した人のコンセプトが大好き。
だから今はVS2005マンセーになりかけてる。
きみもプログラマなら、コア技術者が抜けたからと言って製品の性格が
すぐに変わる訳じゃないし、新しい製品が使い物になるのに時間がかかるって
ことはわかるよね。
時間はかかったけどmicrosoftがその技術者を活かすことが出来るような
会社だった(なった?)んだなってことを思ったってこと。
0164102
2006/03/13(月) 18:04:34遅くなりましたがレスありがとうございました。
参考にさせて頂きます。
0165デフォルトの名無しさん
2006/03/13(月) 22:57:33なに急にえらそうになってるの?
0166デフォルトの名無しさん
2006/03/13(月) 23:20:41って試してみた人いる?これまでSendMessage APIとか使うしか
なかった、アプリ間のデータのやり取りに使えるんだろうか。
0167デフォルトの名無しさん
2006/03/13(月) 23:26:310168デフォルトの名無しさん
2006/03/13(月) 23:37:17ファイヤーウォールとか空きポートとか気にしなくていいからいいかんじでっせ。
0169デフォルトの名無しさん
2006/03/13(月) 23:38:100170デフォルトの名無しさん
2006/03/14(火) 04:42:17ウィンドウが重なると後ろに隠れてしまうのですが、
TopMostを使うと常に一番前にきてしまいます。
細かい位置調整する手段はあるのでしょうか?
0171デフォルトの名無しさん
2006/03/14(火) 04:44:340173デフォルトの名無しさん
2006/03/14(火) 09:28:17プロジェクトの新規作成で、Windowsアプリケーションを選択すると
フォームのみが表示される雛型が作成されますが、自分で作成したクラスから
このフォーム Form1 に対するアクセスはどうしたら良いんでしょう?
自動作成されるProgram.csのApplication.Run(new Form1());の部分で
フォームが作成されると思うのですが、この部分が
Form1 form = new Form1();
のようになっていれば、インスタンス form を介してフォームにアクセスできる
はずですが、自動作成された部分の
Application.Run(new Form1());
だと、インスタンスはどうなってるんでしょう?
長くなりましたが要は、自作クラスからフォーム及びそのフォームに貼り付けられた
コンポーネントにアクセスするには、どのようにすれば良いですか?
0174デフォルトの名無しさん
2006/03/14(火) 09:49:23が、それは Main の中でやらなきゃいけないことなのか?
つか初めてならコンソールで Hello world から……
0175デフォルトの名無しさん
2006/03/14(火) 10:14:15> Application.Run(new Form1());
このコードを、よーーーーーく目を凝らして見てみなさい
きっと何かが見えてくるから
ヒントは君が書いた
> インスタンスはどうなってるんでしょう?
だよ
がんばってね☆
0176デフォルトの名無しさん
2006/03/14(火) 10:20:42> 長くなりましたが要は、自作クラスからフォーム及びそのフォームに貼り付けられた
> コンポーネントにアクセスするには、どのようにすれば良いですか?
フォームもクラスです
クラス間のインタフェースの取り方はC#の基礎です
つまり、基礎が欠落しているため、何を説明されても理解できないでしょう
コードを直接提示されても、コードに対する疑問が湧くだけです
まず、C#の言語の基礎を勉強しましょう
今回のはアクセス修飾子を理解してないから「コンポーネントにアクセス」する方法が理解できないのです
また、自動生成されたコードの流れもしっかり読んで、どういう制御構造にすべきか理解しましょう
0177デフォルトの名無しさん
2006/03/14(火) 10:32:260178デフォルトの名無しさん
2006/03/14(火) 10:32:58以前はVB6だったのかな?
Run(new Form1);はForm1 form = new Form1(); Run(form);を縮めただけ。
int a = b + c; Debug.Write(a);をDebug.Write(b + c);にしたのと一緒です。
インスタンスは作ったけど、それを参照する変数を用意してないということ。
だから
class MyClass{//詰め込んで書いてます
private Form1 form1;
public MyClass(Form1 form1){this.form1 = form1;}
public Form1 form1{get{return this.form1;}}
}
ってして、
MyClass myClass1 = new MyClass1(new Form1);
Application.Run(myClass1.Form1);
とでもするのが一案。やりかたはいろいろあります。
フォームに貼ったコンポーネントは既定でprivateなのでそのままでは×。
VB同様internalに変更することもできるが、プロパティを使おう。
class Form1 : Form{
internal decimal Hoge{get{return this.textBoxHoge.Text;}set{this.textBoxHoge.Text = value;}}
}
class MyClass{
...
Debug.Write(this.form1.Hoge);
...
}
0179デフォルトの名無しさん
2006/03/14(火) 10:34:33まあ、ここみたほうが早い
http://www.microsoft.com/japan/msdn/net/books/ProgWinCsharp/chapter2.asp
0180デフォルトの名無しさん
2006/03/14(火) 10:35:430181デフォルトの名無しさん
2006/03/14(火) 10:36:26177=179=180ッス
0182デフォルトの名無しさん
2006/03/15(水) 14:41:27'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
public static string ToHexString(byte[] bytes) {
char[] chars = new char[bytes.Length * 2];
for (int i = 0; i < bytes.Length; i++) {
int b = bytes[i];
chars[i * 2] = hexDigits[b >> 4];
chars[i * 2 + 1] = hexDigits[b & 0xF];
}
return new string(chars);
}
バイト列を16進の文字列に変換したいのですが
この処理標準ライブラリだとなんというメソッドですか?
0183デフォルトの名無しさん
2006/03/15(水) 14:50:541バイトだけならこんな感じで
byte a = 11;
textBox1.Text = a.ToString("X2");
0184デフォルトの名無しさん
2006/03/15(水) 15:05:08.NET Framework 1.1でButtonを使用すると左クリックでしか押下
状態になりませんよね?
これを右クリックでも押下状態にしたいのですが、マウスイベントから
自前でガリガリ組むしか手はないのでしょうか?
MFCでいうSetState()的なものが見つからないのです・・・。
0185デフォルトの名無しさん
2006/03/15(水) 15:05:450186デフォルトの名無しさん
2006/03/15(水) 16:38:22これをファイルに保存できるようにしようと思って、XmlSerializerで
保存するようにしました。ですがこのクラス、終了時に「変更されています。
保存しますか?」と聞けるように、何かプロパティを変更したらSavedプロパティ
というのをfalseにするようにしてるんですが、デシリアライズ時にも
プロパティ変更とみなされてSaved == falseになるので、ファイルを開いて
何もせずに終了させても「保存しますか?」と聞かれてしまいます。
Savedプロパティを書き込み可能にするとなにか気持ち悪いので、ほかに
どう回避したらいいでしょう。
0187デフォルトの名無しさん
2006/03/15(水) 17:00:060188デフォルトの名無しさん
2006/03/15(水) 23:17:47シリアライズ、デシリアライズするメンバをそのクラスに持たせればいいんじゃね?
0189デフォルトの名無しさん
2006/03/15(水) 23:25:23public virtual int Value { get.. }
}
このBaseのソースがないとして
Base.Value に新しい属性を追加したいとき
class Ext : Base {
[SomeAttribute]
public override int Value { get.. }
}
って風にサブクラス作る以外に方法はありませんか?
0190デフォルトの名無しさん
2006/03/15(水) 23:28:18クラスで一意なのが属性
0191デフォルトの名無しさん
2006/03/15(水) 23:39:520192デフォルトの名無しさん
2006/03/16(木) 00:16:21staticメンバで自分の永続化オブジェクトを呼び出す(ロード)メソッドを作成し、そこでprivateのsaved変数をFalseにする。
ってどう?
0193デフォルトの名無しさん
2006/03/16(木) 10:33:05あーなるほど、今ちょっと試したんですが
同じクラスの中ならstaticメソッドの中でインスタンスメンバを
覗けるんですね。いけるかどうかやってみます。
0194デフォルトの名無しさん
2006/03/16(木) 14:16:28関係ありますか?
エクスプローラのツールバー作ってるんですが、
コントロールのAllowDrop = trueにして実装すると
なんかexplorerのプロセスが終了しないで残るんです。
OLEのほうでIDropTarget実装して、終了時にRevokeDragDropしたら
きちんと終了するようになったんですが、これと同じようなことを
マネージドでできないのかと思いまして
0195デフォルトの名無しさん
2006/03/16(木) 16:06:530196デフォルトの名無しさん
2006/03/16(木) 16:15:280197デフォルトの名無しさん
2006/03/16(木) 16:45:550198デフォルトの名無しさん
2006/03/16(木) 16:56:48Enodingでバイト配列にしてMarshal.Copyとか。
0199194
2006/03/16(木) 17:24:07で、どっちにしろexplorerのプロセスが終了してないことに気づきました。
どなたか理由の思いつく方いらっしゃいませんか?
0200デフォルトの名無しさん
2006/03/16(木) 18:01:35StringToHGlobalAnsi/Auto/Uni、あるいは、StringToCoTaskMemXXX か。
GCHandle.AddrOfPinnedObject() って手もあるけど、こっちは面倒だな。
0201デフォルトの名無しさん
2006/03/16(木) 18:04:42> StringToHGlobalAnsi/Auto/Uni、あるいは、StringToCoTaskMemXXX か。
既存のポインタに書き込むにはどうにもならない。
コピーするにも変換後のバイト数が判らない。
0202デフォルトの名無しさん
2006/03/16(木) 18:11:42あ、そういうことなの?
じゃ、俺は RtlMoveMemory() でいいや。Marshal.Copy と変わらんけどw
0203デフォルトの名無しさん
2006/03/16(木) 19:29:55MDSN に(例えば OnLoad には)
> OnLoad メソッドを使用すると、デリゲートを結び付けずに、
> 派生クラスでイベントを処理することもできます。
> 派生クラスでイベントを処理する場合は、この手法をお勧めします。
と書かれてるんだ。
どうすれば良いと思う?
0204デフォルトの名無しさん
2006/03/16(木) 19:33:050205デフォルトの名無しさん
2006/03/16(木) 19:44:48仕様の通りに実装すれば良いとおもう。
派生元の処理も行うタイなら base 呼び出せばよいし、
(オーバーライドしないときと同様に)イベントハンドラを呼び出したいなら呼び出せばいいし、
イベントハンドラを呼び出したくないなら呼び出さなければ良いし。
0206デフォルトの名無しさん
2006/03/17(金) 00:35:03だれだよ
0207デフォルトの名無しさん
2006/03/17(金) 01:25:03Onを抜いただけになってるのってきもくない?
ClosedとかNavigatedとか。普通のメソッドと混同しそう。
自分でイベント定義するときはHogeEventとかにしてるのだが。
0208デフォルトの名無しさん
2006/03/17(金) 01:28:450209デフォルトの名無しさん
2006/03/17(金) 01:33:590210デフォルトの名無しさん
2006/03/17(金) 01:45:550211デフォルトの名無しさん
2006/03/17(金) 02:01:28LoadとかInitとかがイベントなのがきもい。
0212デフォルトの名無しさん
2006/03/17(金) 02:12:47Onついてるメソッドって動詞じゃないじゃん。
副詞句みたいなもの
0213デフォルトの名無しさん
2006/03/17(金) 02:15:37そんな「日本なのに左ハンドルの車とかきもい」的なことを言われても困る。
0214デフォルトの名無しさん
2006/03/17(金) 03:04:32LoadやらInitやらは過去からの流れもあるしな。
むしろ他のイベントに気持ち悪い名前が多い。
0215デフォルトの名無しさん
2006/03/17(金) 09:34:33どうやらその手で大丈夫そうです。かなり悩んでたんですがエレガントに
解決しました。お礼に歌いたい気分です。
0216デフォルトの名無しさん
2006/03/17(金) 12:28:45「ダイナマイトが150トン」きぼん
0217デフォルトの名無しさん
2006/03/17(金) 12:39:19ファイルが切り取りされているかコピーされているかはどう判断すればよいのでしょうか。
ドラッグ&ドロップならDragDropEffectsで判断できるのですが。
0218デフォルトの名無しさん
2006/03/17(金) 12:56:22Clipboard.GetDataObject().GetData("Preferred DropEffect")
をMemoryStreamにしてBinaryReaderなりBitConverterなりでInt32に変換。
DragDropEffectsにキャスト。
0220デフォルトの名無しさん
2006/03/17(金) 16:12:07SetWindowsHookExにフックして、とりあえず実現はできたのですが、
ジェスチャー終了後に、コンテキストメニューが表示されてしまいます。
コンテキストメニューを抑止することはできないのでしょうか?
0221デフォルトの名無しさん
2006/03/17(金) 16:59:12WM_RBUTTONUP のときに true 返せばメニューを表示しない。
0222デフォルトの名無しさん
2006/03/17(金) 18:21:48thx、出来たよ。
0223デフォルトの名無しさん
2006/03/18(土) 04:51:160224http://www.vector.co.jp/soft/win95/util/se072729.html
2006/03/18(土) 19:38:58もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?
0225デフォルトの名無しさん
2006/03/18(土) 19:48:39死ね
0226デフォルトの名無しさん
2006/03/19(日) 17:06:430227デフォルトの名無しさん
2006/03/19(日) 17:11:410228デフォルトの名無しさん
2006/03/19(日) 17:16:41IsNullOrEmptyって一見便利そうだけど、
たいていの場合、「空白のみの文字列」も除きたいから、
あまり使う場面はなさそうだね。
0229デフォルトの名無しさん
2006/03/19(日) 17:22:43私は空白のみからなる文字列を除きたいと思ったことは今のところ無いしなー。
NullOrEmpty以上となると空白のみ文字列以外にも除く文字/文字列が出てくることばっかりだ。
0230デフォルトの名無しさん
2006/03/19(日) 18:57:18さらにtryで囲む。さすがに" "とか返してくるやつはみたことない。
0231デフォルトの名無しさん
2006/03/19(日) 19:13:20イベント発動メソッド。
0232デフォルトの名無しさん
2006/03/19(日) 19:48:18ページが切り替わるときに出る音を消したいのですが良い方法ありませんか?
0233デフォルトの名無しさん
2006/03/19(日) 20:29:24さらにTryで囲むって・・・ 作ったメソッドの仕様をしっかり把握するべきでは
関係ないけどC#覚えたての人って無駄にTryCatchする人多くない?制御文の代わりに使ってみたり
この前、Gotoの代わりに使ってるのみて凹んだ
0234デフォルトの名無しさん
2006/03/19(日) 20:29:40サウンドとオーディオデバイス
サウンド
エクスプローラ
ナビゲーション開始
0235デフォルトの名無しさん
2006/03/19(日) 20:39:54提供されていないのでしょうか?ドッキングやフローティングの機能が
使いやすくて。
0236デフォルトの名無しさん
2006/03/19(日) 20:43:01よくしらないけどStrip系のやつじゃないの?
0237デフォルトの名無しさん
2006/03/19(日) 20:51:490238デフォルトの名無しさん
2006/03/19(日) 20:52:330239デフォルトの名無しさん
2006/03/19(日) 20:56:13そういう要望が結構あるが複雑すぎるので提供しないそーです。
0240デフォルトの名無しさん
2006/03/19(日) 20:59:220241デフォルトの名無しさん
2006/03/19(日) 21:02:46public struct STRUCT {
public ushort[] wszTitle;
}
のwszTitleにSystem.Stringをコピーするにはどうしますか?
cからみるとwszTitleは
WCHAR wszTitle[256];
です。
0242デフォルトの名無しさん
2006/03/19(日) 21:07:44あれは便利なんでいつか整理してコンポーネントにしてほしいよなぁ〜
0243デフォルトの名無しさん
2006/03/19(日) 21:08:090244デフォルトの名無しさん
2006/03/19(日) 21:51:430245デフォルトの名無しさん
2006/03/19(日) 22:07:45なるほど、ありがとうございます。
0246デフォルトの名無しさん
2006/03/19(日) 22:32:40http://dobon.net/vb/dotnet/links/dockingwindow.html
類似品ならあるみたいだよ。
0247デフォルトの名無しさん
2006/03/19(日) 23:01:37先頭に入れたい場合はどうすればいいのでしょうか?
0248デフォルトの名無しさん
2006/03/19(日) 23:05:05ListViewItemCollection には Insert というメソッドがある。
0249デフォルトの名無しさん
2006/03/19(日) 23:12:47ありがとうございました。
0250デフォルトの名無しさん
2006/03/20(月) 01:36:41いや、寧ろ逆に感じる。
C#は例外に対して緩いから、それを使うプログラマも例外に対して無頓着。
投げないのは勿論、捕捉もしないから、例外が出ると即落ちる。
当然、テストには[ExpectedException(...)]は出てこない。
Javaだと例外をどう扱うか定義しないとコンパイルすら通らないから、否応
なく最低限の対応(catch(Exception)やthrow Exceptionを含むw)が見られ
るけど、C#ではそれすらない者が驚くほど多い。
0251デフォルトの名無しさん
2006/03/20(月) 02:42:54やたらTryCatchするのはDelphi出身者。
0252デフォルトの名無しさん
2006/03/20(月) 03:01:37確かに、言われてみればDelphi出身者には>>233の傾向が見られるな。
Abort投げてファイナリーへジャンプとか、そりゃ形を変えたgotoだみたいなw
0253デフォルトの名無しさん
2006/03/20(月) 04:45:250254デフォルトの名無しさん
2006/03/20(月) 05:08:20<exception>タグにないExceptionがテスト時にきたら、そこの担当者を問い詰める
try{hoge();}catch{}なんて書いたらバグ発見できなくない?
最上位ではCatchするようにしているけど
ところで>>250はDelphi出身者ですか?
ちなみに私はJava出身者
0255デフォルトの名無しさん
2006/03/20(月) 08:25:29そ、その例外くらい知ってるんだからね!って。
0256デフォルトの名無しさん
2006/03/20(月) 08:35:39キャッチしてなんらかの対処をしてプログラムの実行を継続できるのなら
キャッチすべし。
だからJavaのような例外の扱いは、ある意味無責任
0257デフォルトの名無しさん
2006/03/20(月) 09:58:40利用側コードの修正も強要されるのが嫌で throws は採用しなかったのよね?
0258デフォルトの名無しさん
2006/03/20(月) 10:00:29実質的な意味をなさないことが多かったからとも聞いたぞ
0259デフォルトの名無しさん
2006/03/20(月) 12:24:220260デフォルトの名無しさん
2006/03/20(月) 12:42:34catch {}
ってされるだけだからそうしなかったって
あんだーすがゆってた
0261デフォルトの名無しさん
2006/03/20(月) 13:05:05最上位でキャッチして何するの?エラーが出ましたって表示しておしまい?
だったらvoid mainにthrows Exceptionて書いとけ、同じ事だ。
>>256
リカバーできなくても原因を詳細化できるならcatch-throwsというイディオムを使う
べき例えば、catch(NullPointerException) throws new InvalidArgumentの様に?
ただ、本当にどうにもならない例外というのも確かにあるにはある。
この辺はJ2EEパターンで出てくるRuntimeExceptionを標準として利用する方法や
アダプタパターンを利用してExceptionをcatchしてthrows RuntimeExceptionする
方法なんかがある(全部Javaの言語仕様内で実現可能)。
>>257
例外はパブリックなメソッドと同じくインターフェイス(≠interface)なんだよ。
だからそれを変更するには当然コストが掛かる。
これで何度か痛い目をみると設計レスで指先コーディングする悪い癖が抜けるw
0262デフォルトの名無しさん
2006/03/20(月) 13:29:220263デフォルトの名無しさん
2006/03/20(月) 14:12:22MouseUpの時のメッセージがよく分かりません。。。
ちなみにMouseDownはMessage構造体のWParamから取得しました。
ご存知の方いらっしゃいましたら宜しくお願いします。
0264デフォルトの名無しさん
2006/03/20(月) 14:18:39まあこんなのもあるようだが。
ttp://homepage1.nifty.com/yasunari/VB/VB2005/WebBrowserMouseDownEvent.htm
0265256
2006/03/20(月) 15:24:07> リカバーできなくても原因を詳細化できるならcatch-throwsというイディオムを使う
それは開発者にとって都合がいいからでそ?
漏れが言いたいのは、ユーザーが何ら対処できないような例外が発生しうる処理のところで
キャッチするべきではないということ。
代わりにMain()の中で、最終的にキャッチされなかった例外を処理するイベントハンドラを設定すればいい。
0266デフォルトの名無しさん
2006/03/20(月) 17:05:000267デフォルトの名無しさん
2006/03/20(月) 17:32:48あんまりキャッチする事はない。
例外が出る事が分かっててその場で処理するならキャッチするが、
それもそんなに多くはない。
0268デフォルトの名無しさん
2006/03/20(月) 18:29:36ないでしょうか?s[0]でs.num0を返すといった具合にしたいのですが。
0269デフォルトの名無しさん
2006/03/20(月) 18:34:430270デフォルトの名無しさん
2006/03/20(月) 18:42:18内部に配列を持たずインデクサの実装をしようとするとifかswitch
を用いて泥臭く書き連ねていかねばなりませんから、
よりスマートな方法があればご教授頂きたいということです。
0271デフォルトの名無しさん
2006/03/20(月) 18:44:49それがスマートとは思わないけど。
0272デフォルトの名無しさん
2006/03/20(月) 18:50:530273デフォルトの名無しさん
2006/03/20(月) 19:05:04Mapというのは知らないのですがコレクションのことでしょうか?
やはり条件分岐させていくしかないのかな。
構造体にインデクサくっつけようと思っただけなのですが。
0274デフォルトの名無しさん
2006/03/20(月) 19:42:13なんで構造体なの?
0275デフォルトの名無しさん
2006/03/20(月) 19:58:50DateTimeのような用途を想定しており、hashのkeyに用いたり
比較を行わせるときに、構造体だと都合がよいので使っています。
クラスでも演算子やGetHashCodeをoverrideすれば同じようですが。
0276デフォルトの名無しさん
2006/03/20(月) 20:19:10struct SDate {
int data[3];
public int Year {
get { return data[0]; }
put { data[0] = value; }
}
...
}
みたいな感じで。
0277デフォルトの名無しさん
2006/03/20(月) 20:20:160278デフォルトの名無しさん
2006/03/20(月) 20:26:01値によって一意ではなくなります。
0279デフォルトの名無しさん
2006/03/20(月) 23:30:21kwsk
0280デフォルトの名無しさん
2006/03/21(火) 02:09:01ファイルをFileStreamを使用して開こうとしたところ
他プロセスが使用しているため例外が発生しました。
問題解決の判別のため、まず、
当該ファイルをどのプロセスが使用しているのか知りたいときは
みなさんどうしていますか。プロセス名とかがわかればいいのですが……。
0281デフォルトの名無しさん
2006/03/21(火) 02:20:170282デフォルトの名無しさん
2006/03/21(火) 05:52:45FileStream.Close()できちんとファイルをクローズしても
…しばらく待たないと例外がでることがあるよw
0283デフォルトの名無しさん
2006/03/21(火) 13:19:42Process Explorerを使う
http://www.sysinternals.com/Utilities/ProcessExplorer.html
0284デフォルトの名無しさん
2006/03/21(火) 13:54:410285デフォルトの名無しさん
2006/03/21(火) 14:38:380286デフォルトの名無しさん
2006/03/21(火) 17:24:12引っかかるところはvisual C#.net逆引き大全 500の極意でやってるんだが、
もっと洗練されたプログラミングをつくりたいという目的に適した本は何かない?
0287デフォルトの名無しさん
2006/03/21(火) 18:40:13Type型変数を読み込むより時間がかかりますか?
もしそうなら何故Object型はType型のメンバを持たないの?
0288デフォルトの名無しさん
2006/03/21(火) 18:55:350289デフォルトの名無しさん
2006/03/21(火) 19:51:44※ま、Box化したときだけ持つなんて方法もあるっちゃあるかも知れんけど。
0290デフォルトの名無しさん
2006/03/21(火) 21:53:35IntのインスタンスがMaxValueとかフィールドとして持ってるようなもの?
0292デフォルトの名無しさん
2006/03/22(水) 14:35:32application/x-www-form-urlencoded と要領は一緒なのかと思ったのですが、
何かやるべき処理に違いがあるのでしょうか?
System.Text.Encoding enc = System.Text.Encoding.GetEncoding( "EUC-JP");
System.String PostUrl = "http://www.microsoft.com/post.cgi";
System.String param = "";
System.Collections.Hashtable PostTable = new System.Collections.Hashtable();
PostTable [ "hoge1" ] = System.Web.HttpUtility.UrlEncode( "hoge1", enc );
PostTable [ "hoge2" ] = System.Web.HttpUtility.UrlEncode( "hoge2", enc );
foreach( string key in PostTable.Keys ) {
param += String.Format( "{0}={1}&", key, PostTable [ key ] );
}
byte [] data = System.Text.Encoding.ASCII.GetBytes( param );
// リクエスト
System.Net.HttpWebRequest Request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create( PostUrl );
Request.Method = "POST";
Request.ContentType = "multipart/form-data";
Request.ContentLength = data.Length;
Request.Timeout = 30000;
// ポストデータ
System.IO.Stream RequestStream = Request.GetRequestStream();
RequestStream.Write( data, 0, data.Length );
RequestStream.Close();
// レスポンス
System.Net.WebResponse Responce = Request.GetResponse();
System.IO.Stream ResponceStream = Responce.GetResponseStream();
0293デフォルトの名無しさん
2006/03/22(水) 14:38:120294デフォルトの名無しさん
2006/03/22(水) 15:09:30>application/x-www-form-urlencoded と要領は一緒なのかと思ったのですが、
むしろ一緒の部分は殆ど無い。
ちゃんとmultipart/form-dataの形式でデータをPOSTするべし。
0295デフォルトの名無しさん
2006/03/22(水) 18:44:16マウスがあるボタンの上にあったら
別のピクチャーボックスにそのボタンの画を表示するという機能を実現したいのですけれども…
どなたかヒントを。
0296デフォルトの名無しさん
2006/03/22(水) 20:02:45XPスタイルのボタンは描画できんのかな・・・
0297デフォルトの名無しさん
2006/03/22(水) 20:09:30こっちを応用してハードコピーを取る手もあるが
0298デフォルトの名無しさん
2006/03/22(水) 20:23:24デバイスコンテキスト経由でDDBを転送すればいいんじゃねーの?
.NET的なやり方はシラネ
0299デフォルトの名無しさん
2006/03/23(木) 00:05:45MenuItemはイベントハンドラまで含めてCloneできるので便利だったんですが
0300デフォルトの名無しさん
2006/03/23(木) 00:50:410301デフォルトの名無しさん
2006/03/23(木) 11:54:29DrawToBitmap() は?
0302デフォルトの名無しさん
2006/03/24(金) 03:15:160303デフォルトの名無しさん
2006/03/24(金) 10:50:53DataTableに関連づけたDataGridを
使っているのですが
DataGridTableStyleを使うと、5〜10秒ほど
一時的にアプリケーションが無反応になります。
起動後、数回目の操作でこれが起き、
一度起こると起動終了まで起きないようです。
何かヒントになるものはないでしょうか?
よろしくお願いします。
0304デフォルトの名無しさん
2006/03/24(金) 16:28:170305デフォルトの名無しさん
2006/03/24(金) 16:36:35┃* 「さんこうしょは りかいしないといみがないよ! ┃
┃ ▼┃
┗━━━━━━━━━━━━━━━━━━━━━━┛
0306デフォルトの名無しさん
2006/03/24(金) 17:28:280307デフォルトの名無しさん
2006/03/24(金) 18:05:59つ【ヘルプ】
0308デフォルトの名無しさん
2006/03/24(金) 18:19:160309デフォルトの名無しさん
2006/03/24(金) 19:36:510310デフォルトの名無しさん
2006/03/24(金) 19:42:01・C#によるぷろぐらみんぐWindows
・デザパタ
・パターン嗜好リファクタリング
・ModernC++Designe
この辺は結構よかった。ほかにもあるけど。
0311デフォルトの名無しさん
2006/03/24(金) 21:24:37IDEのデバッグモードでだけ発生したりしないか?
0312デフォルトの名無しさん
2006/03/24(金) 21:41:03おおなんと!
Debugに限らずReleaseもですが、
確かにIDE上で実行したときだけ発生し、
BuildしたEXEを単体で実行したときは
発生しません。
なんでなんでしょね?
0313デフォルトの名無しさん
2006/03/24(金) 21:46:24まあ、デバッガも頑張ってるんだ。
0314デフォルトの名無しさん
2006/03/24(金) 21:47:16たぶんいろんなアセンブリがそこでロードされて、IDE がシンボル探し回るから。
デバグウィンドウの「出力(だっけ?)」とか見てれば様子わかると思う。
0315デフォルトの名無しさん
2006/03/25(土) 01:03:370,0に指定してもうまくいかないから、何かが悪さしてるのかと思って
最大化ボタン無しにしたりとか、あれこれ試したけど、小さな
ウインドウが表示されちゃうんだけど。
0316デフォルトの名無しさん
2006/03/25(土) 01:07:05Windowsの仕様で作れなかった気がす
つか、非表示にすればいいんちゃいますか
0317デフォルトの名無しさん
2006/03/25(土) 03:14:31そこまで来たらあと一歩だ。最近は透明化機能なんて普通に付いてるから
Opacityプロパティを0にすればまったく映らなくなるし、0のときはクリックも
できなくなる。表示していないのとおんなじだ!
まあ、これでいいならフォームのサイズ自体はなんでもいいんだけどな。
0318デフォルトの名無しさん
2006/03/25(土) 13:54:43デスクトップに文字列を書き込むような効果に利用したいんですけど。
(Win32使ってデスクトップに書き込むのはあんまりやりたくない)
0319デフォルトの名無しさん
2006/03/25(土) 13:58:130320デフォルトの名無しさん
2006/03/25(土) 21:01:250321デフォルトの名無しさん
2006/03/25(土) 21:51:18似たようなソフト作ったことあるけど、
そのままだと、文字部分(色ついた部分)がイベント透過しないよ
速度も遅かったり色々あったんで、
結局ULWとWS_EX_TRANSPARENT|WS_EX_LAYERED使って自前で処理した
0322デフォルトの名無しさん
2006/03/26(日) 00:45:49レイヤード ウィンドウを検索するなどして調べましたが
Form上でイベントをまったくスルーしてしまう方法がよくわかりません
どのようにWndProcをオーバライドすればスルーできるのでしょうか?
0323デフォルトの名無しさん
2006/03/26(日) 01:18:380324デフォルトの名無しさん
2006/03/26(日) 04:01:42WndProcをオーバーライドって時点で何か方向が間違ってる気がするんだが・・・
来たイベントを自分の下のウインドウに自前で渡そうとか考えてる?
WS_EX_TRANSPARENT|WS_EX_LAYEREDの事だったら、CreateParamsでヘルプ見れ
0325デフォルトの名無しさん
2006/03/26(日) 10:18:15キャストしてアドレスを渡すんですがC#だとどうすればいい?
mciSendStringはサンプルで一杯あったんだけどmciSendCommandがほとんどなかった。
0326デフォルトの名無しさん
2006/03/26(日) 10:34:32ヘルプを見ずに答えると、最後の引数を 「ref 構造体」 で定義しておけばよさげ。
型が変わるケースがあるならオーバーロードで。
複数の定義をするのが面倒なら、StructureToPtr で IntPtr にして、それを int にして
渡せばいいんでね?
0327デフォルトの名無しさん
2006/03/26(日) 10:37:49// だれだこの関数作った奴 なんでポインタを渡すのに DWORD なんだよ LPVOID とかにしとけよ
0329デフォルトの名無しさん
2006/03/26(日) 12:49:04よくレスを見てると、一つのクラスにプログラムをダラダラ書くと
分かりづらいとか、関数ごとにできるだけクラスを作成したほうがいいとか
聞きますがどういう場合にクラスにすればいいかいまいちわかりません
例えば、FORM上のコントロールに対しての命令もわざわざクラスを作って作成したほうがいいんでしょうか?
例えば、listviewの選択されたアイテムを削除するなど・・
もしくは、FORM内のコントロールはそのFORMクラスで作成して
別ウィンドウのFORMなどは別のクラスで書くみたいに、FORMごとにプログラムを書くのがいいんでしょうか?
よろしくお願いします
197KB 549.61秒
dummy_for_searchRef
0330デフォルトの名無しさん
2006/03/26(日) 13:04:03初めて聞いた
0331デフォルトの名無しさん
2006/03/26(日) 13:13:56つ partial class
中華、「データと手続きを一体化して扱う」のが、オブジェクト指向なのでは・・・。
0332デフォルトの名無しさん
2006/03/26(日) 13:19:46> 例えば、FORM上のコントロールに対しての命令もわざわざクラスを作って作成したほうがいいんでしょうか?
> 例えば、listviewの選択されたアイテムを削除するなど・・
それを別のフォームでも利用するのなら、その部分を抜き出して別クラスにしておくようにする
> もしくは、FORM内のコントロールはそのFORMクラスで作成して
> 別ウィンドウのFORMなどは別のクラスで書くみたいに、FORMごとにプログラムを書くのがいいんでしょうか?
一般的にはこっち。
0333329
2006/03/26(日) 13:44:09自作関数ごとにクラスを作成することを推奨する旨をソフト付属の入門書に書いてたので・・
まだちゃんと理解してないです
>>331
partial classは便利な機能ですね。まだ、これを使うほど複雑なプログラムではないですが
>>332
なるほど、まだ始めたばかりなんですけど、最初の内に一般的な記述をする癖をつけて置きたいので
みなさんがどういう風に作られてるか聞けてよかったです
ありがとうございました
0334デフォルトの名無しさん
2006/03/26(日) 14:09:46でまた本読んだりして参考にすると。
0335デフォルトの名無しさん
2006/03/26(日) 14:46:45>自作関数ごとにクラスを作成することを推奨する旨をソフト付属の入門書に書いてたので・・
参考までになんの本なのか詳しく
0336デフォルトの名無しさん
2006/03/26(日) 15:20:21> それを別のフォームでも利用するのなら、その部分を抜き出して別クラスにしておくようにする
別クラスにしないで、デリゲート経由で呼び出すべき。クラス間の参照関係はゆるい方がいい。
> 作りこんでるうちに、これは別クラスにしようとか感覚つかめるよ。
作り始める前にちゃんとクラス設計するべき。
0337デフォルトの名無しさん
2006/03/26(日) 15:23:280338デフォルトの名無しさん
2006/03/26(日) 16:01:14中身がCとかじゃなくC#だとなんとなく助かるんだが。
0339デフォルトの名無しさん
2006/03/26(日) 16:05:290340デフォルトの名無しさん
2006/03/26(日) 16:09:42_ ∩
( ゚∀゚)彡 Static! Static!
⊂彡
0341デフォルトの名無しさん
2006/03/26(日) 16:14:26C++/Java関連のOOP本は選り取りみどりな上に書評も揃ってる。
C#に拘った本選びをすると、某C#のデザパタ本みたいな本をうっかり
掴んでしまいかねない。
0342デフォルトの名無しさん
2006/03/26(日) 16:15:580343329
2006/03/26(日) 16:20:28VC#2001のstanderdに付属の「今からはじめるC#」です
と、思ったのですが、今見てみると見つかりません。どこで見たんだろ・・
現在2005の無料版を使ってます
クラス設計とかデリゲートとかまだちんぷんかんぷんですが、コツコツやっていきたいと思います
小物アプリをいろいろ作ってると、コントロールに対して同じ関数を作ってたりするんです
listviewだと選択反転や選択削除などなど、よく使う関数をアプリを作るごとに以前作ったアプリのソースをコピペしたりしてて
他の人はこれらの関数を別クラスにしたり、もしくはlistviewを継承して、よく使う関数を盛り込んで独自のコントロールを作ったり
してるのかなぁ?と、まだ自作コントロールの作り方はわからないですけど・・・
やっぱりここらへんは慣れなんでしょうね
0344デフォルトの名無しさん
2006/03/26(日) 16:23:39> 掴んでしまいかねない。
これあの本だと思うが、だめなの?
0345デフォルトの名無しさん
2006/03/26(日) 16:46:49ぜひ一度手に取ってみてもらいたい。
そして、金を払う前に気付く事を祈ってる。
0346デフォルトの名無しさん
2006/03/26(日) 16:58:24MainForm内
FormMaker fm = new FormMaker();
fm.Visible = false;
FormMakerのtimer1_Tick内
if(count == 0)
{
Form1 f1 = new Form1();
f1.Visible = false;
}
if(count == 1)
{
Form2 f2 = new Form2();
f2.Visible = false;
}
以上のようなプログラムを書いたところ、
FormMakerはVisible = falseでもインスタンスが生成され動作するのですが、
Form1とForm2は動作しません。
なぜ、同じようにVisible = falseにしているのに動作しないのでしょうか。
0347デフォルトの名無しさん
2006/03/26(日) 17:02:03f1.Visible = false;
}
if(count == 1)
{
Form f2 = new Form();
f2.Visible = false;
}
0348デフォルトの名無しさん
2006/03/26(日) 18:46:32作った直後に破棄しちゃってるし。
0349デフォルトの名無しさん
2006/03/26(日) 18:49:44Form1やForm2も同様の状態にしたいのですが。
0350デフォルトの名無しさん
2006/03/26(日) 19:00:060351デフォルトの名無しさん
2006/03/26(日) 19:16:00> FormMakerだけは動いているんです。
Form1 のフィールドにおいてたり他に参照が残ってたりするんだろ。
それ以外の理由もあるかもしれんがこれだけじゃ判断できん。
0352デフォルトの名無しさん
2006/03/26(日) 19:34:08ありがとうございます。
もう少し詳しく説明します。
もともと機能ごとに分けて別々のフォームで実装したプログラムを統合したいと考え、
インタフェースだけMainFormに集約し、MainFormから全てのフォームの機能を操作出来るようにしました。
しかし、MainFormから全てのForm(5つあります)のインスタンスの同時に生成してみたらとても不安定だったので、
5秒おきに起動することにし、FormMakerというタイマー付のフォームを作成しました。
FormMakerで作成したForm1〜Form5のフォームは、生成後にMainFormに関連付けています。
しかしここで問題になったのが、MainFormを操作してForm1等のメソッドが呼ばれた際にactivateが移ってしまうということです。
なのでいっそのこと非表示にしたりタスクトレイに入れたりしてなくしてしまおうと思ったのですが、なかなかうまくいきません。
0353デフォルトの名無しさん
2006/03/26(日) 19:44:37> しかし、MainFormから全てのForm(5つあります)のインスタンスの同時に生成してみたらとても不安定だったので、
インスタンス作るだけで不安定になる環境ってどんなんだよ。単に遅いってだけだろ。
> 5秒おきに起動することにし、FormMakerというタイマー付のフォームを作成しました。
それはフォームである必要があるのか?
> FormMakerで作成したForm1〜Form5のフォームは、生成後にMainFormに関連付けています。
さっきのコードを見る限り、生成後速やかに破棄されているが。
> しかしここで問題になったのが、MainFormを操作してForm1等のメソッドが呼ばれた際にactivateが移ってしまうということです。
メソッド呼んだだけでアクティブにはならん。アクティブになるようなことをしたんだろ。
結局、MainForm は Form1 他のメソッドを使いたいだけ?
GUI 部品を使わないくて完結するようなのならそんなメソッドは別クラスにまとめるべきだが。
0354デフォルトの名無しさん
2006/03/26(日) 20:12:540355デフォルトの名無しさん
2006/03/26(日) 20:13:350356デフォルトの名無しさん
2006/03/26(日) 20:16:42いや、してるし
0357デフォルトの名無しさん
2006/03/26(日) 20:17:060358デフォルトの名無しさん
2006/03/26(日) 22:42:25基礎からやり直せ
アルゴリズム入門 : 第 1 章 Visual C# による文字列処理入門
http://www.microsoft.com/japan/msdn/academic/Articles/Algorithm/01/
0359デフォルトの名無しさん
2006/03/27(月) 07:10:03+=,-=しか使えないとエラーメッセージがでますが、継承クラスから
nullチェックやハンドラ呼び出しできないのは不便なように思うのですが。
0360デフォルトの名無しさん
2006/03/27(月) 10:06:32その派生クラスが勝手に TextChanged を呼び出した。Text は変わっていない。
さて、更にその派生クラスを作って、TextChanged にハンドラを引っかける。当然 Text が変わっていることを期待するが……。
TextChanged くらいならまだしも、HandleCreated とかはなお厄介だ。
0361デフォルトの名無しさん
2006/03/27(月) 10:12:290362デフォルトの名無しさん
2006/03/27(月) 10:28:22何のための軽症だよ。
0363デフォルトの名無しさん
2006/03/27(月) 11:16:27親プロセスを終了させると IE も終了してしまうという問題で悩んでいます。
IEがすでに起動している状態の場合は explorer の子として動いている IE 上に
表示されるので消えないですが、未起動状態から IE を起動すると、
C#プロセスの直接の子プロセスとして起動してしまうため発生しています。
どうすればよいでしょうか?
0364デフォルトの名無しさん
2006/03/27(月) 11:24:350365デフォルトの名無しさん
2006/03/27(月) 12:00:250366デフォルトの名無しさん
2006/03/27(月) 12:11:14親プロセス終了させても普通子プロセスまで終了はしないような……?
Process.Start が静的メソッドだとして、返値の Process インスタンスを Dispose したらどうなる?
0367デフォルトの名無しさん
2006/03/27(月) 12:32:18Form2にあるtextBox.textの内容をForm2のメソッドからForm1に渡したいんだけどどうすればいいかな?
0368デフォルトの名無しさん
2006/03/27(月) 12:37:03Form2 はモーダル?モードレス?
Form2 のメソッドってことは Form2 は表示させっぱなし?
0369367
2006/03/27(月) 12:42:03frm2.showDialog(this);
↑これはモーダルかな?
この記述をForm1に書いてます
で、frm2でファイル名や検索文字などを入力してもらって
frm2の検索ボタンや作成ボタンを押すとfrm2は閉じて
Form1の処理にもどり、frm2のテキストボックスの内容を元にファイル作成したり検索したりしたんです
0370デフォルトの名無しさん
2006/03/27(月) 12:47:26Form2 は textBox.Text を string のプロパティとして公開する。
Form1 は Form2 から返ってきた後、そのプロパティを参照する。
0371デフォルトの名無しさん
2006/03/27(月) 12:48:140372367
2006/03/27(月) 13:15:27public string str="";
を作ることでform2が閉じた後もstrを見ることができました!
アリガト!(´▽`)
でも、form2が閉じたのに
Form1からForm2のフィールドが見れるのはなぜ?
0373デフォルトの名無しさん
2006/03/27(月) 13:17:10public string ファイル名
{
get{return this.textBox.Text;}
set{this.textBox.Text = value;}
}
}
class Form1{
void hoge(){
Form2 form2 = new Form2();
form2.ファイル名 = "既定値";
DialogResult result = form2.ShowDialog(this);
if (result != DialogResult.OK)return;
Debug.WriteLine(form2.ファイル名 + "だクマ");
form2.Dispose();
}
}
0374367
2006/03/27(月) 13:25:52あ、フィールドでこんな風に読み込んでたけど
class Form1{
string str=form2.ファイル名
}
プロパティだと戻り値みたいに取得できるんですね
なるほど、openFileDialogとかMessageBox.Showとかと同じような使い方ができるんですね
ありがとう
0375デフォルトの名無しさん
2006/03/27(月) 13:38:28result != DialogResult.OKのときにDisposeしてないのはいかがなものか
0376デフォルトの名無しさん
2006/03/27(月) 13:42:48String.PadLeftしたのですがスペース、英数字、漢字が混ざっているとうまく右寄せになってくれなくて。
0377363
2006/03/27(月) 14:01:58ちなみに URL を指定した場合は Start() で Process オブジェクトは帰ってこず(null)。
で、とりあえず Start("explorer", url) とすることで、何とか自分の直接の子では無い形で
IE が起動できましたが…。
0378デフォルトの名無しさん
2006/03/27(月) 14:03:15ちっとは探せ。
ttp://www.google.com/search?num=100&hl=ja&lr=lang_ja&oe=utf8&q=listbox+%E5%8F%B3%E5%AF%84%E3%81%9B
0379デフォルトの名無しさん
2006/03/27(月) 14:03:33次回起動後にまたDateTimeに変換したいのですが、
一般的な方法やおすすめの方法はあるでしょうか?
今は無理やりファイルの文字列をパースしてセットしています。
0381デフォルトの名無しさん
2006/03/27(月) 14:07:39DateTime.ToString と DateTime.Parse/ParseExact でもいいし、
DateTimeConverter 使っても良いし、
XmlSerializer 使っても良いし。
0382デフォルトの名無しさん
2006/03/27(月) 14:11:590383デフォルトの名無しさん
2006/03/27(月) 14:12:350384デフォルトの名無しさん
2006/03/27(月) 14:13:46どんまい
しょうがないのか
0385デフォルトの名無しさん
2006/03/27(月) 14:16:11だといいな・・・orz
0386デフォルトの名無しさん
2006/03/27(月) 14:16:46調べてみます。
0387デフォルトの名無しさん
2006/03/27(月) 15:59:330388デフォルトの名無しさん
2006/03/27(月) 16:29:440389デフォルトの名無しさん
2006/03/27(月) 19:04:47FormはDisposeしなきゃだめだったのか。
new SomeDialog().ShowDialog();
って風に書いてたわい。
0390デフォルトの名無しさん
2006/03/27(月) 19:09:090391デフォルトの名無しさん
2006/03/27(月) 19:09:12ほっといてもそのうち GC が片づけるし、
Dispose せずに GC されたらファイナライザが Dispose(false) を呼び出すだろう。
できる限り IDisposable なものは使い終わったら Dispose するのが作法だけど。
0392デフォルトの名無しさん
2006/03/27(月) 19:13:27とりあえず俺のもしておくか・・・
0393デフォルトの名無しさん
2006/03/27(月) 22:29:03「・この実装では、オブジェクトからインスタンスを要求されたときに初めて
インスタンス化が行われるため、このアプローチは "遅いインスタンス化" という特徴を持っています。
遅いインスタンス化により、アプリケーションの起動時に不要なシングルトンの初期化が行われなくなります。」
・・・日本人なんだけど、理解不能。誰か解説しる
0394デフォルトの名無しさん
2006/03/27(月) 22:43:16遅い=delayed
0395デフォルトの名無しさん
2006/03/27(月) 22:59:45理解しました。"遅いインスタンス化"を変に捕えてました
0396デフォルトの名無しさん
2006/03/28(火) 00:13:41800x600 程度のサイズのフォームの上にラベルが数個、フォームの背景画像
を指定しているのですが、特にラベル付近の描画が遅く、背景画像が、
一瞬で描画されません。
これを、フォームの描画を一瞬でさせる方法があれば教えて頂けないでしょうか?
ダブルバッファリングなども調べてみましたが、画像に画像を合成するよう
な場合は使えるかとおもったのでですが、画像だけではなく、
ラベルコントロールなども使いたいのでダブルバッファリング先の
画像にラベルコントロールで描画される内容を描画する方法がわからなくて。
他にも例えば Visible = False としたフォームにラベルや背景画像を
設定して、そのフォームを「画像」として取得でき、その画像を
描画させる、などの方法も考えたのですがそれを実現させる方法が
わからなく。
いろいろ書きましたが、いくつかのラベルと背景画像で作られる画面を
画面に描画しているサマをあらわさず、パッと表示させるよい方法が
ありましたらアドバイスください。よろしくお願いします。
0397デフォルトの名無しさん
2006/03/28(火) 01:00:11BeginUpdate
0398デフォルトの名無しさん
2006/03/28(火) 11:47:59ものもありますが、フォーム全体では対応していないですよね...
フォームの描画/再描画を停止する方法、もしくは
フォームの内容を画像として取得する方法があれば
その先はなんとかなるかもしれない、と思っています。
アドバイスよろしくお願いします。
0399デフォルトの名無しさん
2006/03/28(火) 12:53:29いつも遅いのならあまり改善の余地はないと思います。
初回の描画の話なら、必要になった時点でノロノロとアセンブリを
ロードし始めるという CLI の動作のせいだと思います。
その辺を綺麗にすばやく表示することがビジュアル的に重要であって、
コントロールの外観を自前でオフスクリーンに書く手間も惜しまないのなら、
XPExplorerBarのソースが大変参考になると思います。
0400デフォルトの名無しさん
2006/03/28(火) 17:00:40気になったので試してみたのだが、ShowDialogとShowで動作が違うのね。
ShowDialogの場合DialogResultの設定されたボタンやXボタンで抜けた場合はDisposeされていなくて、
Showの場合Xボタンで抜けた場合はDisposeされている。
当然といえば当然な仕様なんだけど、ドキュメントに明記してないと迷いそう。
0401デフォルトの名無しさん
2006/03/28(火) 17:04:46Dispose は複数回呼んでも問題ないよう設計することが求められるし。
ちなみに、Close メソッドの解説でフォローされてるけどな。> Dispose
0402デフォルトの名無しさん
2006/03/28(火) 21:57:40D:\ E:\ G:\ と順番に for で回してファイルをコピーしていくプログラムがあるとします。
シングルスレッドだと D:\ の処理が終わってから E:\ の処理に入りますが、マルチスレッドだと
同時に複数のドライブに処理が行えるという認識でいいのでしょうか?
その場合、どのように for 文の中を書くとよいでしょうか?
for (int i = (int)startDrive; i <= (int)endDrive; i++)
{
File.Copy (String, String) ;
}
0403デフォルトの名無しさん
2006/03/28(火) 22:02:56実際に同時に書けるかどうかは PC 次第だがな。
取りあえずまずシングルスレッドで動くまともなコード書け。
0404デフォルトの名無しさん
2006/03/28(火) 22:03:59非同期プログラミングのデザインパターン
ttp://www.gyao.jp/common/css/catetop.css
0405デフォルトの名無しさん
2006/03/28(火) 22:05:02ファイルをコピーするマルチスレッド用のメソッド作る
引数渡して、スレッド起動。俺だったら別途にクラス作る。
というかBackgroundWorker使え。
0406デフォルトの名無しさん
2006/03/28(火) 22:05:11ttp://msdn2.microsoft.com/ja-jp/library/ms228969.aspx
0407402
2006/03/28(火) 22:26:120408デフォルトの名無しさん
2006/03/29(水) 02:44:130409デフォルトの名無しさん
2006/03/29(水) 02:47:57>>406
0410デフォルトの名無しさん
2006/03/29(水) 03:28:21質問も初心者の質問が多かったり
やっぱり上級者というか本職にしてるひとは
ここで聞くより自分で調べたほうが早いみたいな感じなんでしょうか?
0411デフォルトの名無しさん
2006/03/29(水) 03:33:11>>31
0412デフォルトの名無しさん
2006/03/29(水) 07:57:09ListView lv1=new ListView();←これはフォームに組み込んでカラー設定してるやつ
item1.subItems.Add(str)とやってるのに
↓こっちじゃなくて
ListViewItem.ListViewSubItemCollection.Add メソッド (String)
↓のが有効になってるみたいで(Addのところにマウスポインタあわせると↓の説明が出る)
ListViewItem.ListViewSubItemCollection.Add メソッド (String, Color, Color, Font)
lv1.Items.Add(item);
とやると、カラーまでコピーされたのかlv1のカラーまで変わってしまいます
単純にデータを受け渡したいんだけどどうすればいいんでしょうか?
0413デフォルトの名無しさん
2006/03/29(水) 07:58:53lv1.Items.Add(item1);
0414デフォルトの名無しさん
2006/03/29(水) 09:02:51FormにListViewを貼ってForm_Loadで
listView1.View = View.Details;
listView1.ForeColor = Color.White;
listView1.BackColor = Color.Blue;
listView1.Columns.Add("1");
listView1.Columns.Add("2");
ListViewItem item = new ListViewItem();
item.Text = "a";
item.SubItems.Add("b");
listView1.Items.Add(item);
とやったら青地に白で表示されたが。
ちなみにオーバーロードされてるメソッドはヒントで表示されるやつが使われてるんじゃないぞ。
0415デフォルトの名無しさん
2006/03/29(水) 10:06:29// が付きますが、この行を含んだ部分をコピペすると、// が
行頭であるということで、右のほうによってしまいますよね。だったら
最初っからインデントにあわせて // を手作業でつけたほうが、と
思うんですが、複数行になるとまんどくさいです。複数行に対して
インデントにあわせて // を付けることってできませんか?2003です。
(VB.NETだとそういう動きになってるんです)
0416412
2006/03/29(水) 10:19:59フォームにバックカラーとフォントカラーを変更したListViewを追加して以下のコードを実行します
public partial class Form1 : Form
{
private void Form1_Load(object sender, EventArgs e)
{
Class1 cs1 = new Class1();
cs1.lv.Items.Add("test");
cs1.lv.Items[0].SubItems.Add("test2");
copyItems(cs1);
}
private void copyItems(Class1 cs1)
{
//↓このコードにしたのですが・・・・文字が黒でバック白になる
foreach (ListViewItem item in cs1.lv.Items)
{
this.listView1.Items.Add((ListViewItem) item.Clone());
}
}
}
class Class1
{
public ListView lv = new ListView();
}
これはいったいどういうことなんでしょうか?
>ちなみにオーバーロードされてるメソッドはヒントで表示されるやつが使われてるんじゃないぞ。
なるほど、これは原因じゃなかったんですね
0417412
2006/03/29(水) 10:22:13//↓なぜかこれだと例外が出て処理されないので
//foreach (ListViewItem item in cs1.lv.Items)
//{
// listView1.Items.Add(item);
//}
//↓このコードにしたのですが・・・・文字が黒でバック白になる
foreach (ListViewItem item in cs1.lv.Items)
{
this.listView1.Items.Add((ListViewItem) item.Clone());
}
//↓これでも同じくカラーが変わる
//foreach (ListViewItem item in cs1.lv.Items)
//{
// this.listView1.Items.Add((ListViewItem)item.Clone());
//}
//↓でこれをやると何とかできたけど、無駄に文が長くなってしまったような
//foreach (ListViewItem item in cs1.lv.Items)
//{
// ListViewItem itemC = (ListViewItem)item.Clone();
// this.listView1.Items.Add(itemC.Text);
// this.listView1.Items[this.listView1.Items.Count - 1].SubItems.Add(itemC.SubItems[1]);
//}
0418デフォルトの名無しさん
2006/03/29(水) 10:26:09マクロにやらせれば?
0419デフォルトの名無しさん
2006/03/29(水) 10:53:12CloneすればForeColorやBackColorも当然コピーされてそれが使われる。
0420デフォルトの名無しさん
2006/03/29(水) 11:00:07そもそも何故 Class1 とやらにわざわざ ListView 作ってそれに格納してるんだ?
ArrayList じゃダメなのか?
0421412
2006/03/29(水) 11:35:31同じ形式だと見た目わかりやすいと思いまして
あと、同じ操作させたい場合も便利なんじゃないかなと思ったり
今のとこはデータを保存してるだけなんですけど
データを保存するためにArrayList使うにしても、
arrayList.Add(item)
listView.items.Add(arrayList[0])
みたいな形で、結局データを取り出してListViewに表示しようとすると
色が変わってしまいますよね?
あと、上記のように、listviewのitemをそのまま格納すると、listviewの内容変更した場合
arrayListに格納しているitemも変更されてしまいますよね?
参照とかじゃなくてデータだけをコピーして格納したいんです
どうすればいいんでしょうか?
0422デフォルトの名無しさん
2006/03/29(水) 11:50:04色は変更したい(元のとは変えたい)けどSubItems は元のと同じにしたい、
ってことですよね。そんなのライブラリにないと思うので、
・Clone してから適切な色に変更する
・string を Add してから、SubItems を自前で複製する
のどっちかしかないでしょう。
後者は漏れならこうかな
foreach (ListViewItems item in lv.items)
{
ListViewItem newItem = new ListViewItem(item.Text);
newItems.SubItems = item.SubItems.Clone();
this.lv.Items.Add(newItems);
}
>参照とかじゃなくてデータだけをコピーして格納したいんです
>どうすればいいんでしょうか?
普通はデータを格納するのにListViewItemCollection なんかに頼らずに、
自前でちゃんと Class { string title; ArrayList subItems; } とか作って
ArrayList なんかに格納しておく。
0423デフォルトの名無しさん
2006/03/29(水) 11:51:21ListViewItem の各情報を設定しないまま ListView.Items.Add すると自動的に ListView での色やフォントに設定されるが、
Clone した場合は設定されてるかどうかは無関係に ForeColor ほかの各プロパティを参照してサブアイテムを構成する。
既に設定済みだから ListView.Items.Add しても色は ListView から感染しない。
ListViewItemManager クラスでも作ってそこで管理すれば良いんじゃね
0424412
2006/03/29(水) 12:19:27フォームにあるlistviewの色は変えないで
中身の文字データだけを保存したり、保存したデータを取り出して表示したかったんです
これがどうも、参照?でコピーしてるのか、フォームのリストビューを変更したら、保存先も変更されたり
うまくコピーできたと思ったら、取り出すときにカラーまでコピーされたり・・てな感じです
>普通はデータを格納するのにListViewItemCollection なんかに頼らずに
そういうものなんですか・・
データ取り出したあと、Listview形式に変換する関数も必要ってことですね
やっぱり、不必要な機能を持った自前クラスなんてのはスマートじゃないってことなんですかね?
文字保存するだけなのに、listviewの全機能を保持するなんてだめかやっぱ
いろいろ試しましたけどうまくいきませんでした。
ArrayListでがんばってやってみたいと思います。
0425412
2006/03/29(水) 12:58:13すみません。ちょっと意味がわからないです
ListView.Items.Add←こういう関数はないので・・・
listView1.items.Add(listView2のitem.Clone())
listView1は色が変わってしまうけど、listView2の色は変わらないってことですか?
item1=item2
これで文字データだけ渡してくれればいんですけどねぇ
色とかもろもろのいらないデータもコピーされてしまうので
フォームのListViewのカラーまで初期化されてしまう
items.Add(item)とするとエラー出るし
クローンすると、カラーまで移るし
結局、items.Add(String)とSubItems.Add(String)でコツコツとデータコピーしてやらないとダメってことですね
0426412
2006/03/29(水) 13:28:57コードも少なくて済みます
面倒などころかこっちのほうがわかりやすくてよかったです
でも、同じようにオブジェクトをコピーしてるだけなのに
なんでカラーはコピーされないんだろ・・参照にもなってなく値渡しできてるみたいだし
private void Form1_Load(object sender, EventArgs e)
{
Class1 cs1 = new Class1();
ListViewItem item = new ListViewItem();
item.Text = ("tesuto");
item.SubItems.Add("test2");
cs1.al.Add(item);
copyItems(cs1);
}
private void copyItems(Class1 cs1)
{
foreach (ListViewItem item in cs1.al)
{
this.listView1.Items.Add(item);
}
}
}
class Class1
{
public ArrayList al=new ArrayList();
}
みなさまありがとうございました
0427デフォルトの名無しさん
2006/03/29(水) 13:35:28例えば cl1.al[0] を二つの ListView.Items に入れようとしてみ?
0428デフォルトの名無しさん
2006/03/29(水) 13:41:22フォーム内のコントロールのリサイズってどうやってる?
VB6の時は
コントロール検出->比率保管
resizeイベント->再設定->比率保管
ってのを毎回作ってるんだが・・・
C#でも同じように毎回いるの?
this.Nurupo.Size(?,?);
を書くのがめんどくさい・・・
自動リサイズコントロールは需要あるかな?
0429デフォルトの名無しさん
2006/03/29(水) 13:47:180430デフォルトの名無しさん
2006/03/29(水) 13:50:230431412
2006/03/29(水) 13:58:18> いや、ListViewItem がクラスである以上どうしようが参照でのやりとりになるが。
オブジェクトの値渡しはできないんですか・・・知らなかった
> 例えば cl1.al[0] を二つの ListView.Items に入れようとしてみ?
エラーでました・・・がっくり・・今よろこんで本プログラムをArrayListに書き換えてたのに・・・
ってことはやっぱ文字データで渡すやるしかないのか・・・
それはさすがに面倒だなぁ・・多次元配列とか苦手・・・
0432デフォルトの名無しさん
2006/03/29(水) 14:06:42ListViewItem のコレクションクラスを CollectionBase から派生させて、
取得するときに新しく作り直せば良いじゃん。
0433412
2006/03/29(水) 14:37:13> そもそも ListViewItem を複数の ListView から参照することなぞまずないと思うんだがな。
複数の保存したデータをフォームのリストビューに表示、追加などして編集してその後また保存したいんです
なので参照だと、フォームのリストビューのデータに手を加えた時点で元のデータも壊れてしまう。
ので、値渡しでないときびしいんです
> ListViewItem のコレクションクラスを CollectionBase から派生させて、
> 取得するときに新しく作り直せば良いじゃん。
すんません。私にはまだ高度なプログラミン内容なようで設計が難しいです。
地道にstringにしてデータ渡して行きます
0434デフォルトの名無しさん
2006/03/29(水) 14:45:490435デフォルトの名無しさん
2006/03/29(水) 15:26:570436デフォルトの名無しさん
2006/03/29(水) 16:41:06{
dataGridView1.Rows.RemoveAt(i);
}
for文の中でDataGridViewの行を削除すると行が繰り上がり
for文の中で行がひとつ飛ばされると思うのですが、
一般的にはどのような方法で対策するのでしょうか。
0437デフォルトの名無しさん
2006/03/29(水) 16:47:270438デフォルトの名無しさん
2006/03/29(水) 16:52:01以下のようにすると固まってしまいます。
何か方法があるのでしょうか?
private void Exec(){
this.Invoke(new System.Threading.ThreadStart(Start));
System.Threading.Thread.Sleep(3000);
this.Invoke(new System.Threading.ThreadStart(End));
}
protected override void OnClosing(CancelEventArgs e){
m_th.Join();
base.OnClosing(e);
}
private void startButton_Click(object sender, EventArgs e){
m_th = new System.Threading.Thread(new System.Threading.ThreadStart(Exec));
m_th.Start();
}
0439デフォルトの名無しさん
2006/03/29(水) 16:54:36forで消したいならRemoveAt(0)
0440デフォルトの名無しさん
2006/03/29(水) 17:11:330441デフォルトの名無しさん
2006/03/29(水) 17:14:25なんか方法ある?
IntPtr lpBuffer = Marshal.StringToCoTaskMemAnsi("文字");
0442デフォルトの名無しさん
2006/03/29(水) 17:15:53Invoke で元のスレッドで処理しようとするが、その元のスレッドそのものが Join で止まっててデッドロック。
UI スレッドを待機させちゃいけないな。
大体 Closing が発生する時に Invoke が必要な処理やってちゃいかんし意味無いだろう。
せいぜい Thread が IsAlive なら Closing をキャンセルするとか。
0443デフォルトの名無しさん
2006/03/29(水) 17:16:23何がどう駄目なのか書け。話はそれからだ。
0444デフォルトの名無しさん
2006/03/29(水) 17:53:00wininet.dll の Win32 API 関数 GetUrlCacheEntryInfo を呼び出し、
アドレスからキャッシュファイル名を取得したいと手探りで頑張ってみたのですが、
構造体の取得が出来ておらず、関数の戻り値もfalseで
どうにもうまく動いていない様なのです。
どうか御指導おねがい致します。
ttp://free.gikoneko.net/up/source/up83723.zip
0445438
2006/03/29(水) 18:08:54なるほど、UIThreadではClosingをキャンセルして、
終了用のスレッドでCloseしたらうまくいきました。
ありがとうございました。
private void WaitClose()
{
while (m_th.IsAlive) {
System.Threading.Thread.Sleep(100);
}
this.Close();
}
protected override void OnClosing(CancelEventArgs e)
{
if (m_th != null)
{
if (!m_th.IsAlive)
{
base.OnClosing(e);
}
else
{
e.Cancel = true;
System.Threading.Thread th = new System.Threading.Thread(new System.Threading.ThreadStart(WaitClose));
th.Start();
}
}
}
0446デフォルトの名無しさん
2006/03/29(水) 18:10:01まあ MSDN 嫁で片づけても良いような気もするが。
基本的な手順はこうだ。
・GetUrlCacheEntryInfo に URL、 NULL ポインタ、 0 を渡す。第三引数に必要なサイズが格納される
・返ってきたサイズ分のメモリを確保する。
・もう一度 GetUrlCacheEntryInfo 呼び出し、引数に URL、確保したメモリのポインタ、確保したメモリのサイズを渡す。
・メモリを構造体にコピーする。
・メモリを解放する。
で、必要なキーワードは
IntPtr Marshal.AllocCoTaskMem Marshal.PtrToStructure Marshal.FreeCoTaskMem
0447デフォルトの名無しさん
2006/03/30(木) 03:58:16解答ありがとうございます、が情けない事にまだわからないのです。
private extern static bool GetUrlCacheEntryInfo
(
string lpszUrlName,
out INTERNET_CACHE_ENTRY_INFO lpCacheEntryInfo,
out uint lpdwCacheEntryInfoBufferSize
);
(略)
IntPtr ptr;
GetUrlCacheEntryInfo(address, out ptr.ToPointer(),out size); // error
ptr = Marshal.AllocCoTaskMem((int)size);
GetUrlCacheEntryInfo(address, out ptr, out size); // error
INTERNET_CACHE_ENTRY_INFO cacheinfo =
(INTERNET_CACHE_ENTRY_INFO)Marshal.PtrToStructure(ptr, typeof(INTERNET_CACHE_ENTRY_INFO));
Marshal.FreeCoTaskMem(ptr);
自分なりにヒントを頼りに調べて考えてこうなったのですが、
GetUrlCacheEntryInfo関数の第二引数をどうすれば良いのかわからないのです。
もう少しヒントを、面倒ならMSDNの該当部だけでも教えて貰えないでしょうか。、もうだめねむいねる
0448デフォルトの名無しさん
2006/03/30(木) 07:29:18選択した項目が変更され、その変更が ComboBox に表示されると発生します。
この機能まともに働いてないと思いませんか?
項目を選択しても、その項目の情報が送られるわけじゃなくて
その項目を選択する前に表示されていた文字列(ComboBox.Text)が
送られてくるんですけど・・・
0449デフォルトの名無しさん
2006/03/30(木) 09:09:090450デフォルトの名無しさん
2006/03/30(木) 09:39:14IntPtr はポインタそのものなので、out つけたらポインタのポインタを渡すことになってしまうぞ。
>>448
Text じゃなくて SelectedItem 使え。
Text で以前のが取れるなら嬉しさ倍増だな。
0451448
2006/03/30(木) 12:15:25>448にも書いてるとおり
変更が表示されてから発生とか抜かしておきながら
実際は変更される直前。ダウンアイテムをクリックして閉じる瞬間にイベント起こしてやがる糞野郎です
>>450
言ってる意味がわからないんですけど?
senderComboBox.SelectedTextこれでも前のテキストが読み込まれて
senderComboBox.Textと同じ内容
もうだめぽーw
あとさ、イベントでDELキー押されるとリストアイテムを削除するようにしたらさ
IDE自体がDELキー受け付けなくなってるんでやんのww
自作ソフトのイベントがなんでIDEまで反映されてるんだよと・・
ほんとがんばってくださいM$さん
0452デフォルトの名無しさん
2006/03/30(木) 12:17:440453デフォルトの名無しさん
2006/03/30(木) 12:27:59デザインモードなのにイベントをハンドリングしてるからでは?
0454デフォルトの名無しさん
2006/03/30(木) 12:38:30お前ががんばれよ
0455デフォルトの名無しさん
2006/03/30(木) 13:07:250456448
2006/03/30(木) 14:38:12そういうイベントもないし、コンボボックスにそういうメンバもないんですけど
主語抜けてるんで、主語いれてください。「選択したアイテム」だけじゃ
誰が選択したこと言ってるかわからないじゃないですか
>>453
ハンドリングってなんですか?解除はどうすればいいですか
>>454
これからも応援してくださいね^^
0457デフォルトの名無しさん
2006/03/30(木) 14:45:33>項目を選択しても、その項目の情報が送られるわけじゃなくて
>その項目を選択する前に表示されていた文字列(ComboBox.Text)が
>送られてくるんですけど・・・
何がどこから送られてくるって?
public event EventHandler SelectionChangeCommitted
このイベントのどこにそんな情報が入ってるというのだ?
0458デフォルトの名無しさん
2006/03/30(木) 14:51:29ttp://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpref/html/frlrfSystemWindowsFormsComboBoxClassSelectedItemTopic.asp
ttp://msdn2.microsoft.com/ja-jp/library/system.windows.forms.combobox.selecteditem(VS.80).aspx
まいったな、どうやって ComboBox の選択中のオブジェクト取得しようか。
SelectedIntex と Items から調べるか。
0459448
2006/03/30(木) 14:53:33ドロップダウンメニューをクリックすると、
ドロップダウンメニューで選んだアイテムじゃなくて
元々、ComboBox.Textにあったものが
イベントのsenderで送られてくるんですよ!
しかも、イベントの発生時点では、まだ、ComboBox.Textが更新されてないから
腹が立つンです!!M$は変更されてから発生って書いてるのに!!!!
選んでTEXTが変更されてから、その情報が取れたらいんだけどね
いくつか試したけど、そういう機能のイベントはない
てか、使えないイベントばっかじゃん
もっとがんばってねM$ちゃん
0460448
2006/03/30(木) 14:56:40えぅ〜><ごめんなさぁいですぅ〜
でもでも〜。ドロップダウンで選んだ直後は選択状態になるけどぉ〜
どのタイミングで取得するかなんだよねぇ〜。
選択されたら常に取得するんだとぉ、ドロップダウンアイテム選んでなくても
選択したりすることあるしぃ〜。
そう考えるとわたすぃのあたまではむりぽぉ〜。。。
0461デフォルトの名無しさん
2006/03/30(木) 16:58:40Componentに DesignMode っていうプロパティがあるでそ?
それが true の場合は、デザイナの中で動いているから、
デザイナの中で動くときには不要な処理はしないように
if 文入れるなりなんなり「自分で」コードを修正する。
0462448
2006/03/30(木) 17:32:44おおーーー!!!!!!
なんだか意味がよくわからなかったが、なんとなくやってみたらうまくいったぞ!!
最初System.ComponentModelやSystem.Web.UI.WebControlsなネームスペース作ってねーよ!って
思ってたけどなw
てか、こんなややこしいことさせるなんて!!普通にわかるだろ!こんなデザイン時までキー入力受け付けないなんて!
もっとがんばってよM$さん
>>461
それにしてもこんなのよく見つけたね?すぐ見つけれたの?すごいね天才だね
ほんと感謝感激です!ありがとう
0463デフォルトの名無しさん
2006/03/30(木) 17:34:070464デフォルトの名無しさん
2006/03/30(木) 18:53:33再生するにはどうすればいいでしょうか
PlaySoundとして、外部ファイル名を指定すれば再生できますが
.Properties.Resources._1.ToString(),
と指定してもビープ音しか鳴りません。
0465デフォルトの名無しさん
2006/03/30(木) 19:18:240466デフォルトの名無しさん
2006/03/30(木) 19:19:18それつかってMemoryStream初期化してSystem.Media.SoundPlayerに渡せば良さそうだが。
._1の型は何よ。
0467デフォルトの名無しさん
2006/03/30(木) 19:33:31文句を言うんだろ。
0468デフォルトの名無しさん
2006/03/30(木) 19:46:57回答ありがとうございました。
0469デフォルトの名無しさん
2006/03/31(金) 02:00:02FileStream、StreamReader、StreamWriterを利用してテキストファイルを読み書きしています。
親プロセスが書き込んだファイルを子プロセスが読み込んでそのFormに表示する、
というプログラムを作りました。(下記�@〜�F)
しかし、子プロセスに表示されるファイルの中身が不完全(末尾が欠ける)
という不具合が発生しました。
�Bと�Cの間にThread.Sleepを入れたら解消したので
「ファイルの書き込みが間に合わないのだ」と理解したのですが、
そんなことってあるのでしょうか。
�Bのメソッドが発行された時点で既にファイルへの書き込みって完了しているものと
思っていたのですが、実際にはタイムラグがあるのでしょうか…。
�@ファイルオープン
�Aファイルに書き込み
�Bファイルクローズ
�C子プロセス起動
�D子プロセスがファイルオープン
�E子プロセスがファイルを読み込みフォームに表示
�F子プロセスがファイルをクローズ
0470デフォルトの名無しさん
2006/03/31(金) 05:47:560471デフォルトの名無しさん
2006/03/31(金) 08:17:220472デフォルトの名無しさん
2006/03/31(金) 09:12:24まずは何の初心者か明示しろ
俺には日本語の初心者にしか見えない
0473デフォルトの名無しさん
2006/03/31(金) 09:22:58とりあえずコードを晒して欲しい
0474デフォルトの名無しさん
2006/03/31(金) 10:48:33メモリの書き込み速度とHDDの書き込み速度は
1000倍以上もあるのでプログラムはすぐ次の動作に移るけど
ファイルの書き込みが追いつかないというのは仕様
暇があれば書き込んでやってもいいぞって感じでファイル作るから
ちゃんとファイルがあるかどうか、何よりフォルダ内をちゃんと更新されたのを確認しないとだめ
0475デフォルトの名無しさん
2006/03/31(金) 11:18:15人を騙して楽しいかい?
親や兄弟、大切な人とかに「人を騙すのは楽しい」って言える?
0476デフォルトの名無しさん
2006/03/31(金) 11:25:150477デフォルトの名無しさん
2006/03/31(金) 11:59:25仕様は分かった、コード曝せや
問題が発生しているときに仕様だけ伝えられても仕様のミスくらいしかわからん
ここはC♯言語のスレなんだからC♯言語のを載せろ
0478デフォルトの名無しさん
2006/03/31(金) 12:33:51ってドキュメントに書いてありますよね。あれ嘘のような気がしませんか?
0479デフォルトの名無しさん
2006/03/31(金) 12:36:14なんで嘘だと思ったんだ
0480デフォルトの名無しさん
2006/03/31(金) 12:40:04作成、使用後にCloseしても元のファイルが消せなかったことがあって。
0481デフォルトの名無しさん
2006/03/31(金) 13:07:020482デフォルトの名無しさん
2006/03/31(金) 17:20:09Control.Invalidate(Rectangle)を呼ぶとGraphics.Clipプロパティに適切なリージョンが設定されるものかと思ったのですが、
どうもPaintEventArgs.GraphicsのGraphics.Clipプロパティには常に無限領域が設定されているようです。
これはこういうものなんでしょうか。
もしそうだとしたら、無効になった領域だけを再描画するにはどうしたらよいのでしょうか。
0483デフォルトの名無しさん
2006/03/31(金) 17:40:11内部では InvalidateRect が呼び出されて無効領域を設定するので、
フォームのデバイスコンテキストにはその範囲だけしか描画されない。
ちなみに無効領域は PaintEventArgs.ClipRectangle
0485デフォルトの名無しさん
2006/03/32(土) 02:15:10ValueChangedイベントが発生しない、という事態が発生しました。
Enterを押さないと発生しないし、Valueも更新されていません。
ためしに新規プロジェクトの空のフォームに置いて試したらちゃんと
イベントが発生したので、俺の作ったフォームのせいなんだと思いますが、
みなさん同じ現象が出たことありませんか?
もう今週も終わりなので、月曜日にひきつづき原因調べてみます。。。
0486デフォルトの名無しさん
2006/03/32(土) 02:25:55> ValueChangedイベントが発生しない、という事態が発生しました。
> Enterを押さないと発生しないし、Valueも更新されていません。
これが正しい挙動のはずだが?
0487デフォルトの名無しさん
2006/03/32(土) 12:43:54HashtableならばCollectionsUtilでなんとかなるのですが
Dictionary.Comparerを実装しようと思ったのですが標準で用意されていないのでしょうか?
CaseInsensitiveComparerは使えるのですが、
CaseInsensitiveHashCodeProviderは「使用しないでください」ってなっているので
0488デフォルトの名無しさん
2006/03/32(土) 12:53:350490デフォルトの名無しさん
2006/03/32(土) 13:21:550491デフォルトの名無しさん
2006/03/32(土) 13:32:490494デフォルトの名無しさん
2006/03/32(土) 17:36:35ィ州ii} |!{ヾ(((ヾ(((ハ三ミミ 、
〃/ノノリ |ヽ.._ノヽ }}ミミミミh、
〃//〃 | ヽ=ノ ;'⌒ヽ}}ミl、
,}}| 川|{ ノ ((⌒ ノ }}}li
/川||}!}i|  ̄ }州
レ {!州!| ,x‐  ̄ ヽ ,.z==〃/
l!( リノ川 <( ハ〉 ノ { ,ィTヽ /
トvソノ}}ハ)、  ̄ ノ l ` ̄ {
))ト〃 }|::ヽ i ′
/ノ》州}}}ィ::、 イ l ′
((∧ 州}ソ,ノ / ` = _ノ ′
} \ ヾィ ノー- __ - ,'
′ \ ` 、 -‐- イ
′ \ ` __ ,/ l
′ \ ヽ |
モーネ・アホカト[Maulnen Ahoccato]
(1666〜1738 フランス)
0496デフォルトの名無しさん
2006/04/02(日) 01:11:45・DirectSoundを使う
・mciSendStringを使う
の2つの方法を見つけました。
前者はMSDN(日本)の説明がよく分からず、またサンプルソースも無いので途方に暮れていたときに後者の方法を発見しました。
後者はこのURLの一番下にある方法を利用しました。
http://f57.aaa.livedoor.jp/~jeanne/bbs/faq.cgi?mode=al2&namber=2460
ですが、この方法では長時間録音すると不安定になったりと不向きと言うことが分かりました。
wavファイルを録音しながら徐々に書き出していきたいのですが、そういった方法、またはそういった方法(サンプルソース)が乗っているWebサイトを教えてください。
私はDirectSoundを使えばいけると思うのですが、MSDNの解説にはサンプルソースが無いのでよく分かりません。
よろしくお願いします。
0497デフォルトの名無しさん
2006/04/02(日) 01:23:55Managed DirectX のとなると少なそうだが、SDK にサンプル付いてなかったっけ?
まあ C++ のを大体流用できるだろうし。
0498デフォルトの名無しさん
2006/04/02(日) 02:18:020499デフォルトの名無しさん
2006/04/02(日) 02:24:13DirectShowでWebからストリーム受信するフィルタ作ってバイナリを保存するのが定石。
0501デフォルトの名無しさん
2006/04/02(日) 07:00:17Invoke(delegate(){ 〜;});みたいな感じで。
0502デフォルトの名無しさん
2006/04/02(日) 07:00:19Invoke(delegate(){ 〜;});みたいな感じで。
0503デフォルトの名無しさん
2006/04/02(日) 07:00:550504デフォルトの名無しさん
2006/04/02(日) 07:11:35でもなんか意味あるの?
0505デフォルトの名無しさん
2006/04/02(日) 10:11:29C++のコードは読めませんが、500は私ではありません。
>>498
ありがとうございます。SDKのサンプルは盲点でした。
私が考えていた物と結構同じ動作をしているので、これから解析してみたいと思います。
0506デフォルトの名無しさん
2006/04/02(日) 15:15:27それ以降の処理がされないんですがなぜだかわかりますか?
例えばmsgboxの後にmsgboxを表示しないようにするコードを入力しても
なんでもmsgboxが表示されるんです
0507デフォルトの名無しさん
2006/04/02(日) 15:16:36現時点ではあまり選択肢に入れない方がいいよ
0508デフォルトの名無しさん
2006/04/02(日) 15:17:55別スレッドで表示しる
0509デフォルトの名無しさん
2006/04/02(日) 15:19:07おおざっぱに言うとメインスレッドのメッセージループが止まるから。
0510デフォルトの名無しさん
2006/04/02(日) 17:03:16おおざっぱに言うと MessageBox はモーダルダイアログだから。
ところで 『ファイル名を指定して実行』 みたいな、自動補完のポップアップの表示の仕方が分かりません。
VS.NET のインテリセンスにしてもそうだけど、ポップアップをクリックしても元のコントロールにはフォーカスが残ったままですし。
単純に API の ShowWindow を使って、非アクティブのまま前面表示するだけでは、↑のようにはならないのですが、
どのようにすれば、これらと同じように表示できるんでしょうか。
0511デフォルトの名無しさん
2006/04/02(日) 17:11:27TextBox.AutoCompleteMode
TextBox.AutoCompleteSource
0512デフォルトの名無しさん
2006/04/02(日) 17:38:17なんとかがんばってみるわ。
0513デフォルトの名無しさん
2006/04/02(日) 19:24:51>>509
>>510
>>510
ありがとう
原因がわかるまで何度もコード手直しして
たまたま、msgboxを//で囲んだらうまくいった
こういうことってすごく初歩的なことなのかな?
やっぱ本とか買わないとプログラミングって難しいですね
ヘルプみても説明の説明がほしい感じ。専門用語だらけだから
0514510
2006/04/02(日) 20:19:53TextBox.AutoCompleteSource とか IAutoComplete ではインテリセンスのようなアイコン描画はできないです。・゚・(ノД`)・゚・。
……もう一度、お願いします orz
0515デフォルトの名無しさん
2006/04/02(日) 20:25:18オートコンプリート風にフォーカスを奪わずにformを表示したいのなら、
以下のコードが参考になると思います。
ttp://www.codeproject.com/csharp/BalloonTipsArticle.asp
んで上下矢印、ENTERだけは奪いたいとかそういう欲求が出てきたら
API呼んでフックなりサブクラス化なりで。
0516デフォルトの名無しさん
2006/04/02(日) 23:36:52UserContorolで作って、単純にContorols.AddでOK。
0517デフォルトの名無しさん
2006/04/02(日) 23:49:39ヒント:WM_MOUSEACTIVATE
0518デフォルトの名無しさん
2006/04/03(月) 04:21:42http://www.codeproject.com/csharp/biginteger.asp
は,325の階乗を計算させたら,オーバーフローしたとの例外を吐きました。
どうも,Java の BigInteger と異なり,大きさに制限があるようです。
また,
http://ant0x.udap.jp/tips/tips_bigInteger.htm
の方法に従って,J# の BigInteger を使う方法も試してみました。
これなら 1000 の階乗でも計算できるのですが,我がマシンでは30秒近くかかりました。
ソースコード全体を J# で書き直しても,実行速度は変わりませんでした。
一方,同じソースコードを,Java で書き直して,javac でコンパイルして実行してみたところ,
1000 の階乗の計算が 0.03秒しかかかりませんでした。
どうも,J#の BigInteger と,本家 Java の BigInteger は,根本的に計算アルゴリズムが違って,そのために計算速度がこれだけ違うのだと推測されます。
C# で,高速に,メモリの許す限りの桁数の計算をする方法はありませんでしょうか。
よろしくお願いします。
0519デフォルトの名無しさん
2006/04/03(月) 04:47:00ソースあるんなら、制限変更すればいいんじゃないの?
0520デフォルトの名無しさん
2006/04/03(月) 05:05:07CodeProjectのBigInteger.csを見ると,
try{
for(int i = 0; i < bi1.dataLength; i++){
if(bi1.data[i] == 0) continue;
ulong mcarry = 0;
for(int j = 0, k = i; j < bi2.dataLength; j++, k++){
// k = i + j
ulong val = ((ulong)bi1.data[i] * (ulong)bi2.data[j]) + (ulong)result.data[k] + mcarry;
result.data[k] = (uint)(val & 0xFFFFFFFF);
mcarry = (val >> 32);
}
if(mcarry != 0) result.data[i+bi2.dataLength] = (uint)mcarry;
}
}
catch(Exception){
throw(new ArithmeticException("Multiplication overflow."));
}
こんな感じで例外を投げているので,例外の発生源を突き止めるのが大変そうです...
0521デフォルトの名無しさん
2006/04/03(月) 10:47:28単純にmaxLengthを増やせばいいんじゃないの?
0522デフォルトの名無しさん
2006/04/03(月) 11:50:18もしターゲットのプラットフォームを"Any"にしてビルドしてるんなら、
"X86" だかなんだかにしてみては?
漏れの今書いてるアプリはこれで実行速度が10倍以上変わる。
0523デフォルトの名無しさん
2006/04/03(月) 12:15:17C++ のライブラリ拾ってきて、C++/CLI でラッピングして Maneged コードにして、
それを C# から呼べばいいのでは。
0524518
2006/04/03(月) 13:06:59確かにその通りでした。。。
>>522
それも試してみました。
ですが,劇的な変化は特に見られませんでした。
>>523
なるほど。しかしラッピングが面倒そうなので今回はパスとします。。。
今回のテストコードは
http://up.spawn.jp/file/up15828.zip
に置いておきます。
nmake test
でテストできます。
結果は,概ね
Java≒Ruby > C# > J#
という順位になりました。
ご意見をお待ちしております。
0525デフォルトの名無しさん
2006/04/03(月) 13:09:510526518
2006/04/03(月) 13:16:54はい。全くその通りであります。
>>524では言語の優劣を論じたように書いてしまいまして申し訳ありません。
あくまで,その言語の付属ライブラリ(C#のは配布されている最も有名なライブラリ)の速度比較をしたつもりであります。
0527デフォルトの名無しさん
2006/04/03(月) 16:15:35限界を求めるならトライアンドエラーではなくそれぞれのコンパイラの性質について調査したほうが良いと思うが
極限を測るのに現象ベースじゃ解は得られないよ
0528デフォルトの名無しさん
2006/04/03(月) 16:23:38�@Form1のどこからでも扱えるようにForm1のフィールでForm2をインスタンス化して
Form1のどのメソッドからでもForm2のプロパティを扱えるようにする
�AForm1の1つのメソッドでForm2をインスタンス化して、Form1の他のメソッドは
Form2のプロパティを引数として得ることで処理する
�BForm1の1つのメソッドでForm2をインスタンス化して、Form1の他のメソッドは
Form2をインスタン化したオブジェクトを引数として得ることで処理する
�Cどれでもいい
どれがもっとも適切なんでしょうか?�Aでやると、同じようなコードが大量になります。
そもそも、Form1のメソッドでの処理をすべてForm2にやらせたほうがいいのでしょうか?
0529デフォルトの名無しさん
2006/04/03(月) 17:12:56�D設計を見直す
0530デフォルトの名無しさん
2006/04/03(月) 17:22:05Form1とForm2が何だか知らんが、インスタンスをどう保持すべきかを考えろ
Form2はForm1のどこからでもってことは、Form1が存在している間はForm2が必要ってことだろ
ではForm1が存在しなくなったらForm2はどうするの?
Form1の子としてForm2が存在するなら、Form1のprivateな変数としてForm2のインスタンスを受け取ればいい
Form1とForm2の寿命に関連性が無いなら、Form1とForm2をインスタンス化する別のクラスでそれぞれのインスタンスを保持して、Form1のコンストラクタでForm2のインスタンスを受け取るとかすればいい
目的だけから実装を検討しても後でスパゲティになる
>>529の言うように設計を見直し、ちゃんとクラス設計をするのが正しい解だと思うが
0531デフォルトの名無しさん
2006/04/03(月) 17:27:31よくわからんけど、Javaのライブラリの方がネイティブのコードで
書かれてるんじゃないの?
0532デフォルトの名無しさん
2006/04/03(月) 17:35:46それで1000倍の差はつかないんじゃない?
0533デフォルトの名無しさん
2006/04/03(月) 18:50:15>>530
form1のダイアログとしてform2を開いて、そこのtextboxの内容によって
frm1のtextboxにどのように値を入れるかという処理をしたかったんですが
Form2 frm2=new Form2()
frm2.ShowDialog(this);
addText(frm2)
private void addText(Form2 text)
{
}
みたいにすることで、コードが少し減りました。
0534デフォルトの名無しさん
2006/04/03(月) 18:59:5316msec くらいだった。Java のは未計測。
ホントに J# のアセンブリの BigInteger がそんなに遅いなら、
CodeProject の奴を上限無しに改修して使ったほうが良さそう。
0535デフォルトの名無しさん
2006/04/03(月) 19:38:45マジで設計見直した方がいいんじゃね?
addTextの引数の名前が text なのに Form2 はないだろ・・・
まあ処理自体はそれでいいと思うけど
Form2にプロパティつくったほうがよくね?
DialogResultとかもプロパティがあるくらいだから。
0536528
2006/04/03(月) 19:49:57一応プロパティはあります
class Form2
{
public string Address
{
get{retrun this.textbox1.text;}
set{this.textbox1.text=value;}
}
}
見たいな感じで、設計と言われてもどうすればいいのかがよくわからないんです
いつも作ってて迷うのが、変換や処理が必要なデータの受け渡し、受け取りをFORM間でする場合に
どっちに処理をさせるかってのがわからないんです。
どっちもでいえけるし、いろんな別のやり方もあるし・・・
こういうことを迷わずできるようにするにはどういうことを勉強すればいいんでしょ?
何かキーワード教えてください
0537デフォルトの名無しさん
2006/04/03(月) 19:53:24こういうコードが期待されている。
using (Form2 frm = new Form2()) {
if (frm2.ShowDialog(this) == DialogResult.OK) {
this.addText( frm2.text );
}
}
0538デフォルトの名無しさん
2006/04/03(月) 20:01:42処理の責任を明確にしないから悩む
大きな枠として良く言われるのはn階層って概念
例えば、プレゼンテーション(表示や入出力)/ビジネス(計算)/データ(データベース入出力)と処理の担当を明確にすれば悩まない。
君の例で言えば、Form2は入力に特化すべきで、プロパティが表現するのは「ダイアログから入力された結果」だけ
入力結果を勝手に書き換えてはいけない
ただし、入力結果をダイアログ上で処理するのであれば、ダイアログ内でも処理層を考えて実装し、ダイアログの結果として何をプレゼンテーションすべきか仕様を練る
みんなが設計を見直せと言うのはこういうこと
ちゃんとしたポリシーで実装していれば、どこでデータを処理するかとか悩むはずも無い
0539528
2006/04/03(月) 20:21:26>>538
なんとなく見えてきた気がしました
FORM1は表示でFORM2はデータ入出力で変換処理は別クラスを設ければいいのかな?
それぞれのクラスがどういう役目をするのかを与えてやらないから混乱するんでしょうね
今私のプログラムはあっちこっちのフォームで変換処理などがされてて
自分でももう訳がわからなくなってます
作りながら考えて、コードの打ちやすい方に書いてって曖昧なことをしてたのがだめだったんですね
設計見直して見ます。ありがとう。
0540デフォルトの名無しさん
2006/04/03(月) 21:15:40よくわからんけど、例示の例ならForm1の内部に_selectedTextメンバ作ってForm2の存在はなるべく多くのメソッドで知ることがないようにするかも。
0541デフォルトの名無しさん
2006/04/04(火) 00:05:35文字列値(アプリ起動中何度か変更される可能性がある)が必要だという場合に
1.XXService側にSetterを作って、セットする側(モジュールB)が値が変更される度にXXService側にPushする
2.XXService側に文字列を返すデリゲートをセットできるようにする
3.XXService側に文字列を返すinterfaceをセットできるようにする
1.がちょっと面倒だったんで2.で実装したんだけど、何か問題ありますかね?
0542デフォルトの名無しさん
2006/04/04(火) 00:07:110543デフォルトの名無しさん
2006/04/04(火) 00:14:332で問題なし。次!
0544デフォルトの名無しさん
2006/04/04(火) 00:26:231.引き篭もりをやめて外に出る
2.エロゲで彼女を見つける
3.妄想で彼女を作る
0545デフォルトの名無しさん
2006/04/04(火) 00:31:500546デフォルトの名無しさん
2006/04/04(火) 00:48:550547デフォルトの名無しさん
2006/04/04(火) 01:04:26マジレスすると
PCに回ってる資金で雑誌でも買って服装の研究すればいいんじゃね?
0548デフォルトの名無しさん
2006/04/04(火) 01:43:060549デフォルトの名無しさん
2006/04/04(火) 03:42:500550デフォルトの名無しさん
2006/04/04(火) 10:01:51それどころか「イケメンなのに」ってギャップに惹かれる女もいる
ブサメンは外に出るだけでは無駄、努力しろ
0551デフォルトの名無しさん
2006/04/04(火) 10:04:290552デフォルトの名無しさん
2006/04/04(火) 11:26:510553デフォルトの名無しさん
2006/04/04(火) 12:58:480554デフォルトの名無しさん
2006/04/04(火) 13:02:33ウォーターフォールで恋愛できたら苦労しない
恋愛はアジャイルで行こう
0555デフォルトの名無しさん
2006/04/04(火) 13:54:52それとも複数インスタンスの生成破棄を繰り返すべきですか?
0556デフォルトの名無しさん
2006/04/04(火) 14:11:210557デフォルトの名無しさん
2006/04/04(火) 14:12:590558デフォルトの名無しさん
2006/04/04(火) 14:19:570559デフォルトの名無しさん
2006/04/04(火) 14:39:59C#学習開始10分でこんなの作ったんだけどセンスとしてはどうかな?
0560デフォルトの名無しさん
2006/04/04(火) 15:18:47とりあえずツッコミはある
・文字インジェクション未対応でセキュリティリスクがある
・引数チェックが無いのでセキュリティリスクがある
・tryがあるのにcatchが無いから例外処理を正しく扱えてない
・変数のスコープが適切じゃない
・無駄に変数を使用している
・変数名に意味を持たせていない
0561デフォルトの名無しさん
2006/04/04(火) 15:21:27ありがとう
結構難しいもんだな
0562デフォルトの名無しさん
2006/04/04(火) 15:34:41・引数チェックが無いのでセキュリティリスクがある
これはWebアプリではない。DBアクセスもない。
・tryがあるのにcatchが無いから例外処理を正しく扱えてない
catchは必要無ければ書く必要なし。例外処理の正しさとは無関係。
むしろ気になるのは、readerをStreamReader.Nullで初期化していないこと。
そうすれば、finally内で無駄にnull判定しないで済む。
0563デフォルトの名無しさん
2006/04/04(火) 16:28:59> ・文字インジェクション未対応でセキュリティリスクがある
> ・引数チェックが無いのでセキュリティリスクがある
> これはWebアプリではない。DBアクセスもない。
ちょ、ちょ、おま
StreamReaderは絶対バグ無しと確信できるか?
巨大な引数やバグを誘発する引数によって異常な動作を起こさないと確信できるか?
>>560はそういう点からインジェクション攻撃対応と引数チェックを書いてると思うんだが
Webアプリじゃなきゃ引数チェック不要って発想は穴を作るだけ
> ・tryがあるのにcatchが無いから例外処理を正しく扱えてない
> catchは必要無ければ書く必要なし。例外処理の正しさとは無関係。
このアプリは引数を元に動作するから内部完結せず、例外が発生する可能性が高い
しかも引数チェックをしていないし
にも関わらず例外処理を突っ込んでいないのは「不必要だから」とは思えないが
0564デフォルトの名無しさん
2006/04/04(火) 16:29:360565デフォルトの名無しさん
2006/04/04(火) 16:45:11「インジェクション攻撃対応」ってw
>>559のアプリを起動するときに引数を渡すのは
どこから誰が行うのかな?ウェブから第三者が
行うのかな?そんなことはないだろう?
0566デフォルトの名無しさん
2006/04/04(火) 16:48:06チェックするコード書いてよ
0567デフォルトの名無しさん
2006/04/04(火) 16:48:110568デフォルトの名無しさん
2006/04/04(火) 16:49:140569デフォルトの名無しさん
2006/04/04(火) 17:13:560570デフォルトの名無しさん
2006/04/04(火) 17:15:080571デフォルトの名無しさん
2006/04/04(火) 17:48:000572デフォルトの名無しさん
2006/04/04(火) 17:52:15俺もリーダーの初期化が気になる。
ていうか、こんなのループ内で宣言すりゃいいじゃん。
0573デフォルトの名無しさん
2006/04/04(火) 17:53:24>>563はセキュアアプリケーションコーディングの常識を書いてるだけじゃないかと
ちょっとばかし日本語は不自由そうだが
0574デフォルトの名無しさん
2006/04/04(火) 17:57:17その発想はあまりにお目出度過ぎる
他のアプリケーションの不具合を付いてシステムに介入するウィルス・トロイは多くいる
そういう悪意あるアプリケーションがネット等を通じて進入し、ローカルのアプリケーションを突かないと断定できるか?
ローカル利用限定アプリであっても、それでは脅威モデルの設計が稚拙過ぎると思うが
0575564
2006/04/04(火) 18:01:52オレの
> SQLインジェクションと勘違いして無いか?
は>>562宛だからね
>>562は文字インジェクションとSQLインジェクションを混同してるんじゃないかと思ってね
>>563
要は引数経由で危険な文字列がインジェクションされるかもしれないってことだよね
0576デフォルトの名無しさん
2006/04/04(火) 18:02:04>巨大な引数やバグを誘発する引数によって異常な動作を起こさないと確信できるか?
で、実際にバグの有無もどのようなバグかもわからないバグに対しての
引数チェックのコードはどう書くわけ?
0577デフォルトの名無しさん
2006/04/04(火) 18:03:000578デフォルトの名無しさん
2006/04/04(火) 18:09:51引数が求めるものだけ渡すってことだろ
引数がstringだけってことはこれだよね
StreamReader コンストラクタ (String) (System.IO)
http://msdn2.microsoft.com/ja-JP/library/f2ke0fzy(VS.80).aspx
とすると、引数に必要な条件は以下となる
1.ファイルパスとして有効な文字列数であること
2.ファイルパスとして有効な文字列であること
また、このアプリの仕様的な制限を加えても良いかと
例えばこんなところ
・ローカルのパスであること
・UNCパスであること
・絶対パスであること
・相対パスであること
もしかして特定の書き方をしたら異常動作を起こすバグがあるかもしれない。
そしてそれは知られていないかもしれない。
勿論それに対して対処するコードは組めない。
だとすれば、現時点で判明している最低限の制限である「引数が要求する値」のチェックは組み込むべき。
外部から入力される値に対して「絶対安全」という前提で組むのは良くない
0579デフォルトの名無しさん
2006/04/04(火) 18:12:100580デフォルトの名無しさん
2006/04/04(火) 18:13:27このスレ見ているお前も同じ人種だろw
0581デフォルトの名無しさん
2006/04/04(火) 18:17:23呼び出すにはどうしたらいい?
0582デフォルトの名無しさん
2006/04/04(火) 18:18:11あるいはキャスト
0583デフォルトの名無しさん
2006/04/04(火) 18:38:220584デフォルトの名無しさん
2006/04/04(火) 18:49:52もちろん使い方による話だよ。
明確に使い方に条件があるならそれをチェックすればいい。
ないならリーダーにまかすのもありだろ?
0585デフォルトの名無しさん
2006/04/04(火) 18:52:48論外
0587デフォルトの名無しさん
2006/04/04(火) 19:38:450588デフォルトの名無しさん
2006/04/04(火) 19:43:26初心者叩きしてる奴も程度が知れてる
0589デフォルトの名無しさん
2006/04/04(火) 19:43:580590デフォルトの名無しさん
2006/04/04(火) 19:45:220591デフォルトの名無しさん
2006/04/04(火) 19:48:170592デフォルトの名無しさん
2006/04/04(火) 20:00:310593デフォルトの名無しさん
2006/04/04(火) 20:07:580594デフォルトの名無しさん
2006/04/04(火) 20:42:150595デフォルトの名無しさん
2006/04/04(火) 21:12:52たっぷり睡眠をとれ。
0596デフォルトの名無しさん
2006/04/04(火) 21:29:100597デフォルトの名無しさん
2006/04/04(火) 21:30:15ふらっとC♯(初心者用) Part7
http://pc8.2ch.net/test/read.cgi/tech/1141458468/
0598デフォルトの名無しさん
2006/04/04(火) 22:55:42c# で作成したリソースの読み込みなどはサンプルがありますが、普通の exe, dll 等は
見当たりません。
こういうことって出来るんでしょうか?
0599デフォルトの名無しさん
2006/04/04(火) 23:01:110600デフォルトの名無しさん
2006/04/04(火) 23:02:32いや、そもそもトロイに入られた時点でアウトだから。。。
マシンに進入できたトロイがわざわざローカルのアプリなんぞ狙う必要は無い。
0601デフォルトの名無しさん
2006/04/04(火) 23:17:23素早いお返事ありがとうございます。リソースを読み込むWin32API 名前を教えていただけ無いでしょうか。
0602デフォルトの名無しさん
2006/04/04(火) 23:27:34調べても見つからなかったというのなら検索したキーワードを言ってみろ。
0603デフォルトの名無しさん
2006/04/05(水) 09:25:41>574にとっては不十分なんだろう。
何を神経質になっているのか皆目見当がつかんが。
cgiで使われる場合にぃぃとか言い出すのかな。
0604デフォルトの名無しさん
2006/04/05(水) 10:21:53侵入されないためならまだ話は分かるが。
巨大な入力があったらと言うが、
アプリが起動してる時点でそのチェックはもはや手遅れ
場合による、使い方によると言うのさえ論外って
どういう事なんだ?
0605デフォルトの名無しさん
2006/04/05(水) 11:34:41たぶん「引数に明確な条件が無いならリーダーに任す」
というのが論外なわけでは?
上流工程での仕様で所与の条件がないなら、
設計段階で条件を適当に作って、
その仕様に基づいてコードを書くべき。
仕様がないとテスト項目も作成できない。
まぁ漏れなんか論外プログラマだから、
FileOpenDialog で得られたパスをそのまま
使ってファイル開いたりするけどね。
0606デフォルトの名無しさん
2006/04/05(水) 11:52:070607デフォルトの名無しさん
2006/04/05(水) 11:59:030608デフォルトの名無しさん
2006/04/05(水) 12:01:48Exist で検査するファイルパスが有効なものかどうかチェックするコードきぼん
0609デフォルトの名無しさん
2006/04/05(水) 12:28:43ここはC#相談室だ
0610デフォルトの名無しさん
2006/04/05(水) 12:33:36Encoding.ASCII.GetString(bytes);
ってしたときにVS2003とVS2005で同じbytesに対して結果が違うのですが、
何が変わったんでしょうか?
ためしたbytesは0xb5 0xeb 0x2dです。
0611デフォルトの名無しさん
2006/04/05(水) 12:59:50でファイルパスとして正しいかどうかの条件も明確に出来ない現状で
勝手なチェックを入れることでどれだけ安全にできると?
それは作者のやりたいことを阻害しないチェックになるのか?
別に本来チェックすべきだってことには異存はないけど
今みたいなためしに作ったコードにこうするべきなんて仕様は定義できないし、場合によっては渡されたものは自作コード部分では受け入れる
ってのもあるっていってんたよ。
具体的にこれがどんだけ危険なのか、
てきとうなチェックを入れることでどんだけ安全になると言うのか
いってみてくれ
例えばOSのコマンドで使い方次第で危険なものなんていくらでもあるだろ
やっぱり誤解されそうだが、基本的にチェックするべきってのに異存はない。
0612デフォルトの名無しさん
2006/04/05(水) 12:59:55C#にはセキュリティの概念が無いのか?
0613デフォルトの名無しさん
2006/04/05(水) 13:05:28指定出来るのに↓みたいな仕様なんだろ
>>拡張子の長さがちょうど 3 文字の場合の searchPattern の一致の動作は、
>>拡張子が 3 文字を超えている場合の動作と異なります。ちょうど 3 文字の
>>searchPattern の場合は、3 文字以上の拡張子を持つファイルが返されます。
hoge.txtは拾いたくてhoge.txtaaaは拾いたく無い場合にはどうしたらいいんだろ?
0614デフォルトの名無しさん
2006/04/05(水) 13:05:52Existsはファイルシステムにアクセするから不適切
>>608
無難なのはファイルの有無を問わないIsPathRootedかな
文字列そのままがfalseの場合は相対パスの可能性があるんでカレントパスとCombineしてチェック
それでもfalseならパスではないということで弾く
やるならこの後Existsかな
0615デフォルトの名無しさん
2006/04/05(水) 13:08:57プログラマのためのセキュリティ対策テクニック
https://www.microsoft.com/japan/msdn/net/security/securecode/
以上
0616デフォルトの名無しさん
2006/04/05(水) 13:15:54HDDの中身をすべて削除するようなプログラム作りたいんですけど
2005で作った場合、誰が作ったかexeファイルだけでバレたりしますか?
0617デフォルトの名無しさん
2006/04/05(水) 13:17:29> 別に本来チェックすべきだってことには異存はないけど
いや、漏れは異存あるよ。
無駄なチェックはやるべきじゃないと思うよ。
とりあえず安全のために何でもしとけ、って思想には賛成できない。
>>560
> ・文字インジェクション未対応でセキュリティリスクがある
> ・引数チェックが無いのでセキュリティリスクがある
についてなんだけど、具体的な攻撃機序(メカニズム)を説明して欲しいな。
でないと、無用なチェックと言われても仕方がないと思うが。
0618デフォルトの名無しさん
2006/04/05(水) 13:18:13何故バレると困るのか教えて欲しい
0619デフォルトの名無しさん
2006/04/05(水) 13:27:09バレる場合もあるよ。
.NETアセンブリにはいろいろな情報を埋め込めるから
逆アセンブラ(ILDASM)使ってそれを知ることができる。
心配なら作った後でILDASMで確認しる。
0620デフォルトの名無しさん
2006/04/05(水) 13:27:48例えば金融系モバイル用アプリなら脅威モデルとして直接操作もありうる
未知の問題に対する保険の意味でも「既知の制限」を実装するのは悪いことではない
が
アプリ環境の前提もなくセキュリティの基準を語っても何の意味もないわけで
>>617
例えば「StreamReaderには未解決のバッファオーバーフローの問題によって管理権限を奪われる」という問題があるかもしれない。
そしてその攻撃方法は「非常に大きな文字列を唯一の引数として渡すこと」かもしれない。
実際これは存在しない(はず)わけだが、これらの問題が存在しないことを証明するのは非常に困難(悪魔の証明)
そしてその困難さを付いてくる顧客もいる。(私が金融系モバイルシステムを発注したなら、どこまで安全かとことん問い詰めるかもしれない)
そのため、次善策として例えば「ファイルパスとして有効な文字列しか渡さない」という方法を実装できる。
とまあ言い連ねればキリがないわけだが、そういう論理も展開できる。
そしてそういう次善策を極限まで求められる業界(金融系・個人情報系)もあるわけで。
ま、普通はここまで考える必要は無いと思う。アプリ環境次第。
0621デフォルトの名無しさん
2006/04/05(水) 13:29:19http://ja.wikipedia.org/wiki/%E6%82%AA%E9%AD%94%E3%81%AE%E8%A8%BC%E6%98%8E
0622デフォルトの名無しさん
2006/04/05(水) 13:32:25バファオーバーフロー問題は起こらないと聞いたが。。。
0623デフォルトの名無しさん
2006/04/05(水) 13:38:22public static void Main(string[] args)
の string[] に不正な文字列……例えば巨大な文字列を入れることを防ぐことは出来ないよ。
そして万一 string にバグがあった場合、それはセキュリティホールになる可能性がある。
……みたいに神経質になるんだったら、俺は出来ることだけ考えるよ。面倒すぎる。
0624デフォルトの名無しさん
2006/04/05(水) 13:41:32マイクロソフトの公式見解である「AppDomain上ならバッファオーバーフローの問題は起きない」を信用してくれる顧客もいるが、
IT業界に詳しくない顧客は「何だかんだ言ってもセキュリティ問題で毎月ニュースになるミクロソフトの発言なんて信用できねーよ」と言うかもしれない
運用管理側の人々は「限界まで開発者としての安全性を保証してください。」って言ってくるだろうし
もしものときに「だってマイクロソフトが安全って言ってたから」じゃ通用しないわけで
いままで「絶対安全」と言われながら穴があった例も多数あるわけだし
0625デフォルトの名無しさん
2006/04/05(水) 13:44:00Amazon.co.jp:脅威モデル セキュアなアプリケーション構築: 本
http://www.amazon.co.jp/exec/obidos/ASIN/4891004576/
0626デフォルトの名無しさん
2006/04/05(水) 13:45:26それでも穴が空いたら謝る
そんだけ
0627デフォルトの名無しさん
2006/04/05(水) 14:10:030628デフォルトの名無しさん
2006/04/05(水) 14:10:13セキュリティの概念論や方法論は特定の言語に結びつくものなのか?
0629デフォルトの名無しさん
2006/04/05(水) 14:15:07概念論はそうだが、言語が違えば方法論は違ってくる。
0630デフォルトの名無しさん
2006/04/05(水) 14:16:00ありがとう。ILDASM調べてみます
0631デフォルトの名無しさん
2006/04/05(水) 14:29:00アプリケーションソフトだと瑕疵担保期間があるからな
それが終わっても運用フェーズにはいるから手離れするわけじゃないし
0632デフォルトの名無しさん
2006/04/05(水) 15:35:450633デフォルトの名無しさん
2006/04/05(水) 15:58:560634デフォルトの名無しさん
2006/04/05(水) 16:00:230635デフォルトの名無しさん
2006/04/05(水) 16:04:390636デフォルトの名無しさん
2006/04/05(水) 16:26:24アリガ�d
VBはVB7以前の知識しかなく、C++は基礎知識のみ、C#は知識ゼロなんだけど、
大差ないんだったら、これを機会に C#を覚えたほうがいい?
0637フリープログラマ
2006/04/05(水) 16:44:41仕事を得やすいです。
0639デフォルトの名無しさん
2006/04/05(水) 16:53:10Encoding.ASCII に非 ASCII 文字を渡してどうなるかなんて別に定義されてないし
0640デフォルトの名無しさん
2006/04/05(水) 18:04:08例えば、リモコンアプりとか。
できるのならばさっそく赤外線商品をサーチしようと思うのですが
0641デフォルトの名無しさん
2006/04/05(水) 18:05:010642640
2006/04/05(水) 18:20:46回答ありがとうございます。
どうとでもなるのであればさっそくサーチしようと思います。
ついでにAPIも並行で探しながら、あればそれを使って簡単に作れそうですね。
0643氏天国
2006/04/05(水) 18:26:080644デフォルトの名無しさん
2006/04/05(水) 18:28:34これからは大量破壊兵器の証明に変えるえるべきだな。
0645デフォルトの名無しさん
2006/04/05(水) 23:52:35OpenFileDialogで開いているカレントパスはどうやって取得するの?
ていうか、OpenFileDialog.FileNameってパス付だし、Combineする必要ないんじゃ?
Existsで問題ないでしょ。Existの仕様をみれば
そもそもCheckFileExistsにしてればそのまま開いちゃっていいし。
どの辺が論外プログラマなの?
アプリはAPIの仕様を元に組むので基本的には「〜〜かもしれない+無用のチェック」はする必要はない。というよりもしてはならない。
仕様を把握しないでとりあえずチェックしておけ、みたいなのは問題外かと
「無用のチェックで読み辛くなる、処理が追い辛くなるリスク」 >> 「未知のAPI(下物)によるセキュリティホールリスク」
それでもやれというなら、相当のコストを払ってもらわないとね。
0646デフォルトの名無しさん
2006/04/06(木) 00:13:07エクスプローラでみるのと同じようにビューとして表示したいのですが
どうすればよいでしょうか?
WebBrowserコントロールでDocuments and SettingsのHistoryを
パスに指定するとビューとして閲覧はできるのですが、
現在選択しているファイルがなんであるかを知る方法が見つかりませんでした。
0647デフォルトの名無しさん
2006/04/06(木) 00:44:54> OpenFileDialogで開いているカレントパスはどうやって取得するの?
ん?元質問者はコマンドライン引数としてパスを受け取っているけど
606の「まぁ漏れなんか」以下はそれまでの流れとは無関係な独り言だろ
少しは流れ嫁
> それでもやれというなら、相当のコストを払ってもらわないとね。
それでもやれって仕事があるわけで
当然相当のコストを払ってもらうわけですが
そもそも業務開発にオレ流は不要で、顧客がどこまでを望むかに対する成果物だけ
べき論もへったくれもないし、それを顧客に押し付けるのは開発者の傲慢
0648デフォルトの名無しさん
2006/04/06(木) 00:46:51自分でパスを取ってきてListViewなりに表示すればいーやん
WebBrowserがホストしてる内容を取る方がめんどい
0649デフォルトの名無しさん
2006/04/06(木) 00:48:35不毛で鬱陶しいから
どうしても書きたいならチラシの裏をやるから、これにかいてくれ、な
チラシの裏
http://yuukiremix.s33.xrea.com/chirashi/
0650デフォルトの名無しさん
2006/04/06(木) 01:46:15ウッキー!
0651646
2006/04/06(木) 07:51:52Historyの中身ってエクスプローラでみるとURLのリストが表示されるけど
実際はindex.datって1つのファイルに保存されています。
それを解析する必要があるのでしょうか?
0652646
2006/04/06(木) 08:04:06あとは自分で調べます。スレ汚しました・・・
0653デフォルトの名無しさん
2006/04/06(木) 09:41:05最初にぴっちり広げておいてAnchorsを全部チェックしてみたところ
一見それなりに動いてはいるんですが、
例えばステータスバーを非表示にするとその領域にまで自動的に広がってくれません。
0654デフォルトの名無しさん
2006/04/06(木) 10:38:27textBox1.Dock=DockStyle.Fill
とやってみたらいかがでそうか(´・ω・`)
0655デフォルトの名無しさん
2006/04/06(木) 15:09:02あとそのときは、コントロールのZオーダーに気をつけることじゃ。
0656デフォルトの名無しさん
2006/04/06(木) 19:18:41早速つまづいてしまいました。
本によると、フォームのデザイナを開き、サーバエクスプローラウインドウから、テーブルを
フォームにドラッグすると、sqlConnection1と、sqlDataAdapter1が追加されるとあるのですが、
テーブルをドラッグしても何も起きず、どう進めて良いのかわかりません。
テープルの参照などは問題なくできるのですが、プログラムからどうアクセスするのか、
どうもわかりません。
環境は、VS2005、SQLServer2000です。
どうぞ宜しくお願いします。
0657デフォルトの名無しさん
2006/04/06(木) 19:20:12これってやめられないの?
0658デフォルトの名無しさん
2006/04/06(木) 19:20:580659デフォルトの名無しさん
2006/04/06(木) 19:35:57Name 書き換えろ。
0660デフォルトの名無しさん
2006/04/06(木) 21:04:08その本2005に対応してないから無理だよ
0661デフォルトの名無しさん
2006/04/06(木) 21:36:35と書きますと
アンダーバーが引かれて"リンクにしたがいます"とかツールチップ表示されます。
いったい何の機能でしょうか?
0662デフォルトの名無しさん
2006/04/06(木) 21:40:48マニュアル購入したり、WEBで調査してもわかりませんでした。
CSV読込や配列の場所を読んでも、目的の部分がわかりませんでした。
データ11,データ12,データ13
データ21,データ22,データ23
データ31,データ32,データ33
(縦/横 カンマで区切られた二次元配列---->CSV(TXT)ファイル)
この、カンマで区切られた二次元配列のテキストファイルを
Streamreaderで一行読込(または全部読込)した場合、
どうしても、二次元配列型の変数(バファ)に格納したいのですが、
うまくできません。
x[2,2] <-- この二次元配列が全て埋まるように入れたいのですが
どうしても、x[0,0][1,0][2,0]にしか入りません。
うまく、カンマを区切りと認証して、横の配列にも格納
したい場合どのように記述すればよろしいのでしょうか?
ご指導お願いいたします。m(_ _;m)三(m;_ _)mペコ
0663デフォルトの名無しさん
2006/04/06(木) 21:46:53x の宣言と初期化はどうなってるんだ
0664デフォルトの名無しさん
2006/04/06(木) 21:51:13�@配列の宣言→string [,] x;
�Aメモリ確保→x = new string [2,2];
すみません、二日前に始めたばかりなので、
初期化はわかりません。。
すみません。
0665デフォルトの名無しさん
2006/04/06(木) 22:04:380666デフォルトの名無しさん
2006/04/06(木) 23:17:230667デフォルトの名無しさん
2006/04/06(木) 23:53:20それだと string[][] になるような・・・
0668デフォルトの名無しさん
2006/04/07(金) 00:10:26こっちはいちいち関連するスレ全部巡回してるわけじゃないから
同じ質問でも情報でもなるべくたくさん書き込んでくれ
いまどきたかがマルチぐらいでリソース枯らすような鯖なんて
使ってる掲示板サイトなんて無いから。
0669デフォルトの名無しさん
2006/04/07(金) 00:13:270670デフォルトの名無しさん
2006/04/07(金) 00:52:01基本的に複製しないでプログラムにひとつだけのものや機能だけを何度も使う場合やフォーム上の自作コントロールなどは
staticでも問題ないですか?
いろんなクラスから自由に使えるので、いちいちインスタンス化しなくても済むので便利なんですけど
0671デフォルトの名無しさん
2006/04/07(金) 00:56:01まあ自分しか使わないのなら別にどうでもいいんじゃね。
0672デフォルトの名無しさん
2006/04/07(金) 03:59:14使ってできますか?
0673デフォルトの名無しさん
2006/04/07(金) 07:24:37Loadなどのイベントに対して
何個のハンドラが追加されているか知る方法はありませんでしょうか。
0674デフォルトの名無しさん
2006/04/07(金) 07:58:21汎用的なのは無い。
0675デフォルトの名無しさん
2006/04/08(土) 11:59:190676デフォルトの名無しさん
2006/04/08(土) 12:00:44○できませんか
です。
0677デフォルトの名無しさん
2006/04/08(土) 12:02:120678デフォルトの名無しさん
2006/04/08(土) 12:03:350679デフォルトの名無しさん
2006/04/08(土) 12:31:57/* DoSomething */
}
こんなの?@C#3.0
0680デフォルトの名無しさん
2006/04/08(土) 15:08:410681デフォルトの名無しさん
2006/04/08(土) 15:21:42いいんじゃね
俺の感覚だと Predicate<T> で副作用のあることは絶対禁止で
Action<T> ならなんでもOK
0682デフォルトの名無しさん
2006/04/08(土) 15:48:09ユーザーによってラベルが変更さた場合、キーもラベルと同じにしたいのに
変更できないんですがどうすればいいでしょうか?
同じキーがあるかどうかや、キーによって値を取得したりキーをメインに使っているのに
ラベルが変えられると選択されているノードがどのキーかもわからず
また、新しくノードが使われた場合、ラベル名は被ってないけど、キー名が被ってしまったりするし
なぜ、キーを設定し直せないのか疑問なんですけど
エクスプローラーはどういう構造してるんでしょうか?
みなさんはこういう場合どうしてるんでしょうか?
0683デフォルトの名無しさん
2006/04/08(土) 15:59:540684682
2006/04/08(土) 16:05:44string key,
string text
)
のキーです
0685デフォルトの名無しさん
2006/04/08(土) 16:23:20AfterLabelEdit で書き換えれば?
んー、しかしどういう風に使うもんなんだろ。
今までに慣れてた身では思いつかんなぁ。
0686682
2006/04/08(土) 16:35:58TreeNode.Name
これはラベル名と思い込んでたんだけどキープロパティなのかな?
ちょっと調べてみます
SortedListなどにしても基本的にキーで管理するので
キー名と例えばタイトル名(SortedListに格納するオブジェクト名)を一緒にして管理し易いようにすると思うのですが
タイトル名が変わるとどうするんだ?ってとこでいつも行き詰まります
0687デフォルトの名無しさん
2006/04/08(土) 17:52:04buttonHogeHoge.Name = "buttonHogeHoge";
とかやたらに作ってくれるんですが
これ削ってもいいですよね?
削るとファイルサイズがかなり減るんですが
0688デフォルトの名無しさん
2006/04/08(土) 17:58:05Name は変数名と同じになってたはずだから。
0689デフォルトの名無しさん
2006/04/08(土) 18:29:31「未割り当てのローカル変数 'b' が使用されました。」とエラーが出ます。
int b;
for (int a = 1; a <= 10; a++)
{
b = a;
}
MessageBox.Show(b.ToString());
ところが int b を int b=0 と書き換えるときちんと 10 と表示されます。
バグのような気もするのですが、これって仕様なんでしょうか?
0690デフォルトの名無しさん
2006/04/08(土) 18:31:130691デフォルトの名無しさん
2006/04/08(土) 18:38:130692デフォルトの名無しさん
2006/04/08(土) 18:39:17これってほんとに仕様として定められてるのか?
0693デフォルトの名無しさん
2006/04/08(土) 18:49:55if(boolHoge) a=1; else a=0;
Console.WriteLine(a);
これはエラーにならないと思うよ
0694689
2006/04/08(土) 19:42:18コンパイルの時点で値が代入される保障がないということですか。
皆さんありがとうございます。分かりました。
0695689
2006/04/08(土) 20:55:17同様の事をVB6とVB.Netでやってみたら問題なく動きます。
WindowsDevelopersMagazine4月号P23のアンダース・ヘルスバーグのインタビューを読むと
違いがないように思えるのですが。C#の方がより厳格ってことなんでしょうか。
<VB.Net> 動いて10と表示される。
Dim a As Integer
Dim b As Integer
For b = 0 To 10
a = b
Next
Console.Write(a)
<C#2005> コンパイルエラー:未割り当てのローカル変数 'a' が使用されました。
int a;
int b;
for (b = 0; b <= 10; b++)
a = b;
Console.Write(a);
0696デフォルトの名無しさん
2006/04/08(土) 20:56:240697デフォルトの名無しさん
2006/04/08(土) 20:59:560698デフォルトの名無しさん
2006/04/08(土) 21:01:180699デフォルトの名無しさん
2006/04/08(土) 21:04:54If you do not specify an initialization value for a variable,
Visual Basic initializes it to the default value for its data type.
The default initialization values are as follows:
0 for all numeric types (including Byte).
(略)
つまり
Dim a As Integer
は
int a = new int();
と同じってこった
0700デフォルトの名無しさん
2006/04/08(土) 21:10:430701689
2006/04/08(土) 21:26:18ありがとうござういました。
0702デフォルトの名無しさん
2006/04/08(土) 21:27:370703デフォルトの名無しさん
2006/04/08(土) 21:30:08大抵の場合に面倒なだけなのは確かだけど。
0704デフォルトの名無しさん
2006/04/08(土) 23:59:45動的にForm.Controls.Add()してRemove()して
GC.Collectしてもデストラクタが呼ばれないんですが、なぜなんでしょう。
他で誰も参照してないように見えるんですが。
0705デフォルトの名無しさん
2006/04/09(日) 00:08:56あと Component 派生クラスでデストラクタ(というかファイナライザ)定義しちゃいかんよ。
protected Dispose(bool) をオーバーライドせんと。
0706デフォルトの名無しさん
2006/04/09(日) 01:17:43ボクのことを好きになってくれません
Class 祐美
{
private string 好きな人="";
public 祐美(string name)
{
好きな人=name;
}
}
Class 健太
{
public void 愛してる()
{
祐美 ゆみちゃん=new 祐美(健太);
}
}
0707デフォルトの名無しさん
2006/04/09(日) 01:20:250708デフォルトの名無しさん
2006/04/09(日) 01:22:08祐美はボクの妹なんで設計はあってます
0709デフォルトの名無しさん
2006/04/09(日) 01:27:410710デフォルトの名無しさん
2006/04/09(日) 03:26:48class 女 {
private string name = string.Empty;
private 男 好きな人 = null;
public 女(string name) { this.name = name; }
public string Name { get { return this.name; } }
public 恋する(男 man) { if (man.Isキモいニート) { throw new 絶望的Exception(man.Name); } this.好きな人 = man; }
}
class 男 {
private string name = string.Empty;
private bool isキモいニート = false;
public 男(string name, ) { this.name = name; }
public string Name { get { return this.name; } }
public bool Isキモいニート { get { return this.isキモいニート; } set { this.isキモいニート = value; } }
static void Main() {
男 俺 = new 男("健太");
俺.Isキモいニート = true;
女 妹 = new 女("祐美");
try { 妹.恋する(俺); }
catch (絶望的Exception ex) { Console.WriteLine("予期せぬ例外が発生しました。" + ex.Message); }
}
}
予期せぬ例外が発生しました。悪いことは言いません。健太さん、誰かに恋するなんてやめといた方がいいですよ・・・。おこがましいです。
0711デフォルトの名無しさん
2006/04/09(日) 09:36:370712デフォルトの名無しさん
2006/04/09(日) 10:08:11もう少しまともな例題選ぶかスレ選ぶかしてくれ。
0713デフォルトの名無しさん
2006/04/09(日) 16:44:07それぞれのイベントはそれぞれのコントロールで処理したほうがいいように思うんですが
コントロールが増えてくるとそれをすべてフォームクラスで中継して
データを参照したり受け渡ししたり変換したり、表示するように命令したりなどしなければならないのがすごく煩わしいです
0714デフォルトの名無しさん
2006/04/09(日) 16:46:28意味が分からん
0715デフォルトの名無しさん
2006/04/09(日) 16:52:06そうしたきゃそうすればいいよ。
絶対今よりも煩わしく複雑になるけど。
0716デフォルトの名無しさん
2006/04/09(日) 17:02:160717デフォルトの名無しさん
2006/04/09(日) 17:30:39UserControlがあるだろ。
設計とかそんなん自分で頭働かせて煩わしくないようにすればいい
0718デフォルトの名無しさん
2006/04/09(日) 18:18:58もしかしてFlashのActionScriptあたりの影響受けてるのか?
あの糞実装は現在「推奨されない記述方法」となっていてActionScript用のレイヤにまとめて書くことが推奨されてるぞ
どっかのレスにもあったが、処理の責任区分を明確にしてないからそういう糞発想が出るんだよ。
ボタンは一般的には「ユーザインタフェースとしてボタンを押すという入力を受け取る」機能が目的なんだから、その上位に対して「ボタンが押されたこと」を通知するのが責任区分
ボタンが押されたことに対してどう処理するかをボタンに責任持たせるべきだと思うか?
・・・まあ、思うからそうユーザ視点で処理を書いているんだろうな
開発者の癖にユーザ視点というのはデザイナー出身FlashActionScript屋っぽい発想だな
処理のレイヤを分割するのは今時の設計では基礎の基礎だと思う
ユーザ視点で処理を実装しているとそのうち破綻するぞ
0719デフォルトの名無しさん
2006/04/09(日) 18:19:200720713
2006/04/09(日) 18:57:22ボタンが押される→DATAを読み込む→DATAをテキスト形式に変換→テキストボックスに表示
↓
データを一覧できるようにリストに追加
この一連の作業をFormクラスで記述するのがどうもまどろっこしいんです。
小規模ならいいんですが、徐々に複雑になっていくとFormクラスがメソッドだらけになりそうで
パーティアルとかで分散クラスにすることもできるようですがしっくりきません。
なので、ボタンが押されたら、FormにRead("ファイル名");だけを記述すれば全部やってくれるようにしたかった
できれば、わざわざFormにイベント送ってくるんじゃなくてボタンクラスで処理できればと思ったり
ファイルを読み込むクラスと変換するクラスなどそれぞれ作っても
ファイルクラスにファイル名を送るのも、DATAをテキストに変換するクラスのメソッドにDATAを渡すのも
そのDATAをtextboxに渡すのもすべてFormクラスで記述するのって混乱しませんか?
って、発想から来てます。
0721デフォルトの名無しさん
2006/04/09(日) 19:03:20Formにイベント送ってくるんじゃなくてボタンにイベント送ってくるんだけど。
Formに記述してるメソッドをボタンのイベントに登録してるだけ。
好きなとこにメソッド書いて登録すればいいと思うよ。
0722デフォルトの名無しさん
2006/04/09(日) 19:10:320723デフォルトの名無しさん
2006/04/09(日) 19:12:14そんなに複雑なら、データ入出力クラス作っちゃえ。
すれば Form から分離することが出来る。
ところでパーティアルじゃなくてパーシャル。
0724デフォルトの名無しさん
2006/04/09(日) 19:15:45プロジェクト内のすべての.csファイルを一括印刷する方法はありますでしょうか。
0725デフォルトの名無しさん
2006/04/09(日) 19:15:52>>720
フォームは、自分にボタンとテキストボックスが乗っかってることを知ってるよな?
じゃあ、ボタンは、自分が載っているフォームにテキストボックスがあることを知ってるべきなのか?とか。
処理を仲介するものを1つ定義するとしたら、Form あたりが適切になってくると思うが。
0726713
2006/04/09(日) 19:18:37ボタンなどのコントロールはFormクラスでインスタンス化されたオブジェクトだから
外部のクラスからは他のクラスのオブジェクトは直接操作できないですよね?
いや、コントロールをすべてpublicにしてしまえばいけますけど、よくないですよね?
だから、好きなとこにメソッド書いてもアクセス権が無ければ意味がないわけで
結局、コントロールを配置してるFormクラスですべてのコントロールのデータ受け渡し表示まで
管理しないとダメってことになりますよね?
Formクラス→それぞれのコントロール管理するクラス→コントロールクラス
みたいな構造が理想かな?
管理クラスをFormで宣言して、管理クラス内でコントロールを作成したらいけるんでしょうが
そうなると、グラフィカル(IDEでマウス操作で)にコントロールのプロパティや外見を作成できず、
すべてコードで記入しないといけないですよね?
>>720のような一連の作業の橋渡しをするようなクラスを実現したいんです
0727デフォルトの名無しさん
2006/04/09(日) 19:26:090728デフォルトの名無しさん
2006/04/09(日) 19:26:44その場合にしかないような処理ならば、そのFormでしてもいいんじゃないか?
要はコントロール郡をまとめる管理クラスをFormがかねてるのが気に食わないんでしょ?
0729713
2006/04/09(日) 19:36:09コントロール分権型のほうが扱い易くないですか?そうでもないですか?
別クラスと言っても、結局Formクラスにコントロールがある以上は
データの中継はFormクラスを通さないといけないわけで
自分でも何言ってるのかよくわからなくなってきましたがw
コントロールの管理はFORMがするのが基本なんですか?
>>728
> 要はコントロール郡をまとめる管理クラスをFormがかねてるのが気に食わないんでしょ?
そうなんです。繰り返し使う関数や処理はできるだけ別クラス作ってますが
クラスが増えれば増えるほど、クラスのメソッド呼び出し、データ受け取りなど増えていきませんか?
今Formクラスのメソッドは呼び出しとデータ受け渡しだらけです。こんなもんなんでしょうか?
0730デフォルトの名無しさん
2006/04/09(日) 19:38:260731デフォルトの名無しさん
2006/04/09(日) 19:39:25>繰り返し使う関数や処理はできるだけ別クラス作ってますが
これが間違いっぽい。
0732デフォルトの名無しさん
2006/04/09(日) 19:40:13そんなん知るか
0733713
2006/04/09(日) 19:40:29データの受け渡しなどはしてほしくないんです
そういう内部的な動作は別のクラスに一挙にまかせて
Formはそれぞれのコントロールのイベントを取得して
内部処理クラスにそういうイベントがありましたよってのを通知するだけにしたいんです
0734713
2006/04/09(日) 19:44:11連動させるのがその二つだけの小規模なものならいんですが
大量にコントロールが増えた時のことを考えてください
そうなるとFormの二の舞です
>>731
そうです。C#を実現するために、windows上にframeworkがあるようなもんです
>>732
簡単にいうとそういうことです。
一つ一つのクラスのメソッドはできるだけ少なくしたいんです
0735728
2006/04/09(日) 19:47:14同じような繰り返し処理が分離でき再利用されるものなら関数としてであろうがクラスとしてであろうが分離すべし。
まぁ自分はビューとコントローラはそこまで分離させないが。
0736デフォルトの名無しさん
2006/04/09(日) 19:51:53プレゼンテーション層であるFormにビジネスロジックなんて載せないだろ
ビジネスロジック用の別クラスを作ってButton→Form→ビジネスロジックのメソッドってやるだろが
自分で勝手にFormを中央集権にしてるんじゃん
だから処理の責任区分が曖昧だっつーの
0737713
2006/04/09(日) 19:59:02もちろんビジネスロジックは別に用意してますよ
何度もいうようにそれぞれのコントロールを中継する役割をFormがやるのが気に食わないんです
×Button→Form→ビジネスロジック
○Button→ビジネスロジック
これならいいんです。すべてのコントロールの中継するためのコードだけでも
大量になりますよね?>>720のような一連の作業をFormを通さないでできますか?
私が言ってるのはそういうことなんです
Formからすべてのコントロールのパブリックメソッドにアクセスできるような状態が嫌なんです
0738デフォルトの名無しさん
2006/04/09(日) 20:03:13ボタンのイベントにビジネスロジックの呼び出しを登録すればよいだけ。
0739713
2006/04/09(日) 20:07:04中継するためのコードのことです
private textView()
{
string[] data=ファイル入出力クラス.FileOpen("ファイル名");
string[] text=変換処理クラス.ConvertToText(data);
textBox1.Text=text;
}
↑のようなコードをFormクラスで書きますよね?こういうのがウザいんです
たったこれだけならいいですが、コントロールの数だけ、変換処理の種類だけ
大量に書かないといけないわけで、それが嫌なんです
0740デフォルトの名無しさん
2006/04/09(日) 20:08:17知らんがな
マイクロソフトに言えや
0741デフォルトの名無しさん
2006/04/09(日) 20:15:070742デフォルトの名無しさん
2006/04/09(日) 20:21:58好きなクラスに書いたらいいがな
ところで型まちがってるよ
0743デフォルトの名無しさん
2006/04/09(日) 20:26:48Button1_Click {
Text1.Text = Hoge.ReadAndConvert("ファイル名");
}
って感じで。
0744デフォルトの名無しさん
2006/04/09(日) 20:32:23そのコードが Form クラスにかかれるのが気に食わないらしいんですよ
0745713
2006/04/09(日) 20:32:53そのイベントドリブンをFormに書くってことですよね?
既に、私のFormはそういう感じです。
ほとんどの処理がイベントドリブン内で収まってます
メソッドやフィールド、プロパティなどはほとんどありません。
でも、コードはだんだんと長くなりFormクラスを圧迫しつつあります
イベント処理をFormに書くことが嫌なんです
Formはほっといてほしいんです
0746デフォルトの名無しさん
2006/04/09(日) 20:33:54知らんがな
マイクロソフトに言えや
0747デフォルトの名無しさん
2006/04/09(日) 20:35:13ホームはほっといてほしいんです
はい、続けて
ホームh(ry
0748デフォルトの名無しさん
2006/04/09(日) 20:36:10Private Button1_Click() {
Controller.Button1_Click();
}
Class Controller {
void Button1_Click() {
// 処理をここに書く
}
}
ってやりたいと? それこそ無駄だと思うなw
0749デフォルトの名無しさん
2006/04/09(日) 20:36:21必要な処理はManagerクラスにでも書く。
そのイベントドリブン処理が全部マネージャークラスに行く。
0750749
2006/04/09(日) 20:38:41Form(){
button1.Click+=new ButtonEventHandler(controller.DoClick);
}
}
Controller{
void DoClick(){
sukinasyori
}
}
0751デフォルトの名無しさん
2006/04/09(日) 20:38:56IDE のサポートがなくなっちゃうしな・・・
0752713
2006/04/09(日) 20:40:32私はまだC#を熟知したわけじゃありません。
一通りのC#の概要について一読しただけで
これからアプリを作成しようと思っている若輩者です
ここにいる住民の方々なら匠の技を教えて頂けるのではと思い相談に上がった次第です
わたしの言っていることは傲慢なんでしょうか?
一般的なプログラミングとはかけ離れた妄想なんでしょうか?
もしそういうことなら遠慮なくそうおっしゃってください。
一般的にはこうするものだと言っていただければ従います
クラス設計をするに当たってただ単に質問させて頂いただけなんです
不快な気持ちにさせようとしている訳じゃない事をご了承ください
0753デフォルトの名無しさん
2006/04/09(日) 20:43:02少なくとも、MS はフォームの責務としてイベントを受け取るところまではやるべき、という考えなんだろ。
IDE はその考えに基づいて作られてるから、あくまで我を通したいというなら IDE のサポートは期待
しないこった。
0754デフォルトの名無しさん
2006/04/09(日) 20:49:01textBox.Text = this.LogicController.GetDataText("filename");
}
一行ならだめか?
コントロールの数だけクラス作るほうがめんどくさいと思うんだが。
713の理想のコードってコマンドパターンチックに行く感じ?
class GetDataButton: Button{
protected override void OnClick(EventArgs e){
/**/
}
}
0755デフォルトの名無しさん
2006/04/09(日) 20:56:52そっちの理想だと、Button と動作が完全に癒着しているけど良いの?
ボタンを押すことと、処理を行うことはそこまで密接に関係があるのか。
とりあえず、悪いとは言わない。色んな方法があるから。
0756713
2006/04/09(日) 21:05:10なるほど、Formにイベントドリブンを記述しないとそうなりますか
IDEを恩恵を捨ててまで初心者がやるべきことではないということですね
>>754
イベント処理をFormで受け取って、イベント処理内容を別クラスに定義するということですよね?
でも結局イベントはFormで受け取っている以上、実際には1行では済まなくなると思います
ファイルが存在しなかったら?ファイル内容が○○だった場合の処理分岐は?など
イベントを受け取る側では実行結果後の分岐処理が待っているんだと思います
やはり、すべてFormでデータの受け渡し、データ入出力要請などをしないとダメっぽいですね
Formコードが長くなったらパーシャル使うなど・・・と言った感じですか。
>>755
クラスはできるだけ隠蔽すべきだってのを呼んでいると、Formクラスから多くのコントロールが見えてしまうのは
あまりよくないんじゃないのか?それだったらコントロールごとに動作と連携させればいいんじゃないか?
そしてデータ構造や動作に関してはFormクラスからは見えないようにしたほうがいいんじゃないのか?って発想なんです
それぞれのコントロールはお互い何をやっているかもわからないし、ただ与えられただけのことをやればいいみたいな感じです
アクセス修飾子に関しても、publicprotectprivateとかじゃなくて、このクラスとだけ入出力できるような特定できればいいんですけど
public(bottun1) Class ボタンの動作//Bottunからだけ見える管理クラス
{
}
みたいな感じですね。こうなると別のネームスペース、プロジェクトを作れということなのかな?
0757デフォルトの名無しさん
2006/04/09(日) 21:05:17漏れのお勧めは
Form{
Form(){
button1.Click+=new EventHandler(button1_Clicked);
}
private void button1_Clicked(object sender, EventArgs e){
this.Controller.Execute();
}
}
Controller{
void Execute(){/**/}
}
結果はExecuteの戻り値なりイベントなりで取得。
さらにコントロールが多かったりするとbutton1とロジックを結びつけるコンポーネント作ったりしてるけど
button1.Click += ....のところを
LogicAndViewTieManager.Join(button1, this.Controller.Execute);みたいな
0758デフォルトの名無しさん
2006/04/09(日) 21:20:21・・・・・・? そこまで自分の考えがまとまっているのなら、それでやればいいじゃん。
Button クラス継承して、イベント引っ掛けてデータ処理して・・・・・・ Form 介さずにも何とか出来るよ。
0759713
2006/04/09(日) 21:32:04うまく例えられないですけど、フォルダのサブフォルダのそのまたサブフォルダのって感じで
多段階層に対しての管理はそれでやるとまとめられると思うけど
私がほしいのは横とのつながりなんです。Form上のTextBoxとListViewのデータの受け渡し変換など
>>758
その言葉聞くとなんだか自分の考えがおかしいような気がしてきた
私がやろうとしてるのは
IEでお気に入りのURLをクリックするとHPが開かれる
けれども、URLのボタンにHP内の画像や文字列が格納されてるわけじゃない
HPはHPでサーバーが管理しているわけで・・・
やっぱり、ボタンなどコントロールにデータ管理処理などすべてをやらせるのは
逆に管理が大変になるでしょうね
0760デフォルトの名無しさん
2006/04/09(日) 21:37:42渡したい値はEventArgs継承型に全部いれちゃって。
0761デフォルトの名無しさん
2006/04/09(日) 21:48:27Controller内にpublicで定義して、イベントとして登録する使い方ではsenderに依存しちゃいけないと思うし
0762デフォルトの名無しさん
2006/04/09(日) 21:58:550764デフォルトの名無しさん
2006/04/09(日) 22:43:550765デフォルトの名無しさん
2006/04/09(日) 22:44:130766デフォルトの名無しさん
2006/04/09(日) 22:46:520767デフォルトの名無しさん
2006/04/09(日) 22:48:26まずさ、マイクロソフトの提示するやりかたをキッチリ理解してよ
次に開発の一般的な実装方法を学習してよ(デザインパターンとか)
当然の知識が無いのに「オレ流の正しさを理解してくれ」って語られても困るんだよね
0769デフォルトの名無しさん
2006/04/09(日) 23:02:57>それはかっこ悪いです
ControllerがFormのかわりにコントロールを管理したいんやなかったの?
ポインタも知らんとどないして管理するつもりやねん。
0770デフォルトの名無しさん
2006/04/09(日) 23:03:34{
EventHandler handler = base.Events[eventKeySizeChanged] as EventHandler;
if (handler != null)
{
handler(this, e);
}
}
On〜メソッドを追加するたびに似たようなコードを書くのは気持ち悪いので、
この中身をOn〜から汎用的に使える1つのメソッドにまとめられませんか?
0771デフォルトの名無しさん
2006/04/09(日) 23:06:42base.Events 使うなら、RaiseEvent メソッドでも作ってそれにイベント識別オブジェクト送れ
0772713
2006/04/09(日) 23:16:14コントロールの参照を渡すなんてかっこ悪いと思います
小規模ならいいですけど
複雑になってくるとどうなりますか?
Controller.メソッド(textbox,listview,ファイル名、データ名、何行目?、、、)
これこそ余計に混乱しますし、無駄な処理です
0773デフォルトの名無しさん
2006/04/09(日) 23:18:17以後スルーします
0774デフォルトの名無しさん
2006/04/09(日) 23:22:080775デフォルトの名無しさん
2006/04/09(日) 23:23:370776デフォルトの名無しさん
2006/04/09(日) 23:24:55学習目的なんだからそのくらい経験してみないと。
0777デフォルトの名無しさん
2006/04/09(日) 23:36:350778デフォルトの名無しさん
2006/04/09(日) 23:56:210779デフォルトの名無しさん
2006/04/09(日) 23:58:43そういうときはインタフェイスを使うんだよ。
0780デフォルトの名無しさん
2006/04/10(月) 00:38:460781デフォルトの名無しさん
2006/04/10(月) 00:58:59初めて数週間で仕様のバグを見抜いたら天才だよな
0782デフォルトの名無しさん
2006/04/10(月) 01:04:430783デフォルトの名無しさん
2006/04/10(月) 01:25:05機能追加できるようになるC#3.xまで待てば?:)
0784デフォルトの名無しさん
2006/04/10(月) 01:30:51あちこちでいろんなものを管理すると分散するし参照の引き回しがややこしくなるから
すべての持ち主であるFormが管理するようになってるんだと思うがなあ。
いやなら別のクラスに分けるけど、分けた以上は必要な参照は渡さざるを得ないし。
ひょっとしてjavaでWebプログラミングしてた人?
0785713
2006/04/10(月) 01:31:59似通った振る舞いをそれぞれのクラスがする場合に一貫性を保つ位置付けであると考えてます
それにインターフェースを付けたからといって根本的な解決にはなっていないようにも思えます
0786デフォルトの名無しさん
2006/04/10(月) 01:32:02おいおい無茶言うな
ちなみに無茶ってのは3.0を待つということじゃなくて解決になってないってことな。
0787デフォルトの名無しさん
2006/04/10(月) 01:36:490788デフォルトの名無しさん
2006/04/10(月) 01:37:37C#が気に入らなければ自分で言語作れば?
0789713
2006/04/10(月) 01:39:36その通りです。参照の引き回しをしたくないから、単純に別クラスにすればいいとか
イベントドリブンを包括するクラスを作ればいいとかそういう問題ではないんですよ
例えば警備会社がここの家を監視しているとして、警備会社の社長がすべての家をモニタするでしょうか?
実際は従業員がそれぞれの家を監視するわけです
Formは言わば社長なんです。それぞれのコンロールを保持しているけれども、管理まではさせたくないんです
あるクラスは、ファイルの入出力からTextBoxに表示するまでを管理して
あるクラスは、TextBoxのデータを元にListViewに表示する
あるクラスは、データの入出力だけを管理する
と言った具合に、管理する業務を分担したいんです
これらをすべてメソッドで書くなんて大変です
あと、プログラミングはまったく初めてです。今までしたことがありません
C#が初めてです。
0790デフォルトの名無しさん
2006/04/10(月) 01:42:080791713
2006/04/10(月) 01:47:42でもその頃は小学生だったのでほとんどまともなことができません
ドラクエのみたいに背景がスクロールしてキャラが動く程度です
0792デフォルトの名無しさん
2006/04/10(月) 01:53:41いい加減空気読んで回線切ろうね。
0793デフォルトの名無しさん
2006/04/10(月) 02:03:14その下にFormという中間管理職がいるのが妥当では?>例えると
0794713
2006/04/10(月) 02:03:29では、今日はこの辺にしておきます
また、進展ありましたら報告しにやってきます。
ありがとうございました
0795デフォルトの名無しさん
2006/04/10(月) 02:04:540796713
2006/04/10(月) 02:05:29そういう話になれば、OSが社長で中間管理職(中間コンパイラ)がFrameworkなわけで・・
そういう次元の話ではないんですよ。あくまで例えですから。
0797デフォルトの名無しさん
2006/04/10(月) 02:09:220798デフォルトの名無しさん
2006/04/10(月) 02:11:49それでもなお自説にこだわるってのはどうなんだか。
0799デフォルトの名無しさん
2006/04/10(月) 02:16:06聞いてもいない自分のことを語り出した時点でダメだこりゃと思った
0800713
2006/04/10(月) 02:26:37みたいなことを言われるので言ったまでの話です。
普通の会話だと思いますが、プログラマのみなさんには
命令したこと以外のことが起きると困惑されるみたいですね
0801デフォルトの名無しさん
2006/04/10(月) 02:32:030802デフォルトの名無しさん
2006/04/10(月) 02:40:090803デフォルトの名無しさん
2006/04/10(月) 03:10:27君の心の中を書いてあげるよ
・自分が絶対
・自分が正しいと思ったことは客観的に見ても正しい
・自分が違うと思ったことは客観的に見ても誤っている
・自分の意見を理解できない人々はおかしい人々だ
・だからどうして私の高尚な意見を理解できないんだクズ共が
こんなとこだろ
少しは他人の意見に耳を傾けて脊髄反射レスするまえに勉強しろや
0804デフォルトの名無しさん
2006/04/10(月) 03:14:05> あるクラスは、ファイルの入出力からTextBoxに表示するまでを管理して
> あるクラスは、TextBoxのデータを元にListViewに表示する
カプリングとコヒージョンからやり直せ。責務の持たせ方がめちゃくちゃ。
> あるクラスは、データの入出力だけを管理する
これはまぁいいけど。
0805デフォルトの名無しさん
2006/04/10(月) 03:31:53それだけで処理を GUI から切り離して考えられる。
0806デフォルトの名無しさん
2006/04/10(月) 07:17:18それに対する713の反論は概念と断片的な例だけで具体性が無く「○○だから△△」という対症療法的な稚拙なものばかり
713は脊髄反射する前に反論に含まれる定石を理解すべきだと思うがな
それらの定石が成立するまでには数年に渡る多くの人間の試行錯誤があるわけで、たかが一個人が10日程度試行錯誤したものとは次元が違う
0807デフォルトの名無しさん
2006/04/10(月) 07:29:51って感じでおk?
0808デフォルトの名無しさん
2006/04/10(月) 08:10:51713以外は。
0809デフォルトの名無しさん
2006/04/10(月) 08:19:24「自分の理解を超えるものは全否定」っていう、厨房天才の典型パターンじゃまいか。
それで自己完結して自己解決しているならどうでもいいけど、こうして語られると鬱陶しいね。
何を言っても「自分の理解を超えるもの」だから、厨反論しかしてこないしね。
0810デフォルトの名無しさん
2006/04/10(月) 09:29:51pertial は、IDE のデザイナ側が弄るファイルとプログラマ側が弄るファイルを明確に分離するのが一番の目的。
まあ、長くなるから分けるってのは俺自身やったことあるから何ともいえないけど。
0811デフォルトの名無しさん
2006/04/10(月) 09:36:20だめだ。このキーワード自分で打つ機会が少ないから憶えらんない。・゚・(ノД`)・゚・。
0812デフォルトの名無しさん
2006/04/10(月) 09:42:530813デフォルトの名無しさん
2006/04/10(月) 09:50:040814デフォルトの名無しさん
2006/04/10(月) 10:53:10ネストクラスで長いの分けて書いたりしてみたけども(Internalに
すればいいんだがもっと厳密にアクセサビリティ追求してみよう
と思って)いまいち使い勝手がよくない。
さらにprojファイルいじってdependentUponなんてしてみたが
結局戻した。
いや、見通しはよくなりはするんだけど。やるまでもないっていうか
0815デフォルトの名無しさん
2006/04/10(月) 14:07:14そのたとえなら、Form社長はControl従業員の名簿くらいは持っていて、
いま誰が何の業務でどこに配備されているか把握しておくものだろ。
現場での業務内容は、ビジネスロジックという名の
業務手順書に書いておけばよくて、社長は把握しなくてもいい。
この手順書さえあれば、web新社長が就任してフリーターのsubmit君を
雇ったときにも対応できる。
従業員や職種が増えたらUserControl課長を雇うんだよ。そのとき社長が
把握するのは課長と一部の直属従業員。
Formにビジネスロジックまで書くのはワンマン社長のやることで、
Formにコントロールのイベントハンドラすらないのは放漫経営だ。
0816デフォルトの名無しさん
2006/04/10(月) 14:25:37根本を理解してもらうしかない
0817デフォルトの名無しさん
2006/04/10(月) 14:34:060818713
2006/04/10(月) 16:42:00あれからいろいろ調べたところ、Form1をインスタンス化するクラスとそのクラスを実行する
メインエントリクラスを作ることで分担させることができました
つまり、Form1を包括するクラスとそれを包括するクラスを用意したわけで
これで作業分担できそうです。とりあえず、これでやっていきたいと思います
0819デフォルトの名無しさん
2006/04/10(月) 17:02:380820デフォルトの名無しさん
2006/04/10(月) 17:14:080821デフォルトの名無しさん
2006/04/10(月) 17:27:470822デフォルトの名無しさん
2006/04/10(月) 17:34:44もういいや。少しでも手助けしようとした自分が馬鹿だった。
0823デフォルトの名無しさん
2006/04/10(月) 17:36:380824713
2006/04/10(月) 17:47:11もうしてます
>>822
してますよ。包括クラス1はコントロール間の管理、包括2はファイル入出力とデータコレクションクラス間の管理
何度も言ってますが、ビジネスロジックは別に設けています。ここでいう管理はクラスの振る舞いに対する指示だけです
0825デフォルトの名無しさん
2006/04/10(月) 17:49:11レベルの低い人間からの常識外れな議題でみんな困惑したんだよ
何言っても理解できないレベルの人に教えるのは本当大変な事なんだよ
0826デフォルトの名無しさん
2006/04/10(月) 17:51:50君の脳内結論に非常に興味がある
是非blogかWikiに書いてくれ
ここまで定石ができあがった業界に対して疑問を持ち自分なりの結論を得たというのは興味深い
もしかして定石に一石を投じる結果になるかもしれない
だから今度はオレ達に教えてくれ
0827713
2006/04/10(月) 17:59:211つ1つのコントロールは多種多様な振る舞いをするわけで、その振る舞いを一括して支持するのが
Form1クラスだけというのは負担が大きすぎます。
会社の組織に例えるとForm1は直属の上司と言った所でしょうか
その上司にも上司がいるわけで、木の枝のように指示内容も量も広がっていきます
それぞれの節目に管理クラスを設けることで、できるだけ分散させようという試みです。
例えば、あるコントロールの動作を変更したいと思った場合、Form1の数多くあるメソッドの中から
変更に関係あるメソッドを探すのは大変です。管理職と現場はグループ化していればこういう問題は起きません。
みなさんも試してみてください。そうすれば私が言っていることがわかるでしょう。
0828821
2006/04/10(月) 18:01:19俺の言ってることって
class Form1:form {
MyButton1 button1;
MyButton2 button2;
中略
class MyButton1 :Button {
てきとうなしょり
てきとうなOnイベントメソッド
}
class MyButton2 :Button {
てきとうなしょり
てきとうなOnイベントメソッド
}
}
こんなかんじのことっすよ(´・ω・)
こんなんやってるほうが狭軌の沙汰だと思うんだが
0829デフォルトの名無しさん
2006/04/10(月) 18:02:38既にそうなってくるとスレ違いなので
どっかにまとめてきておくれ。ここに書かないで下さい。
0830713
2006/04/10(月) 18:08:12それならそうと最初に言ってください。そういうことはしていません。ダサいです。
今私が議論していることはそんな低次元なことじゃないんですよね・・・。
昔から要領がよくて何でもすぐ出来てしまう私は飽きっぽいんですよ。
私はこの1ヶ月間で実質的なプログラミングはしていません。
C#の概要とオブジェクト志向について学んだだけに過ぎません。
いや、実際のところプログラミングよりそこが重要なんですけどね。
アルゴリズムは多くあれど、プログラミング手法についてはまだまだ
介入できる隙があるようですけどねw
0831デフォルトの名無しさん
2006/04/10(月) 18:11:12もうお触り禁止
0832デフォルトの名無しさん
2006/04/10(月) 18:12:04CompositeとかDecoratorあたりだろ。
そもそもIDE自体はMicrosoftが想定してるデザインに基づいて動いているだけで他のデザインが間違ってるわけじゃない。
独自のデザインでやるならGUI配置等の恩恵は諦めろ。
0833デフォルトの名無しさん
2006/04/10(月) 18:12:38もし本当に何か新しい方法を見つけたと思ってるのなら
どっかにサンプルコードをまとめてくれませんか。
私は馬鹿なので827のように日本語で書かれても
実際どんな実装をしているのか分からないのです。
0834デフォルトの名無しさん
2006/04/10(月) 18:13:07>大量にコントロールが増えた時のことを考えてください
>そうなるとFormの二の舞です
すいません、このへんの話とどう違うのかわかりません・・・。
0835デフォルトの名無しさん
2006/04/10(月) 18:19:08例えば、テキストボックスの脇に「参照」ってボタンつけて
ボタン押すとファイル選択ダイアログを開く
そしてそのファイル名をテキストボックスに入れる
こんな実装を結構使うわけだけど
確かにこの場合、ボタンは該当するテキストボックスとしか関係しないわけで
このテキストボックスとボタンを綺麗にまとめてカプセル化し、
かつ、いちいち独自のユーザコントロールを作ったり継承したりしないで、
かつ、現在のIDEのGUIと矛盾しない、楽な方法があるなら
俺も知りたい
0836713
2006/04/10(月) 18:33:11私が議論しているのはまさにそれですね。
つまり、Form上でインスタンス化されたオブジェク群は平社員です。
横並びでずらーっと並んでいるわけですよ。それをFormだけが管理するのが
開発効率的にも、そしてクラスを隠蔽するという原因となった人間の誤操作と点でも問題なんですよ。
オブジェクト同士が横と繋がるパイプラインをどう持たせるかが問題なわけです。
ユーザーコントロールというのも手ですが、これは効率がよくありません。
グループ化は動的で柔軟に対応できるようなものでないと意味がありません。
しかし、現在のところIDEが対応していないということなので、Formクラスを包括するクラスをいくつか作り
自制しながらプログラミングするしかないのが現状だということなんです。
0837デフォルトの名無しさん
2006/04/10(月) 18:42:16最終的に Control 系は、クラス階層的にも Composite 階層的にも木構造だから。
葉と葉は、直接連絡しあえないんだよね。必ず幹を通らなくては、隣の葉にすら移動できない。
木構造を止めてしまえば直接つなぐことが出来るけど、
管理しにくくなるというデメリットまで許容することが出来るか〜ってのは問題かな。
0838713
2006/04/10(月) 18:53:40すいません。ちょっと語弊がありました。
オブジェクト同士の連携は直接というより、管理クラス(幹)がほしいわけなんです
そうでないと、隠蔽どころか完全なブラックボックスですからね
隠蔽と言っても必要な情報はやりとりしたいわけで。
M$のIDEは木の根から多数の葉が生えているような状態なんですよ
これが非常にうざいんですよね。面倒なだけでできなくはないですが
プログラミングを本職にしている人ならわかると思いますが、できるだけじゃダメですよね?
時間を節約できる効率的なプログラミングを目指しますよね?
ある一連の振る舞いを管理するためだけのクラスがあったら便利と思いませんか?
平社員の連携を保つために、わざわざ社長が指導するんでしょうか?
私が言ってるのはそういうことなんです
0839デフォルトの名無しさん
2006/04/10(月) 18:57:08つ component (見えない奴)
参照ボタンなるユーザ定義コンポーネントを作って、それのプロパティに
ボタンとテキストボックスを指定できるようにすればいいんじゃない?
>>836>>837
Panel みたいな見える奴にいれるから階層構造になっちゃうわけで、
単に論理的にまとめ(て機能させ)るだけなら見えないのから参照させて
おけばいい。
0840713
2006/04/10(月) 19:09:40student.Name
student.学校名
student.クラス名
というのがあってこれをそれぞれのコントロールに渡す処理をするとします
Class Form
{
public View()
{
textBox1.Text=student.Name;
comboBox1.Text=student.学校名
listView1.Items.Add(クラス名);
}
}
どうですか?面倒ですよね?まあ、これぐらいじゃ別に面倒でもないか
しかし、データの種類や量が多くなってきたらどうなりますか?
↓のようなのが理想だと思います
Class Form
{
public View()
{
//管理クラスにstudentを渡すことで
//上記のようにそれぞれのコントロールに表示されます
管理クラス(student);
}
}
0841デフォルトの名無しさん
2006/04/10(月) 19:13:03実質的な手間は変わらんし
まあ見た目はしらんが
0842デフォルトの名無しさん
2006/04/10(月) 19:15:50Form には形のある Control しか貼れないわけじゃないでそ?
Menu と MenuItem の関係のように、「生徒管理」とかいうコンポーネントを
それのプロパティ textBox に textBox1 を、comboBox に comboBox1 を、
ListView に ListView1 を指定して、データソースなりアレイのプロパティ
なりで student(s) を渡してやればいいんだよ。、
0843838
2006/04/10(月) 19:18:43悪い。管理クラスが欲しいにもかかわらず、その管理クラスを作るのを面倒に思っているように見えた。
UserControl 使って管理クラス作ればいいじゃん。
0844デフォルトの名無しさん
2006/04/10(月) 19:19:360845デフォルトの名無しさん
2006/04/10(月) 19:26:46class 管理クラス : UserControl
{
public 管理クラス(Student student)
{
textBox1.Text=student.Name;
comboBox1.Text=student.学校名
listView1.Items.Add(クラス名);
}
}
0846デフォルトの名無しさん
2006/04/10(月) 19:38:24つか何年前の議論だこれ?
0847713
2006/04/10(月) 19:39:48UserControlは嫌なんですよ。
ファイルダイアログとテキストボックスなど近くに配置して
単純な連動するものならいいですが、
UserControlでは、全体のデザインを変えなくてはダメじゃないですか
デザインにもこだわりたいし、それから、listviewにアクセスするコントロールは別にもあるんです
Aコントロールから、targetコントロールへの連動
Bコントロールから、targetコントロールへの連動
この二つを独立させたいんです。単純に機能がまとまってるなら私もUserControl使ってますよ
それから、話はそれだけじゃないんです。ファイル入出力から表示するまでの一連の動作を管理したいんです
それからcomponentクラスのヘルプが「情報がありません」とかで見れませんでした
ComponentEditorForm クラスのヘルプは見れたので多分同じような機能だとは思いますが
これもユーザーコントロールみたいにコントロールをカプセル化するための機能なんじゃないですか?
0848デフォルトの名無しさん
2006/04/10(月) 19:40:10> {
> public View()
> {
> //管理クラスにstudentを渡すことで
> //上記のようにそれぞれのコントロールに表示されます
> 管理クラス(student);
> }
> }
管理クラスの中で何をやってるのか教えてよ。
0849デフォルトの名無しさん
2006/04/10(月) 19:43:04UserControl が嫌なら、管理クラス作ればいいじゃん。何を迷ってるのさ。
それから、管理は一元化するべき。listview に直接アクセスするオブジェクトを2個も3個も作るとややこしくなる。
0850デフォルトの名無しさん
2006/04/10(月) 19:43:04コンポーネントじゃだめなの?
Formを経由せずに複数の情報を必要な範囲で連携させる方法って正しくコンポーネントだと思うんだけど
フォームはコントロールのホストって構成ならASP.NETなんてもっと顕著だろ
ノンプログラミング(フォームは構造定義に特化)でblog作ったりできるわけだし、Windows Formでもコンポーネント使えばFormのコードに全く触らずコントロール連携中心の開発もできる
「知らないから実装されていない」って思い込んじゃ駄目だよ
0851デフォルトの名無しさん
2006/04/10(月) 19:45:24> これもユーザーコントロールみたいにコントロールをカプセル化するための機能なんじゃないですか?
偉そうな口聞くならさ、自分の中でヘルプ見れば分かるレベルの疑問を解決してからにしてよ
プログラム初めて何日だか知らんが、同じレベルで会話したいんならんな逃げ口上使うなや
0852デフォルトの名無しさん
2006/04/10(月) 19:46:41>それから、話はそれだけじゃないんです。ファイル入出力から表示するまでの一連の動作を管理したいんです
それまで全部やってくれる管理クラスを、なぜ作ろうとしないのか。
0853デフォルトの名無しさん
2006/04/10(月) 19:48:20君のその実装方法で何か作ってよ
外枠ばっかりで具体例が無いからわけわかんない
一つのものを作り上げてそこから見えてくるものもあるだろうし
とりあえず簡単なDB編集ツールでも組み上げて公開してよ
プログラムってのはコントロールだけじゃないんだからデータベースなんかにも対応できるんだよね?
0854デフォルトの名無しさん
2006/04/10(月) 19:49:55>これもユーザーコントロールみたいにコントロールをカプセル化するための機能なんじゃないですか?
合ってる。
というより Form 含め GUI は、ユーザからの入出力のみを担当するべきだと思うんだけどな。
それ以外のデータ処理は別の箇所で行うべきじゃないのかなって。
0855デフォルトの名無しさん
2006/04/10(月) 19:53:200856713
2006/04/10(月) 19:54:04過去ログぐらい見てくださいよ。
ユーザーを入力によってイベントが発生して、そして一連の動作が発生するわけなんですよ
そのイベントをどこが拾いますか?Formじゃないですか?
一連の動作するクラスをFormから呼び出す場合、その動作に必要なコントロールポインタを
すべて渡さないとだめじゃないですか
何度もいうように
Form→管理クラス→コントロール
→ファイル入出力
→データ管理
のような構造が理想だと言っているんです。
>>851
ヘルプがないんだから仕方がありません。
0857デフォルトの名無しさん
2006/04/10(月) 19:57:19>そのイベントをどこが拾いますか?Formじゃないですか?
Form じゃなくても良いですよ。
>Form→管理クラス→コントロール
> →ファイル入出力
> →データ管理
>
>のような構造が理想だと言っているんです。
だから、その理想に従って管理クラス作ればいいじゃん。
悪いとは言ってない。設計思想は人によって異なるから。
0858デフォルトの名無しさん
2006/04/10(月) 19:58:320859713
2006/04/10(月) 19:58:58もちろんそうですよ。ビジネスロジックはそれようのクラスが担当すればいいだけで
私が言ってるのはデータの橋渡しなんですよ。
コントロールがユーザーからのデータを受け取ってそれでおしまいですか?
違いますよね?そのデータをコレクションクラスに追加しなければならないし
そのデータを元にListviewを更新しなくてはならないわけで
そのような操作をすべてFormクラスがやるのが間違っていると言っているんです
一連の動作はそれようの管理クラスがあるべきです。が、
ユーザーコントロールやコンポーネントではただのコントロールの集約でしかありません。
一連の流れのある振る舞いを管理するものではありません。
もう少し理解力のある人いませんか?何度も同じ説明させないでください。
過去ログみて、それでも意見がある人が答えてくださいよ
0860デフォルトの名無しさん
2006/04/10(月) 19:59:08「過去ログ嫁」はみんなが君に対して思っている言葉だよ orz
> ヘルプがないんだから仕方がありません。
んな逃げ口上言うなよ
おれは昔からMSDNだけで勉強して開発してるよ
2ちゃんに書き込めるのにMSDNが見れないなんて馬鹿なこと言わないよな
0861デフォルトの名無しさん
2006/04/10(月) 20:01:03>のような構造が理想だと言っているんです。
713 の目的が聞きたい。とりあえず下から選んでくれ。
[1] 構造が上手に設計できなくて困っている。アドヴァイスが欲しい。
[2] 理想的な形を見つけた。みんなに布教したい。
0862713
2006/04/10(月) 20:01:36つまりデータの中身のある場所の参照を表示コントロールのデータに渡すっていうことですよね?
listviewでデータが削除されれば、参照元のデータも削除されると。それでいい場合もありますよ。
しかし、データを壊されたくない場合はそういう訳には行きません
0864デフォルトの名無しさん
2006/04/10(月) 20:08:260865デフォルトの名無しさん
2006/04/10(月) 20:08:48君が書いてることはさ、オブジェクト指向とかデザパタとか色々な手法でとっくに議論されてきた話題だよ。
そしてそれに対する実装も、いくつかは君の言う通りに解決されてる。
でも全てが全て君の言う通りじゃない。
そこは何かと言うと、データの扱いに対する責任区分。
君はユーザサイド(主にプレゼンテーション層)からのデータ整流ばかりを気にしてシステム全体でのデータの流れを見ていない。
そこに対してみんなが違和感を感じてツッコミを入れてくるわけ。
じゃあどうすればみんなと対話ができるかというと、君の理論をまとめてドキュメント化して「これでどうですか」とするしかない。
言ってる範囲が無駄に広くてレスの応酬で片付かないし、お互い断片的な部分しか見れないからまともな対話にならない。
だから君の自論を文章化するなりして明示せよ。
それは新たな開発方法論として人がついてくるかも知れないし、よく見れば既存の方法論の劣化版や旧版に過ぎないかもしれない。
君の脳内の全容を知っているのは君しかいないんだから、それをみんなに「わかりやすく・まぎれなく・必要充分に(ISBN4-526-04317-6のキャッチコピーより引用)」表現してくれ
まともな話はそれからだ。
0866713
2006/04/10(月) 20:09:34ちょっと次元が違いますね
私はコントロールにデータ処理までさせるなんて言ってませんよ
あなたはテキストボックスに入力された文字をListViewにどうやって表示させる気ですか?
わたしはその部分の話をしているんです
0868デフォルトの名無しさん
2006/04/10(月) 20:10:550869デフォルトの名無しさん
2006/04/10(月) 20:12:22[3]みんなが知ってることを、さも自分だけは気付いたように勘違いして皆を見下したい。
0870854
2006/04/10(月) 20:14:18>あなたはテキストボックスに入力された文字をListViewにどうやって表示させる気ですか?
少なくとも、TextBox -> ListView の連結は Form が担当することじゃないし、知っているべきことでもない。
よく考えて。TextBox から入力されたデータは、ListView に伝わらない可能性は?
ListView には TextBox から入力されたデータ以外のものは表示されないの?
0871713
2006/04/10(月) 20:15:01確かにそうですね。抽象的なこと言ってても解決されませんね。
わかりました。ちゃんと私が作成した実データを元に反証して頂く事にしましょう。
0872デフォルトの名無しさん
2006/04/10(月) 20:15:420873854
2006/04/10(月) 20:16:44ここまで話せるのが初心者だとは思えないww
0874デフォルトの名無しさん
2006/04/10(月) 20:17:42それ以後、713を見た者はいない・・・・
0875デフォルトの名無しさん
2006/04/10(月) 20:20:27ひとつだと結局Form上で作るのとあんまりかわらんよな
0876デフォルトの名無しさん
2006/04/10(月) 20:21:13そのまま実現したいんじゃないのか?
それに開発者が振り回されたらたまらん。
0877デフォルトの名無しさん
2006/04/10(月) 20:23:42ぉぃ、君!>>713は何でできているのかね?
0878デフォルトの名無しさん
2006/04/10(月) 20:26:49713の43%は大人の都合で出来ています。
713の31%は鉄の意志で出来ています。
713の14%は時間で出来ています。
713の9%は黒インクで出来ています。
713の2%は勢いで出来ています。
713の1%は血で出来ています。
0879デフォルトの名無しさん
2006/04/10(月) 20:27:16なんにしてもウザ過ぎる
0880デフォルトの名無しさん
2006/04/10(月) 20:27:29713[sage]の成分解析結果 :
713[sage]の58%は波動で出来ています。
713[sage]の37%はやましさで出来ています。
713[sage]の2%はやらしさで出来ています。
713[sage]の2%は嘘で出来ています。
713[sage]の1%は食塩で出来ています。
0881デフォルトの名無しさん
2006/04/10(月) 20:30:14つーか自分でサイトでも立ち上げて
そこに掲示板でもなんでもつくってそこで議論してくれ。
0882713
2006/04/10(月) 20:38:34複数あります。そうでなければ分担作業にならないですからね。
たとえば、入力された文字をすべてリストビューに表示するみたいな
閉塞的で単調な労働をさせられるならユーザーコントロールなどで統合しても問題はないでしょう。
しかし、入力された文字が、「ファイルを開く」だったら?「データを参照」だったら?
呼ばれるコントロールも動作も変わってきます。
それをユーザーコントロールだけで管理するんですか?
ファイルを開くだったら、ファイルを開いて、ListViewItems形式に変換してlistviewに表示する
データ参照だったら、格納されているデータを読み出し表示する
こういったことに柔軟に対応させるには、コントロールの統合だけじゃ役不足なんです。
入力された文字から木の枝のように伸び分かれる一連の動作をそれぞれ管理する場合
Formクラスの上のメソッドのような、管理権限が平等でだらだらと書き記したコード群は綺麗だとは言えません
管理クラスとは一連の動作を柔軟に対応するだけでなく、管理権限の優劣をつけるものでもあります
何度も言うように、Formクラスを社長というなら、管理クラスは直属の上司です。
社長いうことは絶対ですが、通常は直属の上司が平社員の動作を監視します。
PublicやPrivateなどのアクセス権だけでなく、管理権限にも優劣をつけるべきだと思います
1つのアプリケーションを複数の人が作成する場合のことを考えてください。
関数的なクラスの分担だけでなく、ある一定の権限をも持つべきだとは思いませんか?
それをFormとコントロールとの関係へと修正させたいわけなんです。
まあ、のちのち、私が作成したソースをみなさんに提出しますから
そのときにご意見あれば言ってください。
0883デフォルトの名無しさん
2006/04/10(月) 20:41:00>複数あります。そうでなければ分担作業にならないですからね。
これが間違い。
0884デフォルトの名無しさん
2006/04/10(月) 20:41:57正直HTML + CSS でデザインするのいやなんですけど
ttp://pc8.2ch.net/test/read.cgi/hp/1018053359/
0885デフォルトの名無しさん
2006/04/10(月) 20:42:48スレが汚れる8。
0886デフォルトの名無しさん
2006/04/10(月) 20:43:29オブジェクト指向勉強したらまたおいで。待ってるから。
0887デフォルトの名無しさん
2006/04/10(月) 20:45:44それ以後、713を見た者はいない・・・・
0888デフォルトの名無しさん
2006/04/10(月) 20:55:27悪いけど別にスレ立ててそっちでやってくれない?
幸いマジレスする人もいるみたいだしさ
・・・自演じゃないよねw
0889デフォルトの名無しさん
2006/04/10(月) 21:31:560890デフォルトの名無しさん
2006/04/10(月) 21:49:46正規表現のオプション
http://msdn2.microsoft.com/ja-jp/library/yd1hzczs(VS.80).aspx
> 式に対して ECMAScript 互換の動作が有効になるように指定します。
あとどんな説明がいるんだ?
0891デフォルトの名無しさん
2006/04/10(月) 21:55:36ようするに、ECMAScriptの正規表現エンジン互換で動かすってことなんですか?
0892デフォルトの名無しさん
2006/04/10(月) 22:07:320893835
2006/04/10(月) 22:21:03Component使えばできるのか…知らなかったよ
と思ってMSDNとか色々見たけどイマイチつかめないなあ…
もし数行のコードで済むようなら、835に書いた内容をどなたかComponent使って
書いてみていただけませんか。
0894デフォルトの名無しさん
2006/04/10(月) 22:36:00為替のスレで両建てまんせーなやつはもっと香ばしかった。
0895デフォルトの名無しさん
2006/04/10(月) 23:34:12public sealed class Singleton
{
private static Singleton instance = new Singleton();
private Singleton()
{
}
public static Singleton Instance
{
get { return instance; }
set { instance = value; }
}
2度目以降の参照では、
get 以前を飛ばす理由が判りません ><
ご存知の方おねがいします
0896デフォルトの名無しさん
2006/04/10(月) 23:37:430897デフォルトの名無しさん
2006/04/10(月) 23:42:210898デフォルトの名無しさん
2006/04/10(月) 23:45:340899デフォルトの名無しさん
2006/04/10(月) 23:48:280900デフォルトの名無しさん
2006/04/10(月) 23:51:50{
public static readonly Singleton Instance = new Singleton();
private Singleton() {}
}
これで十分
0901デフォルトの名無しさん
2006/04/11(火) 00:09:52デバッガでステップしていて気が付いたんですが、
飛ばされた部分があるのでおかしいなと思い質問しました
それと、インスタンスの有無をどこで判断したのかも
わかりません
0902デフォルトの名無しさん
2006/04/11(火) 00:11:52static メンバが何時どんなときに初期化されるのか考えると良いよ。
0903デフォルトの名無しさん
2006/04/11(火) 00:45:31こことか読んだ?
ttps://www.microsoft.com/japan/msdn/practices/type/Patterns/enterprise/ImpSingletonInCsharp.asp
0904デフォルトの名無しさん
2006/04/11(火) 01:19:06そんなことよりオブジェクト指向とかアーキテクチャとかデザインパターンとかアジャイル開発とかテスト駆動とか
その辺に興味を示せ。
そんな質問どうでもよくなるから。
0905デフォルトの名無しさん
2006/04/11(火) 07:40:24とんでもないミスを犯していたり、あとで修正を加えたくなることがよくあります
結局、作り直したりやる気が無くなってしまったりするので
まず、始めにどのようにクラス設計を建てるかを考えなければと思うのですが
こういうときに便利なソフトはないでしょうか?
フローチャートみたいに大まかな流れを書き出したて、作る時の参考にしたいんですけれども
また、ほかに何か良い方法があるなら教えてください
0906デフォルトの名無しさん
2006/04/11(火) 08:37:10>こういうときに便利なソフトはないでしょうか?
Visual Studio
0907デフォルトの名無しさん
2006/04/11(火) 08:49:56作り変え時のコストを抑えるようにすればいいと質問の内容を無視してカキコ。
中身空のクラス先に作ってXMLDOCで出力とか。
0908デフォルトの名無しさん
2006/04/11(火) 09:27:580909デフォルトの名無しさん
2006/04/11(火) 15:26:02最初に適当に書いたソースを眺めて反省しながら設計する。
0910デフォルトの名無しさん
2006/04/11(火) 17:13:02>とんでもないミスを犯していたり、あとで修正を加えたくなることがよくあります
>結局、作り直したりやる気が無くなってしまったりするので
最初から完璧なコードなど書けるわけないだろ、
なんでミスを見つけたり修正することに対してネガティブなの?
1.下書きとしてとにかく動くものを作ってから全体を見直して完成度をあげる。
2.机上で完璧な設計をおこなってからプログラムを書き始める。
チーム作業でなければ完成度や開発効率で2の方が優れてるなんてことはない。
個人で作るアプリなら1の方が絶対楽しいし、結果的にいいソフトが作れるはずだ。
0911デフォルトの名無しさん
2006/04/11(火) 17:18:46ヒント 次につくるときのこやしとすること
0912デフォルトの名無しさん
2006/04/11(火) 17:22:470913905
2006/04/11(火) 18:03:39それをもとに作成していったほうが効率がいいんですが
プログラミングは実際に粘土をこねるような?
いじりながら徐々に目的のものを作り上げていく
そういう感じと捕らえていいんですか?
それにしても、フローチャート書くことがそんなにいけないことなのか?
0914デフォルトの名無しさん
2006/04/11(火) 18:44:03いや、だからVS2005持ってるんならソリューションエクスプローラあたりで
右クリックしてクラスダイアグラムの作成、とかやってみれ。当然コードとも
同期してくれる。Pro以上の機能?かも知れないが。
ちなみにフローチャートがいけないって誰が言った?そっちはWorkflow Foundation
あたりを調べてみれ
0915910
2006/04/11(火) 21:42:50フローチャートを描くのがほんとに好きならフローチャートから入ればいいよ。
要はどのようにしてモチベーションを保つかってことが大事。
プログラミングを始めた頃は何でもかんでも面白いけど知識だけで
ものを作り上げる喜びがなければ数年もしないうちに飽きて嫌になってくる。
それと今はプログラミングツールが便利になって開発効率があがったけど
そのぶんドキュメント化されてないノウハウや落とし穴も大幅に増えている。
プログラミングに上達しようと思ったらデッサン力と同時にツールに対する経験と洞察力が不可欠。
そんなわけで粘土をこねるような作業を避けては通れない。
>>713のように知識だけでプログラムを解ったつもりになってると
実際に何か作りはじめた段階でくじけてしまいかねない。
0916905
2006/04/11(火) 22:00:56どうもためになるお話ありがとうございます
実戦してその結果に対して考察しながら知識と経験を高めていく。
物作りの原点を忘れていました。
ライト兄弟の時代、推力や揚力など飛ぶ原理など知らなくても
空を飛びたいという情熱で作り上げていたことを思い浮かべました
飛ぶことができて初めて、なぜ飛べたのか、より遠くへ飛ぶにはどうすればいいか
まず作ってから、考察をするべきだと言えますね
ちなみにわたしは>713ですw
0917デフォルトの名無しさん
2006/04/11(火) 22:04:29それから、きっちりオブジェクト指向のお勉強だな。
「クラスの設計が・・・」なんていうのは十年早いと見た。
0918905
2006/04/11(火) 22:15:25今勉強しているのはGRASPとリファクタリングです
0919デフォルトの名無しさん
2006/04/11(火) 22:17:470920デフォルトの名無しさん
2006/04/11(火) 22:20:530921デフォルトの名無しさん
2006/04/11(火) 22:53:48後学のために教えて♪
0922905
2006/04/11(火) 23:06:01いわゆる、みなさんと同じデジタル土方ですね。
使用しているソフト用の補助的なツールを開発しようと思って
プログラミングを勉強してみようと思いました。
ソフト付属のマクロ程度なら組むこともできるんですが、それだけでは物足りなくなったわけです
0923デフォルトの名無しさん
2006/04/11(火) 23:15:38俺の書いたユースケースやアクティビティ、ステートチャートも全部まとめてフローチャートと呼ばれちゃってるよ。
0924デフォルトの名無しさん
2006/04/11(火) 23:52:12ななななんですってー!キィーツ!
0925デフォルトの名無しさん
2006/04/12(水) 00:01:190926デフォルトの名無しさん
2006/04/12(水) 00:24:33>ソフト付属のマクロ程度なら組むこともできる
むむむー
0927デフォルトの名無しさん
2006/04/12(水) 02:45:520928デフォルトの名無しさん
2006/04/12(水) 06:19:48思っていたんだが、デザイナだったのね。
0929デフォルトの名無しさん
2006/04/12(水) 07:43:370930デフォルトの名無しさん
2006/04/12(水) 12:11:340931デフォルトの名無しさん
2006/04/12(水) 17:59:440932915
2006/04/12(水) 18:15:48>ちなみにわたしは>713ですw
なんかそんな気がしたんだよね。
>>713って理解力はあるのに惜しいなと思ってたんだが、
別に頭が固いわけじゃなくて思いついたことを率直に言うタイプだったんですね。
優秀なプログラマになれそうな気がする、頑張って下さい。
0933デフォルトの名無しさん
2006/04/12(水) 18:17:010934デフォルトの名無しさん
2006/04/12(水) 18:30:010935デフォルトの名無しさん
2006/04/12(水) 18:31:300936デフォルトの名無しさん
2006/04/12(水) 22:05:29項目選択の変更はSelectedIndexChangedでわかるけど、
Ctrlを押しながらカーソルキーを押してフォーカスする項目を変更したときは
どのイベントで通知されるんだろう。
0937デフォルトの名無しさん
2006/04/12(水) 23:05:57習得は大変ですか?がんばればケンシロウになれますか?
0938デフォルトの名無しさん
2006/04/12(水) 23:11:11ないっぽいね。
親フォームで LVN_ITEMCHANGED を捕まえるくらいか。
0939デフォルトの名無しさん
2006/04/12(水) 23:33:35レスありがとう。
ラベルの編集は開始と終了別で教えてくれるのに、
より基本的な変更は簡単にいかないのな。
0940デフォルトの名無しさん
2006/04/13(木) 01:46:45なんかオブジェクト指向を理解した気になってるようだが
そんな簡単に理解できるほど浅いモノではない。
ポリモーフィズムとかインヘリタンスとかの意味をちょちょいっと調べて、オブジェクト指向をわかった気になってるとかそんなだろうな。
つーか
>アプリを作る場合、思いつきで作っていると
>とんでもないミスを犯していたり、あとで修正を加えたくなることがよくあります
>結局、作り直したりやる気が無くなってしまったりするので
とか言ってる時点でオブジェクト指向の入り口すら、全くもってわかってない。
0941デフォルトの名無しさん
2006/04/13(木) 01:49:16君みたいな素人には早いんじゃない?
0942703
2006/04/13(木) 02:28:340943デフォルトの名無しさん
2006/04/13(木) 02:33:12おまえしつこいな
もうええやろ
0944713
2006/04/13(木) 02:41:08やっぱ、地道にプログラミングに慣れていくしかないかな
0945713
2006/04/13(木) 02:47:55オブジェクト指向?たくさん本読んだからわかったよ
実践はまだしてないけどね
てか、私のプログラミングのミスとオブジェクト志向への理解との相関関係がわからないのに
なぜそういうことを言えるのか不思議です。超能力者かな?
ただ、ポリモーフィズムって言いたかっただけじゃないんかと・・
ま、知識はついたからあとは実践だね。
今までの経験上、独学をやる場合の教訓は
・知識と経験のバランス
・独断と偏見は捨て先人達を敬う
だな。ま、応援してくれていると受け取っておくよ。
>>943
キミは自分以外が目立つのが気に食わないだけじゃないのかと
0946デフォルトの名無しさん
2006/04/13(木) 02:49:320947デフォルトの名無しさん
2006/04/13(木) 03:38:51>自分以外が目立つのが気に食わないだけじゃないのかと
あんたは目立ちたいの?だったらただの荒らしだな。
いや・・・そうじゃなくて、みんなが使う掲示板なんだから
自分専用みたいな使い方はどうかと。
どうしてもというのなら新たなスレを作るなり、
自分のHPへ誘導するなりしたらどうですか?
0948713
2006/04/13(木) 03:52:04目立ちたいとも言っていないし
自分専用という根拠について教えてくださいな
私の発言に対して返答してたのはあなた達ですよ
私が独り言のように黙々とメモ帳のようにレスしていたのなら
私物化と言ってもいいかもしれませんけどね。
それにスレ違いの内容でもないですからね。
それより、自分専用のスレを立てるように誘導するほうがどうかしてると思います
ちゃんと2chの規約読みましたか?2ch初心者さんですか?
あなたの意見は見当違いです。
0949デフォルトの名無しさん
2006/04/13(木) 04:58:120950デフォルトの名無しさん
2006/04/13(木) 05:44:34この一文は何か意味あったん?
目立ちたい以外に
0951デフォルトの名無しさん
2006/04/13(木) 05:51:500952デフォルトの名無しさん
2006/04/13(木) 06:05:300953デフォルトの名無しさん
2006/04/13(木) 06:54:00ほかの人は出来るだけ相手にしないでください。スレ汚されるのが我慢ならん。
0954デフォルトの名無しさん
2006/04/13(木) 10:13:31ジャギ止まり。
0955デフォルトの名無しさん
2006/04/13(木) 12:19:04とりあえずスルー推奨
&相手する奴も嵐
0956デフォルトの名無しさん
2006/04/13(木) 13:45:34Hashtable[key] = 値ですが、
以下の文だと、実行時に
foreachが抜ける辺りで
InvalidOperationExceptionが
発生してしまいます。
ご存じの方、原因をご教示下さい。
//ハッシュテーブルの全ての値をkey値の2倍にする。
public static Hashtable TestHash()
{
Hashtable h = new Hashtable();
h.Add(1, 0);
h.Add(2, 0);
h.Add(3, 0);
foreach (int i in h.Keys)
{
h[i] = i * 2;
}
return h;
}
0957デフォルトの名無しさん
2006/04/13(木) 13:50:580958デフォルトの名無しさん
2006/04/13(木) 14:02:36そのような処理したい場合はいったん配列にキーコピーとかかしら?
0959デフォルトの名無しさん
2006/04/13(木) 14:11:45Hashtable h = new Hashtable();
h.Add(1, 0);
h.Add(2, 0);
h.Add(3, 0);
int[] a = new int[h.Count];
h.Keys.CopyTo(a, 0);
foreach (int i in a)
{
Console.WriteLine("{0}, {1}", i, h[i]);
h[i] = i * 2;
}
0960デフォルトの名無しさん
2006/04/13(木) 14:42:23ありがとうございます。
foreach のループ対象はkeyの値ですし、
実際に取り出したkey値を操作するのではなく、
ハッシュリストの値の方を編集するわけですし・・・
実際のコードは、以下の様に、編集後のレコードを
もう一つ別に作成したHashtableに入れて、返しています。
キーをコピーした方法も試してみます。
Hashtable h = new Hashtable();
Hashtable rh = new Hashtable();
h.Add("a", 1);
h.Add("b", 2);
h.Add("c", 3);
foreach (string key in h.Keys)
{
rh.Add(key,(int)h[key] * 2);
}
return rh;
0961936
2006/04/13(木) 18:58:33こんなのや
#define GVN_SELCHANGED LVN_ITEMCHANGED
こんなの
#define LVN_FIRST ((UINT)-100)
#define LVN_ITEMCHANGED (LVN_FIRST-1)
しか見つからない。
ダメもとでm.Msg == checked((uint)-0x100-1)なんてのも試した。
ローカルの.NET関連のフォルダも見たけどだめ。
WndProcをフォームとリストビューそれぞれに置いてメッセージを調べてみたが、
項目のフォーカスが変更されたときに発行されるものがないような。
それとも>>938は、項目のフォーカスが変更される可能性のある操作を
すべて受け取れって意味だったのかな。
0962デフォルトの名無しさん
2006/04/13(木) 19:18:32**N_*** ってメッセージは NotifyMessage って言われるもんで、WM_NOTIFY で親フォームに送られる。
WM_NOTIFY を受け取った場合、LPARAM を NMHDR 構造体にキャストして code メンバでどのメッセージなのか確認する。
// これに関しては unsafe でポインタ使った方が凄い楽。
で、pnmhdr->code == LVN_ITEMCHANGED のときにあれこれする。
ちなみに、WM_NOTIFY は親フォームに流れるけど、
.NET では親フォームはそのコントロール自身にも (WM_REFLECT + WM_NOTIFY) を改めて送信するので、
コントロール自身でも判断可能だ。
0963デフォルトの名無しさん
2006/04/13(木) 23:16:300964713
2006/04/14(金) 00:12:53資料が少ないから大変だけど、おもしろいねこれ
てか、選ぶ言語間違えたかな。C++のほうがいいみたい
0965704
2006/04/14(金) 00:32:40うーん、以下のコードだと呼ばれないんですが。
適当なFormの中のコードです。
Formに配置されたボタンを押すとgcButton_Clickが呼ばれると思ってください。
private Button testButton = null;
private void gcButton_Click(object sender, EventArgs e) {
if (testButton == null) {
testButton = new Button();
testButton.Disposed += new EventHandler(testButton_Disposed);
Controls.Add(testButton);
} else {
Controls.Remove(testButton);
testButton = null;
GC.Collect(); //<- ここでGCしてもtestButton_Disposed()が呼ばれない
}
}
void testButton_Disposed(object sender, EventArgs e) {
Debug.WriteLine("button disposed.");
}
0966デフォルトの名無しさん
2006/04/14(金) 00:37:140967デフォルトの名無しさん
2006/04/14(金) 00:50:32君うざすぎw
C++の方がいいって思うんだったらC++に乗り換えなよ
そんでもうC#には関わらないで^^
っていうと、今更乗り換えられないとか、途中で投げ出したくないとか、C#をちゃんと覚えてからとか言うんだろうね
そんでここのスレにいつまでもまとわりつくと。
0968デフォルトの名無しさん
2006/04/14(金) 00:51:490969デフォルトの名無しさん
2006/04/14(金) 01:00:33いわゆるデストラクタってのはファイナライザのこと。
ファイナライザはオブジェクトが削除されるときに呼び出される。
で、Disposed イベントは Dispose() メソッドが呼ばれたときに発生する。
Dispose() とファイナライザは直接は関係ないよ。
Disposed を発生させたいなら明示的に Dispose() を呼び出さないと。
0970デフォルトの名無しさん
2006/04/14(金) 01:04:200971デフォルトの名無しさん
2006/04/14(金) 01:05:54>>970は>>965あてなの
0972704
2006/04/14(金) 01:16:18じゃあ>>391は嘘なのかな?
IDisposeを実装してるオブジェクトはDispose()はプログラムで明示的に呼び出せと?
ちなみにボタンを動的にControls.Add()したままの状態でFormを閉じるとDisposeが呼ばれます。
0973デフォルトの名無しさん
2006/04/14(金) 01:16:53IDisposable実装クラスのファイナライザは、通常Dispose(false)を呼び出すように設計しなければならない。
んで、実際System.Windows.Forms.Buttonクラスの基本クラスであるSystem.ComponentModel.ComponentクラスのFinalizeの中身を
覗いてみると、ちゃんとDispose(false)を呼び出している。
ちなみにDispose(bool disposing)メソッドの中でイベントもちゃんと呼ぶようになってるぞ。
だからGCがButtonクラスの回収をすればイベントは発生するはずということ。
んで、GC.Collectっていうのはガベージコレクタを即実行するわけだが、
ガベージコレクタってのは世代管理を行っていて引数を指定しないでGC.Collectを呼び出した場合は
メモリがやばくない限り1世代目の回収しかしない(あとここで世代移動が行われる気がした)。だから必ずしもButtonオブジェクトがGCに回収されるとは限らないわけだ。
つまり、GC.Collect(3)ってやればOKだと思う。
0974デフォルトの名無しさん
2006/04/14(金) 01:22:320975デフォルトの名無しさん
2006/04/14(金) 01:22:56なんで嘘になるのさ。
Disposed イベントなんて所詮ただのイベント。オブジェクトの掃除とは何の関係もない。
IDisposable は Dispose() が呼ばれなかったら最終的にファイナライザが Dispose(false) を呼び出す。
Dispose(false) は Disposed を発生させないってだけの話。
>>973
Dispose(false) の場合は Disposed を発生させない。
ファイナライザでは参照型のメンバにアクセスしちゃ駄目だから。
もちろんイベントの実体もデリゲートインスタンスなのでファイナライザではさわれない。
さらに、GC.Collect() は全世代のオブジェクトに対して GC を行うとリファレンスに明記されてる。
0976デフォルトの名無しさん
2006/04/14(金) 01:26:23すまん、至る所で勘違いが混じってたな。首吊ってくるorz
0978704
2006/04/14(金) 01:31:07理解しました!
動的ボタンを直接Buttonクラスを使わず以下のように継承してMyButtonを定義し、
overrideしたDisposeメソッドはきちんと呼ばれました。
private class MyButton : Button {
protected override void Dispose(bool disposing) {
Debug.WriteLine("button disposed." + disposing);
base.Dispose(disposing);
}
}
MyButton testButton = null;
0979デフォルトの名無しさん
2006/04/14(金) 01:32:42>ちなみにDispose(bool disposing)メソッドの中でイベントもちゃんと呼ぶようになってるぞ。
ここまで見といてなんでその際の条件を見ないw
0980デフォルトの名無しさん
2006/04/14(金) 10:07:42とチラシの裏。
0981デフォルトの名無しさん
2006/04/14(金) 23:20:39丁寧な解説どうもありがとう。
LVN_ITEMCHANGEDの定義の
#define LVN_FIRST (0U-100U)
#define LVN_ITEMCHANGED (LVN_FIRST-1)
が0xffffff9bなんだろうということもやっとわかった。
ただ、LVN_ITEMCHANGEDどころかまずWM_NOTIFYが送られてこないような。
if( m.Msg == 0x004e ){ ... } //こんな感じでスタンバってる
フォーカス移動を知りたいだけなのになんでunsafeとか使わにゃいかんのだ、Gates。
0982デフォルトの名無しさん
2006/04/14(金) 23:29:05なんですと?
0983デフォルトの名無しさん
2006/04/14(金) 23:56:37WM_NOTIFY は親フォームに送られるって点は OK ? コントロール自身が待ってない?
ていうかここにかいてあった
ttp://hongliang.seesaa.net/article/16550502.html
0984デフォルトの名無しさん
2006/04/15(土) 00:19:03GC.WaitForPendingFinalizersとか呼んでるね
0985デフォルトの名無しさん
2006/04/15(土) 01:23:260986デフォルトの名無しさん
2006/04/15(土) 12:28:54this.Close()で閉じるとObjectDisposedExceptionが発生するんですが
ただしい娘ウインドウの終了の仕方ってどんなんでしょう?
0987986
2006/04/15(土) 12:42:30ToolStripMenuItemの
DropDownItemClickedイベントでthis.Close()で閉じると例外、
サブメニューそのもののClickイベントで閉じれば例外が起きません。
こっちでやれってことですかね
0988デフォルトの名無しさん
2006/04/15(土) 12:42:480989986
2006/04/15(土) 13:06:54子フォームにMenuStripをくっつけて、最初のアイテムを"ファイル”として、
そのサブアイテムを”閉じる”とします。
”ファイル”のDropDownItemClickedでthis.Close();を呼ぶと例外、
"閉じる"のClickでthis.Close()なら普通に閉じる。
うちでは100%再現するんですが、(VS2005Express)
とりあえず下の方法でお茶を濁しました……
0990デフォルトの名無しさん
2006/04/15(土) 13:10:04この場合なら別スレッドにhandleわたしてPostMessageすると思う。
0991デフォルトの名無しさん
2006/04/15(土) 13:10:26さあサブメニューを表示しようって時にいきなり親が Dispose されるんだから。
なんで DropDownItemClicked で this.Close なんだよ。
0992デフォルトの名無しさん
2006/04/15(土) 13:16:22ああ、そういうことですか。
"DropDownした先のItemをClicked"じゃなくて
"DropDownするItemをClicked"って意味だったんですか。
あんまり腑に落ちませんが
ありがとうございました。
0993デフォルトの名無しさん
2006/04/15(土) 13:27:090994デフォルトの名無しさん
2006/04/15(土) 13:30:56スレタイの♯は半角だと消えるから全角でな。Shift+3 は別の文字だから「しゃーぷ」を変換するんだ。
ていうかコピーすればいいな。
0995デフォルトの名無しさん
2006/04/15(土) 13:32:100996デフォルトの名無しさん
2006/04/15(土) 13:34:53http://pc8.2ch.net/test/read.cgi/tech/1145075577/
0997デフォルトの名無しさん
2006/04/15(土) 13:39:360998デフォルトの名無しさん
2006/04/15(土) 13:40:120999デフォルトの名無しさん
2006/04/15(土) 13:41:121000デフォルトの名無しさん
2006/04/15(土) 13:43:06次スレ以降、>>713は書き込み禁止
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。