ふらっとC#,C♯,C#(初心者用) Part25
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2008/02/27(水) 18:24:40「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
前スレ
ふらっとC#,C♯,C#(初心者用) Part24
http://pc11.2ch.net/test/read.cgi/tech/1202028267/
0002デフォルトの名無しさん
2008/02/27(水) 18:27:47http://pc11.2ch.net/test/read.cgi/tech/1200911737/
C♯, C#相談室 Part34
http://pc11.2ch.net/test/read.cgi/tech/1162467959/
【新GUI FW】WPF(XAML,AVALON,.NET3.0)【重い?】
http://pc11.2ch.net/test/read.cgi/tech/1162950198/
Windows Live プログラミング
http://pc11.2ch.net/test/read.cgi/tech/1188112572/
初心者のためのプログラミング言語ガイド Part7
http://pc11.2ch.net/test/read.cgi/tech/1200807067/
0003デフォルトの名無しさん
2008/02/27(水) 18:30:26>>950が無理な場合、話し合って新スレ立てる人を決めて下さい。
誰も建てないので立てますた。
0004前962
2008/02/27(水) 18:43:58ありがとうございます。
どうしても同じスコープにするのは難しそうです、現状は大雑把なキャンセルということで満足しておくことにします
0005デフォルトの名無しさん
2008/02/27(水) 18:45:13>>前スレ998
わざわざ匿名メソッドとか使うまでもなく
OwnerForm.Invoke(new Action(OwnerForm.Show));
0007デフォルトの名無しさん
2008/02/27(水) 19:00:52FlowLayoutPanel.MouseDoubleClickイベントは上に何も乗っていない場所でしか起きないようです。
上に載せたコントロール全てに同じイベントを設定してあげなければいけないのでしょうか?
それとも何かワザがあるのでしょうか?
0008デフォルトの名無しさん
2008/02/27(水) 19:17:32俺はそのワザというのがちょっと思いつかんけど、
俺だったらPanelの子コントロールコレクションをForeachでループして
一行イベント追加の構文書いて実現するね。
3行でいけるっしょ。
0009デフォルトの名無しさん
2008/02/27(水) 19:21:06!=7ですが面白い手ですね、自分は諦めてました
0011デフォルトの名無しさん
2008/02/27(水) 19:54:17例えばデフォルトのForm1クラスのような、継承やインスタンスの生成を1度しかしないクラスがあったとした場合
クラス内メンバ全てにstaticをつけた方が良いのでしょうか?
また、通常の設計などがわからず、インターネットで調べつつ色々作ってみています。
エントリポイントである以下の部分には通常手を加えるものなのでしょうか?(Program.cs)
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Properties.Form1());
}
}
全てForm1クラス内で済ませているのですがどうにも不自然に感じてきています
おかしなことを言っていたらすいません、それではよろしくお願いします
0012デフォルトの名無しさん
2008/02/27(水) 20:01:17パフォーマンスの点ではstaticをつければ、パーマネント領域に移ってガベージコレクト対象から外れるのでいいかもね。
汎用性をとるなら、普通にメンバにしておいたほうがいいんじゃないかな。
自分は "クラス名.メソッド()" と書くとコードがシンプルになるらな迷わずstaticを選ぶね。
エントリーポイントは時に変更が必要不可欠になる事がある、そのときのために触らなくて済む限り触らない、綺麗なままにしておく。
001311
2008/02/27(水) 20:04:56ありがとうございます。
主要処理部分をとりあえずstaticにしておくことにしました。
エントリポイントについては把握しました。
自分の場合Form1クラスを中心に他を操作するような感じでいけばいいわけですね
0014デフォルトの名無しさん
2008/02/27(水) 20:28:00だからってコントロールもstaticにするとかアホなことするくらいなら迷わずインスタンスメソッドにする
001511
2008/02/27(水) 20:31:59まず最初にコントロールをstaticにしてましたorz
一応色々調整してうまく動いています
0016デフォルトの名無しさん
2008/02/27(水) 20:40:210017デフォルトの名無しさん
2008/02/27(水) 20:48:41>何か問題
コードの読み手(一ヵ月後の自分だってそうだ)を無意味に惑わすのが問題。
普通の能力の読み手なら「あえて」staticにしているのには何か意味があるはずだ、
と考えると思うんだが、実際には何の意味もない(あったら教えてくれ)ってのは
大問題でしょ。
0018デフォルトの名無しさん
2008/02/27(水) 20:59:270019デフォルトの名無しさん
2008/02/27(水) 21:10:040020デフォルトの名無しさん
2008/02/27(水) 21:11:390021デフォルトの名無しさん
2008/02/27(水) 21:16:28コントロールをstaticにしてたらGCの対象から外れるからデストラクタが呼ばれない
0022デフォルトの名無しさん
2008/02/27(水) 22:15:232秒差で無茶ゆうなよw
0023デフォルトの名無しさん
2008/02/27(水) 22:25:41こ れ は ひ ど い
0024デフォルトの名無しさん
2008/02/27(水) 23:10:29呼ばれるよ、アプリが終了する時までには。
実行中はガベコレの対象にならないというだけで、他にもこのパーマネント領域にはクラスのTypeのオブジェクト等がいる。
0025デフォルトの名無しさん
2008/02/27(水) 23:46:00var tmp_array = new[] {
new { Col1 = 10 , Col2 = "あ" } ,
new { Col1 = 20 , Col2 = "い" } ,
new { Col1 = 30 , Col2 = "う" } ,
};
var list = tmp_array.ToList();
とりあえずこんな具合に作ってみたのですが、どうにも無駄っぽい感じがします。
0026デフォルトの名無しさん
2008/02/27(水) 23:47:25そういうコントロールって無いの?
TreeView使って自分で項目追加するしかないのかなあ。
0027デフォルトの名無しさん
2008/02/28(木) 00:01:46Microsoft.VisualBasic.Compatibility.VB6.DirListBoxとか、使った事無いけどそれっぽいの出るよ。
0028デフォルトの名無しさん
2008/02/28(木) 00:09:57var list = new[] {
new { Col1 = 10 , Col2 = "あ" } ,
new { Col1 = 20 , Col2 = "い" } ,
new { Col1 = 30 , Col2 = "う" } ,
}.ToList();
これでいいんじゃない?
0029デフォルトの名無しさん
2008/02/28(木) 00:19:37言語の壁を越えられるライブラリはすばらしい
0030デフォルトの名無しさん
2008/02/28(木) 00:44:49003126
2008/02/28(木) 00:45:25うーん、見た目がなんか古臭いし、デスクトップがルートじゃないのも…
自分で作るしかないか。
シェルネームスペース関連のクラスって無いですよね?
その辺も整備しないといかんのか…
0032デフォルトの名無しさん
2008/02/28(木) 00:46:31静的メンバ変数じゃあかんのか?
0033デフォルトの名無しさん
2008/02/28(木) 00:52:53Com側も探してみたら、なんか色々あるよ。
もっともComインターフェイス系のクラスは、どれも表示できても使い勝手悪そうだけど……
0034デフォルトの名無しさん
2008/02/28(木) 00:53:45それでも実装できるんですが、一つのメソッドでしか使用しない変数なので他のメソッドにもスコープを広げるのはどうかと思いまして・・・
0035デフォルトの名無しさん
2008/02/28(木) 00:57:56privateしかないですね、C#は、というか.NETはリフレクションという機能があって、
自分自身のコードをプログラムから覗く機能があって、スコープ概念は実質ないというか使えません。
たとえば、あるクラスにどんな変数や関数があるのかプログラム中で一覧を列挙できるんですよ。
この機能はC++では、templateメタプログラミングで代用ですね。
0036デフォルトの名無しさん
2008/02/28(木) 01:00:42細かい解説ありがとうございます。privateメンバで実装したいと思います
0037デフォルトの名無しさん
2008/02/28(木) 01:20:30Microsoft じゃない方の M の付く会社で作っている、なんとかリャーとかいうコンパイラは
型が違うなら別々のインスタンスにすべき所を纏めて一つだけとって重複バグをやらかしたりその反対やらかしたりと・・・
0038デフォルトの名無しさん
2008/02/28(木) 09:10:500039デフォルトの名無しさん
2008/02/28(木) 10:18:300040デフォルトの名無しさん
2008/02/28(木) 11:33:31実質メソッドごとに内部クラス定義してるのと一緒だけど
0041デフォルトの名無しさん
2008/02/28(木) 12:19:21WebBrowser wb = new WebBrowser();
wb.Navigate(uri);
while (wb.Url == null)
{
Thread.Sleep(1000);
Application.DoEvents();
}
0042デフォルトの名無しさん
2008/02/28(木) 12:25:200043デフォルトの名無しさん
2008/02/28(木) 12:31:580044デフォルトの名無しさん
2008/02/28(木) 12:35:390045デフォルトの名無しさん
2008/02/28(木) 22:33:45a = a++;
ってやるとaの値が0のままなんだけど、これはどういう理屈?
C++だとインクリメントされた値になるんだが
0046デフォルトの名無しさん
2008/02/28(木) 22:41:030047デフォルトの名無しさん
2008/02/28(木) 22:44:320048デフォルトの名無しさん
2008/02/28(木) 22:53:380049デフォルトの名無しさん
2008/02/28(木) 22:59:550050デフォルトの名無しさん
2008/02/28(木) 23:04:04右辺から評価されていく。
aをインクリメントし、式としてはインクリメントする前の値を返す。
すなわち
a = 0;
0051デフォルトの名無しさん
2008/02/28(木) 23:06:540052デフォルトの名無しさん
2008/02/28(木) 23:31:310053デフォルトの名無しさん
2008/02/28(木) 23:34:080054デフォルトの名無しさん
2008/02/29(金) 00:10:03代入演算ですらそんな挙動するっけ?
確かに、x = f(a) + g(b) みたいなのは、f と g のどっちが先に呼ばれるか
未定義・処理系依存だったと思うけど。
C++ は思った以上に処理系依存動作多いもんなぁ。
0055デフォルトの名無しさん
2008/02/29(金) 00:34:33int a=0;
a++;
で
a=1
になるんですよ、クソガキ
0056デフォルトの名無しさん
2008/02/29(金) 00:43:03そりゃなるだろ
0057デフォルトの名無しさん
2008/02/29(金) 02:45:36ウェイトは下記のどちらが良いのでしょうか?
// 1
System.Threading.Thread.Sleep(1);
Application.DoEvent();
// 2
Application.DoEvent();
System.Threading.Thread.Sleep(1);
0058デフォルトの名無しさん
2008/02/29(金) 02:54:390059デフォルトの名無しさん
2008/02/29(金) 08:10:41そのスレッドはUIスレッドなのか?
そうじゃないならプライオリティを下げるのが常套。
0060デフォルトの名無しさん
2008/02/29(金) 08:16:15くわしく
0061デフォルトの名無しさん
2008/02/29(金) 08:24:00これはマルチスレッド使えないVB6のDoEventsからから恐らく来てるわけで、
つまりUIスレッドでビジーループで仕事してもUIが無反応にならないように
したい場合に使うわけでしょ。
つまりCドトネトでは普通は使い道はあまりないはずと思うが。
0062デフォルトの名無しさん
2008/02/29(金) 11:32:24どうすればよいでしょうか?
<C>
typedef struct hoge {
long foo;
struct hoge* bar; /* 自己参照 */
} hoge;
→OK
<C#>
struct hoge{
public int foo;
public hoge bar; /* 自己参照 */
}
→エラー。以下メッセージ。
型 'hoge' の構造体メンバ 'hoge.bar'により、
構造体レイアウトで循環参照が発生します
0063デフォルトの名無しさん
2008/02/29(金) 11:33:560064デフォルトの名無しさん
2008/02/29(金) 11:36:010065デフォルトの名無しさん
2008/02/29(金) 14:09:49OnPaintBackgroundを継承したのですが、
背景は描写されましたがアイテムが描写されません。
背景以外は普通に描画したいのですが。
006665
2008/02/29(金) 14:10:33using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
class ListViewEx : ListView{
public ListViewEx(){
this.OwnerDraw = true;
this.SetStyle(ControlStyles.UserPaint, true);
}
protected override void OnPaintBackground(PaintEventArgs e){
using (LinearGradientBrush lgb = new LinearGradientBrush(this.ClientRectangle, Color.Black, Color.White, LinearGradientMode.Vertical)){
e.Graphics.FillRectangle(lgb, this.ClientRectangle);
}
}
006765
2008/02/29(金) 14:11:04e.DrawDefault = true;
base.OnDrawColumnHeader(e);
}
protected override void OnDrawItem(DrawListViewItemEventArgs e){
e.DrawDefault = true;
base.OnDrawItem(e);
}
protected override void OnDrawSubItem(DrawListViewSubItemEventArgs e){
e.DrawDefault = true;
base.OnDrawSubItem(e);
}
static void Main(){
Form form = new Form();
ListViewEx list = new ListViewEx();
list.Dock = DockStyle.Fill;
list.Items.Add("unko");list.Items.Add("unko");list.Items.Add("unko");
form.Controls.Add(list);
form.ShowDialog();
}
}
0068デフォルトの名無しさん
2008/02/29(金) 14:17:49一気に取得するプログラムを作っているのですが、高負荷になると
クライアント側のWindows(2003)が毎回ブルースクリーンになって
しまいます。
クライアントのハードウェアが壊れているのかと思い手持ちの3機種で
試してみたのですが、どれも同じ結果でした。
mouclass.sysなど、毎回違うところで止まっているので原因がサッパリ
わかりません。
0069デフォルトの名無しさん
2008/02/29(金) 14:23:36OwnerDrawのときは
OnDrawItemやOnDrawSubItemで自前描画しないと駄目よ
base.OnDrawItem等を呼んでもなにもしてくれないよ
007065
2008/02/29(金) 14:35:03そうなんだ。
e.DrawBackground()とかすればいいんですね。
となるとDrawDefaultはどういうときに使うんでしょう。
ネットに転がってるサンプルだとOwnerDraw = trueでも
e.DrawDefalt = trueしてそのままになってる。
0071デフォルトの名無しさん
2008/02/29(金) 14:40:06よくわかんないけど、ブルースクリーンになるのはディバイスドライバの障害だよ
どこかのドライバがバグっている。
0072デフォルトの名無しさん
2008/02/29(金) 14:41:30いまグラフィックソフトを作ってますが、レイヤーごとにGraphicオブジェクトを用意してそこへ描画してるんだけど、
管理が複雑になってしまって。
0073デフォルトの名無しさん
2008/02/29(金) 15:02:23フォトショップのレイヤーみたいなもの?
もしそれなら、自前で作ったほうが無難な予感がするな。
未来志向ならWPFという手もあるかもしれない、使った事無いけど。(←ぉぃぉぃ)
0074デフォルトの名無しさん
2008/02/29(金) 15:04:200075デフォルトの名無しさん
2008/02/29(金) 15:04:530076デフォルトの名無しさん
2008/02/29(金) 15:05:150077デフォルトの名無しさん
2008/02/29(金) 15:15:03WPFあんまり流行ってないですね、チュートリアルビデオとかみるとスイスイ完成して気持ち良さそうなんですけど
リファクタリングが対応してくれればもうちょっとは使い勝手もましになりそうですが、次のVSに期待ですね。
0078デフォルトの名無しさん
2008/02/29(金) 15:40:50言われないぐらいには。
コード書いたら負けかなと思えるぐらいに柔軟なのはわかったから
0079デフォルトの名無しさん
2008/02/29(金) 15:45:200080デフォルトの名無しさん
2008/02/29(金) 15:55:37listview.Items[""].Selected = true;
これだとエラーになるのですね。
0081デフォルトの名無しさん
2008/02/29(金) 23:36:22フォームのプロパティに表示されるものとされないものがあります。
表示されるものとされないものの違いがよくわからないので教えてもらえないでしょうか
0082デフォルトの名無しさん
2008/02/29(金) 23:43:00他にもいろいろあります、リンクの先へどうぞ。
http://www.microsoft.com/japan/msdn/net/general/pdc_vsdescmp.aspx
0083デフォルトの名無しさん
2008/03/01(土) 02:14:19悩んでいたのは操作方法ではなく追加方法なのですが、自己解決しました。
恥ずかしいことに継承せずにプロパティを追加するだけでプロパティブラウザに追加できると勘違いしておりました。
リンク先の内容を役立てることができそうです。ありがとうございました。
0084デフォルトの名無しさん
2008/03/01(土) 17:30:13コーディング中に簡単に型を知る便利なテクニックとかないですかね?
var instance = object.Method() ;
↑
ここにマウスカーソルを置いたら型が分るとかだったら便利なんですけど・・・出ない
0085デフォルトの名無しさん
2008/03/01(土) 17:31:05VS 使ってるならそれで型分かるよ。
あと、個人的には右辺値から型が分かりにくいときはあんまり var 使いたくないなぁ。
0086デフォルトの名無しさん
2008/03/01(土) 17:32:36varの上
0087デフォルトの名無しさん
2008/03/01(土) 17:39:45しまった気付かなかった、そんな所に
0088デフォルトの名無しさん
2008/03/01(土) 19:03:19DirectoryInfo info = new DirectoryInfo( @"C:\");
info. ← ここで候補が出てこないのは何故?
0089デフォルトの名無しさん
2008/03/01(土) 19:05:080090デフォルトの名無しさん
2008/03/01(土) 19:16:14お恥ずかしい・・・
0091デフォルトの名無しさん
2008/03/01(土) 21:35:46どういうクラス、API使えばいいの?
80x25の配列を用意して適当に着色して■Ωとか配置してキー入力を受け付けられればいいんだけど。
0092デフォルトの名無しさん
2008/03/01(土) 21:40:520093デフォルトの名無しさん
2008/03/01(土) 21:49:38varで分からなくなるってどんな変数名つけてんだよ
0094デフォルトの名無しさん
2008/03/01(土) 23:07:21属性を作成してその属性に番号を格納してってことをしてみたところで、
属性の内容からFieldを取得する方法が分からず挫折してしまいました。
なんとかしてFieldを取得する方法はありませんか?
0095デフォルトの名無しさん
2008/03/01(土) 23:07:39場所によっては分りにくくなることもあるべぇよ、大半問題ないけどね。
ちなみにC#の var は静的な型だよ。
var i = 0 ;
と書いたら
object i = 0 ではなくて int i = 0 だから。
>>91
そりゃもう System.Drawing.Graphics を使って直書きしかないね、
普通に印刷したらプロポーショナルに美しく表示されてしまいますからw
詳しい説明いるかい?
必要なら追記しましょう。
0096デフォルトの名無しさん
2008/03/01(土) 23:17:28フィールド列挙してそれぞれの属性調べてく
でも属性でやる必要あるの?
インデックスを引数にとるメソッド一つ用意すればよくない?
0097デフォルトの名無しさん
2008/03/01(土) 23:20:22ちょっと作ってみた
public class MyAttribute : System.Attribute
{
public int IntData { get;set;}
public MyAttribute(int intData) { IntData = intData ; }
};
public class SumpleClass
{
[My(10)]
public int Field = 5 ;
};
void f(){
var tmp = new SumpleClass() ;
var attrs = tmp.GetType().GetField( "Field" ).GetCustomAttributes( false ) ;
for (int i = 0; i < attrs.GetLength(0); ++i)
{
var myattr = attrs[i] as MyAttribute ;
if (myattr == null) continue;
System.Console.WriteLine("{0}", myattr.IntData);
}
}
0098デフォルトの名無しさん
2008/03/01(土) 23:25:54インデックスですか・・・?
class C
{
DateTime d1;
int i1;
string s1;
DateTime d2;
}
って感じなのですが、
上から順番にd1には0番の値を、i1には1番の値をって代入していきたいんですよ。
objcet[] data = //データ
for(int i = 0; i < data.Length; i++)
{
field[i] = data[i];
}
というかんじが理想なんですが・・・
インデックスってのがよくわからないので詳しく教えてもらえませんか?
0099デフォルトの名無しさん
2008/03/01(土) 23:30:47>>97 の GetField を GetFields にして、あとはアトリビュート検索して、所望のものがあったらそのフィールドに代入してくださいな。
フィールド名から代入方法が分らないなら、また書く。
0100デフォルトの名無しさん
2008/03/01(土) 23:31:17switch (index) {
case 0: hoge = (...)value; break;
}
}
みたいな。つかこれくらいならインデクサでいいか。
0101デフォルトの名無しさん
2008/03/01(土) 23:40:26すみません、属性の番号がiと一致するものの名前の取得まではできるんですが・・・
どうやってそこに代入するかが難しいです。。。
>>99
すみません、代入方法お願い致します。
>>100
なるほど・・・
でもswitch分が3ケタ超えるのは・・・
そっちのほうが保守やパフォーマンス的にはいいのでしょうか?
0102デフォルトの名無しさん
2008/03/01(土) 23:44:32ほい、フィールド名を検索してないけどそのへんは適当によろしく
var tmp = new SumpleClass() ;
var attrs = tmp.GetType().GetField( "Field" ).GetCustomAttributes( false ) ;
for (int i = 0; i < attrs.GetLength(0); ++i)
{
var myattr = attrs[i] as MyAttribute ;
if (myattr == null) continue;
System.Console.WriteLine("{0}", myattr.IntData);
System.Console.WriteLine("{0}", tmp.Field);
tmp.GetType().GetField("Field").SetValue(tmp, 100);
System.Console.WriteLine("{0}", tmp.Field);
}
0103デフォルトの名無しさん
2008/03/01(土) 23:46:26パフォーマンスはswitchの方が圧倒的に高いよ。
やり方しだいじゃありますが・・・
0104デフォルトの名無しさん
2008/03/01(土) 23:47:300105デフォルトの名無しさん
2008/03/01(土) 23:47:54var fields = obj.GetType().GetFields();
var regex = new Regex(@"(\d+)$");
foreach(var field in fields)
{
string numStr = regex.Match(field.Name).Groups[1].Value;
if(field.FieldType == typeof(DateTime))
{
field.SetValue(obj, dateTimeTable[int.Parse(numStr)]);
}
}
こんな感じか?
0106デフォルトの名無しさん
2008/03/01(土) 23:49:50C#3.0になってから普通に作れそうだけどねwww
匿名クラス楽でいいわ
0107デフォルトの名無しさん
2008/03/01(土) 23:57:54すみません、よく理解できませんでしたのでswitch文にします。
>>104
>>105
すみません、フィールドの種類・名前は先に与えられていて、
そこはいじれないもので。
0108デフォルトの名無しさん
2008/03/02(日) 00:00:03field.SetValue(instance, value);
探してるのはこれじゃないの?
0110デフォルトの名無しさん
2008/03/02(日) 00:01:480112デフォルトの名無しさん
2008/03/02(日) 00:11:25FieldInfo[] fields = c.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
for(int i = 0; i < fields.Length; ++i)
{
fields[i].SetValue(c, data[i]);
}
こうだろ
0113デフォルトの名無しさん
2008/03/02(日) 00:13:45GetFieldsの返す順を信頼できるあなたが素敵☆
0114デフォルトの名無しさん
2008/03/02(日) 00:14:41よく知らんな
0115デフォルトの名無しさん
2008/03/02(日) 00:15:430116デフォルトの名無しさん
2008/03/02(日) 00:16:100117デフォルトの名無しさん
2008/03/02(日) 00:16:190118デフォルトの名無しさん
2008/03/02(日) 00:16:540119デフォルトの名無しさん
2008/03/02(日) 00:17:420120デフォルトの名無しさん
2008/03/02(日) 00:19:50エクセルで一覧作っといて、あとで叩き込むとか結構俺は便利につかってるぞ
せっかくC#がJavaとの差別化として実装した自慢の機能なんだから利用してやらにゃ損
0121デフォルトの名無しさん
2008/03/02(日) 00:21:46それがわかっただけでも聞いてみたかいがありました。
ありがとうございます。
>>112
案の一つとしてメモっておきます。
ありがとうございます。
他のみなさまも親身な回答をありがとうございました。
また詰まったら頼らせてください。
0122デフォルトの名無しさん
2008/03/02(日) 00:22:48ソースコード生成するのが早いか、手作業でやるのが早いか悩むところだな
0123デフォルトの名無しさん
2008/03/02(日) 00:26:52そこでCodeDOMですよ、自己生成自己コンパイル自己実行www
0124デフォルトの名無しさん
2008/03/02(日) 00:29:00というメソッドがあるとします。
引数のa, bのどちらか、または両方省略できるようにしたいです。
そこで
hoge func(out int a) {}
hoge func(ref int b) {}
hoge func() {}
を追加しようとしたのですが、上の2つがrefとoutの違いだけではオーバーロードできません。
こういう場合どういう設計にしたらいいのでしょうか?
0125デフォルトの名無しさん
2008/03/02(日) 00:32:05hoge funcWithAAndB(out int a, ref int b){}
hoge funcWithA(out int a){}
hoge funcWithB(ref int b){}
hoge func(){}
0126デフォルトの名無しさん
2008/03/02(日) 00:35:33VBとか、その他で省略能力のある言語との連携があるなら
使う側で対処する
func( out Type.Missing , ref data ) ;
といった感じ、Type.Missingが省略の意味。
C#オンリーなら素直にメソッド分けよう。
0127デフォルトの名無しさん
2008/03/02(日) 00:36:300128デフォルトの名無しさん
2008/03/02(日) 00:37:310129デフォルトの名無しさん
2008/03/02(日) 00:42:270130デフォルトの名無しさん
2008/03/02(日) 00:45:37{
public int A;
public hoge hoge;
}
Result func(ref int b)
Result func()
こうかな
0131124
2008/03/02(日) 01:00:40ありがとうございました。
0132102
2008/03/02(日) 02:40:42using System.Linq ;
public static class FieldIndexer
{
class LookupTable
{
public System.Collections.Generic.Dictionary<int, System.Reflection.FieldInfo> mapIndexToField;
public LookupTable( System.Type type )
{
mapIndexToField = new System.Collections.Generic.Dictionary<int, System.Reflection.FieldInfo>();
foreach (var fieldInfo in type.GetFields())
{
var customAttributes = fieldInfo.GetCustomAttributes(true).OfType<FieldIndexerAttribute>();
var count = customAttributes.Count();
if (count == 0) continue;
if (count != 1) throw new System.Exception("FieldIndexerAttributeが二つ以上ついているフィールドを発見");
var index = customAttributes.First().Index;
mapIndexToField.Add(index, fieldInfo);
}
}
}
static object syncRoot = new object() ;
static System.Collections.Generic.Dictionary<Type, LookupTable> tables = new Dictionary<Type, LookupTable>();
0133102
2008/03/02(日) 02:41:25{
if (!tables.ContainsKey(type))
{
lock (syncRoot)
{
if (!tables.ContainsKey(type))
{
var tmp = new LookupTable( type );
tables.Add(type, tmp);
return tmp;
}
}
}
return tables[type];
}
0134102
2008/03/02(日) 02:42:00{
try
{
return GetLookupTable(dataClass.GetType()).mapIndexToField[index].GetValue(dataClass);
}
catch (System.Collections.Generic.KeyNotFoundException)
{
throw new System.Exception("指定のインデックスの設定されたフィールドが存在しなかった");
}
}
public static void SetValue(object dataClass, int index, object value)
{
try
{
GetLookupTable(dataClass.GetType()).mapIndexToField[index].SetValue(dataClass, value);
}
catch (System.Collections.Generic.KeyNotFoundException)
{
throw new System.Exception("指定のインデックスの設定されたフィールドが存在しなかった");
}
}
}
0135102
2008/03/02(日) 02:43:17{
public int Index { get;set;}
public FieldIndexerAttribute(int index) { Index = index; }
};
ここまでで、ライブラリ化する。
0136102
2008/03/02(日) 02:44:11public class SampleClass
{
[FieldIndexer(10)]
public int FieldA;
[FieldIndexer(20)]
public string FieldB;
};
void SampleProgram()
{
var tmp = new SampleClass();
tmp.FieldA = 10;
tmp.FieldB = "ABC";
System.Console.WriteLine("{0}", FieldIndexer.GetValue(tmp, 10));
System.Console.WriteLine("{0}", FieldIndexer.GetValue(tmp, 20));
FieldIndexer.SetValue(tmp, 10,1234);
FieldIndexer.SetValue(tmp, 20,"XYZ");
System.Console.WriteLine("{0}", tmp.FieldA);
System.Console.WriteLine("{0}", tmp.FieldB);
}
0137デフォルトの名無しさん
2008/03/02(日) 10:37:00コンパイルの度にプロジェクトに含まれる全ての.csをコンパイルしているのでしょうか?
それともどこか別の場所に置いてあるのでしょうか?
プロジェクトが大きくなってきてコンパイル時間が気になり始めたので
もし全てリコンパイルしているならdllに分割しようかと思っています。
0138デフォルトの名無しさん
2008/03/02(日) 10:40:51ので適切にDLLに分ける
0139デフォルトの名無しさん
2008/03/02(日) 10:41:43ディクショナリじゃなくて配列で十分そうだな。
あとほんとはハンドルだけ保持しとくほうがいいかもな。
0140デフォルトの名無しさん
2008/03/02(日) 10:55:10知らんけど
dll分けると余計に時間がかかる
しかし設計としてはどんどん分けた方がいい
依存関係が強制されinternalが有効に使える
0141デフォルトの名無しさん
2008/03/02(日) 11:03:27おっと、インデックスが好きに付けられるなら配列はやっぱまずいか…
0142デフォルトの名無しさん
2008/03/02(日) 11:09:12ありがとうございます。
ぜひ使わせていただきます。
0143デフォルトの名無しさん
2008/03/02(日) 11:15:31ソースファイルには無い リソースやxamlにはあるけど
/obj/xxxにも直接アセンブリが作られる
もちろんソースその他に変更の無いアセンブリはコンパイル対象にならない
0144デフォルトの名無しさん
2008/03/02(日) 12:13:00中間ファイルが見当たらないことからそんな結論が導かれるわけがない
0145デフォルトの名無しさん
2008/03/02(日) 13:21:12>>105のやつは
dataを
foreach(object obj in data)
{
if(obj is DateTime)
{
dateTimeTable.Add((DateTime)obj);
}
if(obj is int)
{
intTable.Add((int)obj);
}
...
}
とやっていって、フィールド名の最後の数字を取得して、
field.SetValue(instance, dateTimeTable[num - 1]);
こうやっていけばきっちり出来るんじゃないかという話だ
フィールドはいじらなくていい
0146デフォルトの名無しさん
2008/03/02(日) 13:32:280147デフォルトの名無しさん
2008/03/02(日) 13:49:110148デフォルトの名無しさん
2008/03/02(日) 13:50:44つかいらんだろあんなの
0149デフォルトの名無しさん
2008/03/02(日) 13:52:220150デフォルトの名無しさん
2008/03/02(日) 13:54:500151デフォルトの名無しさん
2008/03/02(日) 13:58:27プロセッサ非依存の.NETでは避けた方がいい、ビッグエンディアンで大変な事態に陥るから。
安易な実装事故の元
0152デフォルトの名無しさん
2008/03/02(日) 14:00:40どんな場合に使うかちょっと想像できないでいます
0153デフォルトの名無しさん
2008/03/02(日) 14:05:02いろいろある、データ圧縮では定番のテクニックの一つ
0154152
2008/03/02(日) 14:06:400155デフォルトの名無しさん
2008/03/02(日) 14:07:100156デフォルトの名無しさん
2008/03/02(日) 14:08:59#ZipLibを馬鹿にしたな!?
0157デフォルトの名無しさん
2008/03/02(日) 14:13:480158デフォルトの名無しさん
2008/03/02(日) 14:14:17消費リソースを抑えたいなら、結局はそこだけnativeにする形になるし
0159デフォルトの名無しさん
2008/03/02(日) 14:14:48ネットワークプログラミングやバイナリファイルの読み込みではビットオーダーに気をつけないといけないね。
0160デフォルトの名無しさん
2008/03/02(日) 14:15:43プロジェクト毎にコピーされるのではなく1つのクラスライブラリファイルを複数のプロジェクトで共有したい。
0161デフォルトの名無しさん
2008/03/02(日) 14:17:42環境非依存ビットストリームライブラリは欲しいと思うけど、なおnativeは今後の事を考えると問題を引き起こす可能性が高いから止めるべき。
そもそもCom相互運用では処理速度が低下してかえって良くない状態に陥る。
0162デフォルトの名無しさん
2008/03/02(日) 14:19:27普通にできるよ、追加のところのメニューをくまなく探す
0163デフォルトの名無しさん
2008/03/02(日) 14:25:39聞く前に検索くらいしろよ。一発で出てきたぞ
ttp://www.atmarkit.co.jp/fdotnet/dotnettips/596vssharelinkfile/vssharelinkfile.html
0164デフォルトの名無しさん
2008/03/02(日) 14:37:00ありがとうございます。追加ボタンの横にある矢印に気付きませんでした。
0165デフォルトの名無しさん
2008/03/02(日) 14:37:05intrinsicなビット操作命令は持ってたりするけど。
0166デフォルトの名無しさん
2008/03/02(日) 15:03:15「iata75_cd.exeに-a -aって起動オプションをつけて走らせる。」
って言われたんですが、-a -aって起動オプションをつけて
走らせるにはどうしたらいいですか?
何か書き換えるためのプログラムが必要なんでしょうか。
0167デフォルトの名無しさん
2008/03/02(日) 15:06:540168デフォルトの名無しさん
2008/03/02(日) 15:08:17GUIの設定(ラジオボタン)とかはよくビットでデータ持つよ
0169デフォルトの名無しさん
2008/03/02(日) 15:09:57あー、チェックが入ってるか否かを0と1でって感じでしょうか?
bool型とかにしてもそんな問題ない気はするけど実際はそういう話でもないのかな
0170デフォルトの名無しさん
2008/03/02(日) 15:13:18boolで一つ一つ持つよりも、ビットでまとめて
マスク処理とかした方が分岐させやすい
0171デフォルトの名無しさん
2008/03/02(日) 15:16:14コマンドラインですか><
了解しますた。
0172デフォルトの名無しさん
2008/03/02(日) 15:33:450173デフォルトの名無しさん
2008/03/02(日) 15:34:230174102
2008/03/03(月) 01:48:41結構便利なので自分でも使い始めたのですが・・・
ダブルチェックドロックングの処理にバグを発見してしまいました、使うならこちらを使って下さい。
前出のコードではマルチスレッドで過負荷をかけると、Dictionary が壊れます。
>>139 氏の意見も取り入れて、ジェネリックにしてみました、実は当初も考えたのですが、
C++のように static 関数からジェネリックなシングルトンとなるオブジェクトを作り出す方法が思いつかなくて、
とりあえず object で実装していましたが、やり方を発見したので実装してみました。
ハッシュテーブルが一つになってさらに高速化したと思われます、またその過程でマルチスレッドバグも取れました。
あと、ハンドルの意味分りません、>>139 氏、説明お願いできますか?
さらに高速化するなら、LINQ のようにアクセス部分をコンパイルして switch 文にしまうか……
それは今後の課題にでもしておきます。
使い方は変わりません。
public class FieldIndexerAttribute : System.Attribute
{
public int Index { get;set;}
public FieldIndexerAttribute(int index) { Index = index; }
};
0175102
2008/03/03(月) 01:49:31{
class LookupTable<TSource>
{
public static LookupTable<TSource> Instance = new LookupTable<TSource>();
public System.Collections.Generic.Dictionary<int, System.Reflection.FieldInfo> mapIndexToField;
public LookupTable()
{
mapIndexToField = new System.Collections.Generic.Dictionary<int, System.Reflection.FieldInfo>();
foreach (var fieldInfo in typeof(TSource).GetFields())
{
var customAttributes = fieldInfo.GetCustomAttributes(true).OfType<FieldIndexerAttribute>();
var count = customAttributes.Count();
if (count == 0) continue;
if (count != 1) throw new System.Exception("FieldIndexerAttributeが二つ以上ついているフィールドを発見");
int key = customAttributes.First().Index;
if (mapIndexToField.ContainsKey(key)) throw new System.Exception("同じ値の FieldIndexerAttribute ついているフィールドを発見");
mapIndexToField.Add(key, fieldInfo);
}
}
}
0176102
2008/03/03(月) 01:50:11{
try
{
return LookupTable<TDataClass>.Instance.mapIndexToField[index].GetValue(obj);
}
catch (System.Collections.Generic.KeyNotFoundException)
{
throw new System.Exception("指定のインデックスの設定されたフィールドが存在しなかった");
}
}
public static void SetValue<TDataClass>(TDataClass obj, int index, object value)
{
try
{
LookupTable<TDataClass>.Instance.mapIndexToField[index].SetValue(obj, value);
}
catch (System.Collections.Generic.KeyNotFoundException)
{
throw new System.Exception("指定のインデックスの設定されたフィールドが存在しなかった");
}
}
}
0177デフォルトの名無しさん
2008/03/03(月) 07:10:050178デフォルトの名無しさん
2008/03/03(月) 10:24:34どんな手順か教えてちょ
0179デフォルトの名無しさん
2008/03/03(月) 11:35:540180デフォルトの名無しさん
2008/03/03(月) 11:43:270181デフォルトの名無しさん
2008/03/03(月) 11:53:38そもそもコンパイルエラー
0182デフォルトの名無しさん
2008/03/03(月) 11:53:55フォールスルーしたいなら明示的にgoto
caseラベル間が空白でない場合は、break/return/gotoが必要
0183デフォルトの名無しさん
2008/03/03(月) 12:55:03>>170じゃないけど、たとえば
class MyClass
{
public int X, Y, Z;
public string Str1, Str2, Str3;
public bool flag1, flag2, flag3;
}
class Program
{
static MyClass[] tmp = new MyClass[] {//何か入ってる };
static void Main()
{
foreach (MyClass item in tmp)
{
if (item.flag1)
{
//処理
}
}
}
}
フラグを読んで色々処理を変えたいようなクラスを作ったとする。
運用上、格納するフラグを増やす必要が出てきたときにどうする?
MyClassをライブラリとして作成するような場合、そのライブラリの回収が必要になってくる。
もしフラグ自体をboolじゃなくて例えばintで持っていたとすると、
1ビットに1フラグを割り当てておけばよいから、32種類のフラグを格納できる。
上の例だと、フラグが3つあるということは残り29ビットは予備の領域として確保できる。
運用を変えるだけでフラグを簡単に増やせるようであれば、ライブラリ化してあるMyClassの回収の必要がないので便利。
0184デフォルトの名無しさん
2008/03/03(月) 13:11:02あとは本題のマスク処理というのは、多分こういうことだと思う。
class MyClass
{
public int X, Y, Z;
public string Str1, Str2, Str3;
public int flag; //ビット単位でフラグを格納
public bool flag1, flag2, flag3, flag4; //全てboolで格納
}
フラグ1と3と4が立っている場合の条件分岐を考える。
boolで各フラグを格納しているクラスを使う場合、
bool f = flag1 && flag3 && flag4;
一方、intで格納しているクラスを使う場合、
int ff = 1 + 4 + 8; //それぞれflag1,flag3,flag4を表す
bool f = (flag & ff) == ff
また、全てのフラグをリセット(false)にしたいときなんかは、
flag1 = false;
flag2 = false;
flag3 = false;
flag4 = false;
intでフラグを格納してあれば当然、
flag = 0;
これだけで済む。
MyClassの中身が複雑になればなるほど、こういう手法は効果的になる。
0185デフォルトの名無しさん
2008/03/03(月) 13:12:48http://msdn2.microsoft.com/ja-jp/library/sbbt4032(VS.80).aspx
0186デフォルトの名無しさん
2008/03/03(月) 13:38:10なんで148?
0187デフォルトの名無しさん
2008/03/03(月) 13:44:28bitvector.All() 指定のビットすべてについて true なら true
bitvector.Any() 指定のビットのなかに true なものがあれば true
はるかに柔軟性があるし。
0188デフォルトの名無しさん
2008/03/03(月) 13:45:060189デフォルトの名無しさん
2008/03/03(月) 13:49:222進数だろカス
0190デフォルトの名無しさん
2008/03/03(月) 14:03:49BitArrayならOfType<bool>通せば可能だよ
列挙体やBitVectorにも拡張メソッド付けて
flag.ToEnumerable().Anyとかできるようにしたら面白いかもね
0191デフォルトの名無しさん
2008/03/03(月) 16:43:200192デフォルトの名無しさん
2008/03/03(月) 16:48:08ない
0193デフォルトの名無しさん
2008/03/03(月) 16:56:34今色々試してみてるところで、ちょこっと場当たり的に作ってみたのですが
1つのクラスは2000行ほどなのに対してもうひとつが200行弱ほどで、その2つのみなのでどうも不自然に感じていたようです
0194デフォルトの名無しさん
2008/03/03(月) 17:02:300195デフォルトの名無しさん
2008/03/03(月) 17:05:43主要処理部分のswitchが厄介だしここを別クラスにすべきっぽいかな…
ありがとうございました
0196102
2008/03/03(月) 17:20:58右クリック→リファクタ→メソッドの抽出
ってやればいいんだよ
0197デフォルトの名無しさん
2008/03/03(月) 17:22:200198デフォルトの名無しさん
2008/03/03(月) 17:24:04namespace ソリューション名.Properties
にしているんですが
namespace ソリューション名
と違いはあるんでしょうか、普通にやると下になってそれがデフォルトのようですが
0199102
2008/03/03(月) 17:25:39こらー、何処にいれちょるかー
そこは、アプリケーションプロパティーの居るべき場所じゃー
0200デフォルトの名無しさん
2008/03/03(月) 17:26:270201198
2008/03/03(月) 17:30:31たしかコードか何か新規項目を追加したときかな
で、今戻したらエラーが、Propertiesでいいや
0202デフォルトの名無しさん
2008/03/03(月) 20:22:54Enum.GetNamesで得られる名前の配列の
要素の順番の対応は保障されてるの?
0203デフォルトの名無しさん
2008/03/03(月) 20:38:060204デフォルトの名無しさん
2008/03/03(月) 21:43:45同値異名が可能なことを考えれば明らか
0205デフォルトの名無しさん
2008/03/03(月) 21:48:21謎の日本語だけれど、期待するなと書かれているように受け止められますな
> 解説
>戻り値の配列の要素は列挙定数の値に基づいて並べ替えられます。同じ値を持つ列挙定数がある場合、対応する名前の順序は指定されていません。
0206デフォルトの名無しさん
2008/03/03(月) 22:07:430207デフォルトの名無しさん
2008/03/03(月) 22:51:40{
A = 4,
B = 3
}
こんなん書けたよな
0208デフォルトの名無しさん
2008/03/03(月) 22:54:560209デフォルトの名無しさん
2008/03/03(月) 22:56:46書けるんじゃね
続いてCだけを定義すると自動的に4になる
0210デフォルトの名無しさん
2008/03/03(月) 23:08:46C#でExcelへの書き込みを行ってるのですが、
http://jeanne.wankuma.com/tips/programing/releasecom.html
このソースコードでExcelの解放が出来たのですが、書き込みをする為に
xlSheet.Cells[1, 2] = "テスト";
この上記の一行を入れたら解放されなくなりました。
何が原因なのでしょうか??
もしくは上記以外でExcelに書き込んで保存する方法はあるのでしょうか?
0211デフォルトの名無しさん
2008/03/03(月) 23:11:11問題解決しました!!!!!
0212デフォルトの名無しさん
2008/03/03(月) 23:11:350213デフォルトの名無しさん
2008/03/03(月) 23:22:51どう解決したか書けっつーのカス
書けないなら最初から2chで質問すんな
0214デフォルトの名無しさん
2008/03/03(月) 23:23:49System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet.Cells);
これを入れたら、なんか解放したりしなかったり・・・
VSの問題???
0215デフォルトの名無しさん
2008/03/03(月) 23:24:270216デフォルトの名無しさん
2008/03/03(月) 23:25:39// Excel を起動しファイルを読み込む
// ※ Excel ファイルのパスは適宜修正してください
Excel.Application app = new Excel.Application();
Excel._Workbook wb = app.Workbooks.Open(
@"C:\test\test.xls",
Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing
);
wb.Application.Visible = false;
// 人口のデータを配列に読み込む
Excel._Worksheet ws = (Excel.Worksheet)wb.ActiveSheet;
ws.Cells[5, 5] = "テスト";
System.Runtime.InteropServices.Marshal.ReleaseComObject(ws.Cells);
// ファイルをセーブし、Excel を終了する
wb.Save();
app.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(ws);
System.Runtime.InteropServices.Marshal.ReleaseComObject(wb);
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
これでは解放しない??
0217デフォルトの名無しさん
2008/03/03(月) 23:35:330218デフォルトの名無しさん
2008/03/03(月) 23:41:220219デフォルトの名無しさん
2008/03/03(月) 23:46:45app.Workbooks.Open
ここで、Workbooksが漏れる
wb.Application.Visible = false;
ここでApplicationが漏れる
0220デフォルトの名無しさん
2008/03/03(月) 23:52:36ありがとう、なんか現象として、cellに入れる値を変えてリビルドすると
解放されるんだけど、すぐにもう一回すると解放されない・・・みたいな
0221デフォルトの名無しさん
2008/03/03(月) 23:54:55すいません。
リビルドでなくデバックです^^;
0222デフォルトの名無しさん
2008/03/03(月) 23:56:03を分解すると
a1 = ws.Cells
a2 = a1[5, 5]
a2.set_Value(Excel.XlRangeValueDataType.xlRangeValueDefault, "テスト");
でa2の開放がもれている。
0223デフォルトの名無しさん
2008/03/04(火) 00:00:02すいません。
a1,a2はなんの変数でしょうか?
0224デフォルトの名無しさん
2008/03/04(火) 00:00:210225デフォルトの名無しさん
2008/03/04(火) 00:01:270226デフォルトの名無しさん
2008/03/04(火) 00:12:15・各要素は列挙定数でソートされる
・列挙定数が同値の要素の順序は不定
Enumとしてはともかく、値だけ見れば対応していると言えるな
列挙定数が同値というのは要するに別名だし
とりあえず、(type)Enum.Parse(type,names[i])==values[i]は真
>>224
開放されてるように見えるが?
念のために補足しておくと、>>216でws.Cells[5,5]も解放しろって話だろ
0227デフォルトの名無しさん
2008/03/04(火) 00:21:58// 1000 ミリ秒 (1秒) 待機する
System.Threading.Thread.Sleep(1000);
xlRange.set_Item(3, 5, "テスト");
System.Threading.Thread.Sleep(1000);
xlBook.Save();
Rangeにはset_Itemしかなく、何か参照が足りないのでしょうか??
Excel.XlRangeValueDataTypeを書いてもエラーが出ます。
0228デフォルトの名無しさん
2008/03/04(火) 00:33:150229デフォルトの名無しさん
2008/03/04(火) 00:33:27だからReleaseComObject(ws.Cells)は、増やして減らして意味ない
文かなーと思ったけど
0230デフォルトの名無しさん
2008/03/04(火) 00:35:44RCWの参照とCOMの参照カウンタは別。
RCW、つまりマネージ参照をいくらコピーしてもCOMの参照カウンタは増えない。
0231デフォルトの名無しさん
2008/03/04(火) 00:38:41は新しいCOMオブジェクトを取ってきてそれを開放するから意味がないだろ。
0232デフォルトの名無しさん
2008/03/04(火) 00:39:39ExcelのCOMを経由して、あたらしいオブジェクトが2つ、3つとできるんでなくて?
0233デフォルトの名無しさん
2008/03/04(火) 00:41:12ネスト深すぎテラワロス
0234デフォルトの名無しさん
2008/03/04(火) 00:45:36外部の独立したプロセスからExcelを操作することを意図して作られていない。
VSTOもそういう設計思想。
0235デフォルトの名無しさん
2008/03/04(火) 00:50:060236デフォルトの名無しさん
2008/03/04(火) 00:54:020237デフォルトの名無しさん
2008/03/04(火) 00:55:070238デフォルトの名無しさん
2008/03/04(火) 00:59:00積極追跡(Excel.Applicationから生み出されたRCWすべてのweakrefリストとか)して
まとめてあぼーん、みたいにはできないものかね?
まあ、COM一般を対象にするならイマイチつかえない、Office用途な使い方になるけど。
0239デフォルトの名無しさん
2008/03/04(火) 01:05:530240デフォルトの名無しさん
2008/03/04(火) 02:41:380241デフォルトの名無しさん
2008/03/04(火) 07:36:08自分はなんとなく全部書ききってしまってますけど・・・
0242デフォルトの名無しさん
2008/03/04(火) 07:38:030243デフォルトの名無しさん
2008/03/04(火) 08:26:260244デフォルトの名無しさん
2008/03/04(火) 08:30:22フィールドハンドルを保持しといて、必要になった時点で
フィールドインフォを取得するやり方のこと。
まあ必ずしもやる必要はないし、
単純な速度的にはやらない方が有利だけどね。
0245デフォルトの名無しさん
2008/03/04(火) 09:19:35TreeNode.Parentのように、
あるオブジェクトAの内部で持っているオブジェクトBでオブジェクトAをプロパティParentで持っているのですが、
これを復帰させる方法に悩んでいます。
そのままだと循環参照でエラーになってしまうのでParentには[XmlIgnore]をつけてあります。
Deserialize()したあとに再セット用のメソッドを動かせば済むのですが、
オブジェクトAはList<>の中で持っているのでループを回す必要があることもあって、
あまり美しくないのでできれば避けたいのですが、何かいい方法はないのでしょうか?
0246デフォルトの名無しさん
2008/03/04(火) 09:34:44webbrowser.Navigate(url); してDocumentCompletedイベントでDocument拾うと、
コードが分離されてわかりにくいし、遷移先のページごとにあれこれ処理変えたい
場合、複数のイベントハンドラメソッドを定義して イベントにアタッチ、デタッチを
繰り返さないといけないので、ロジックがスパゲッティになっちまうんですが…。
webbrowser.Navigate(url)
while(webbrowser.IsBusy)
{
}
でループ回しても、Documentが読み込まれていないタイミングのこともあるんで
いまいち信用ならないんですが、IsBusyプロパティ以外になんか判定タイミング
ってあるんでしょうか?
0247デフォルトの名無しさん
2008/03/04(火) 10:01:56foreach (string file in Directory.GetFiles(dir))
{
try
{
File.Copy(file, destpath, true);
}
catch
{
continue;
}
}
以上のように、複数ファイルをforループで回してコピーや削除を行っています
そこで、エラーは表示しなくていいのでコピーや削除でエラーが出たら飛ばしたいなと思い
コピーまたは削除処理にをtryで囲み、catchしてcontinueするという風にしています。
まず、コピーや削除が失敗することがあるのか(File.Copy、File.Delete等)
次に、私が上記で示したようにtryで処理を囲みcatchでcontinueするような処理が一般的なのかどうか
次に、出した例ではstringで処理していますがFileInfoなどを利用してみてもいます。
FileInfoを使うことで、他の質問にある答えが変わる場合それも教えて頂きたいです。
最後に、trycatchで処理部分を囲んでいるとして、それをループしています(そこがおそらく一番時間かかる主要処理)
その際、処理速度の低下などは気にするほどあるのでしょうか?
以上です、よろしくお願いします
0248デフォルトの名無しさん
2008/03/04(火) 10:22:16>遷移先のページごとにあれこれ処理変えたい場合、
>複数のイベントハンドラメソッドを定義して イベントにアタッチ、デタッチを
>繰り返さないといけない
が理解できないが
イベントハンドラ内で分岐すりゃいいだけじゃね?
IsBusyループはあほかって感じ
>>247
>まず、コピーや削除が失敗することがあるのか
当たり前だが、ある。
>tryで処理を囲みcatchでcontinueするような処理が一般的なのか
エラー処理でどんな処理をしたいかによる
一般にcatchで握りつぶすのはよくないが、ファイル操作のときは
仕方ないときもある
>FileInfoを使うことで...
同じ。Fileの静的メソッドは内部でFileInfo使ってる
>trycatchの処理速度の低下
tryはコスト高くない。catchが発生した場合は高コスト
ディスクIOの方が重いだろうけど
0249デフォルトの名無しさん
2008/03/04(火) 10:24:58> まず、コピーや削除が失敗することがあるのか(File.Copy、File.Delete等)
ありますね。destpathが無効だったり、アクセス許可が無かったり、ファイルがロックされていたり
destpathが既に存在したりしていれば失敗します。
> 次に、私が上記で示したようにtryで処理を囲みcatchでcontinueするような処理が一般的なのかどうか
この例でcontinueがいるとは思えないですが…。。。
> 次に、出した例ではstringで処理していますがFileInfoなどを利用してみてもいます。
> FileInfoを使うことで、他の質問にある答えが変わる場合それも教えて頂きたいです。
同じだと思います。
> 最後に、trycatchで処理部分を囲んでいるとして、それをループしています(そこがおそらく一番時間かかる主要処理)
> その際、処理速度の低下などは気にするほどあるのでしょうか?
try-catchでも例外が起きない限り、ほとんどコストはかからないと思います。
逆にコストが問題になるほどしょっちゅう例外が起きるなら、ロジックを見直すべきだと
思います。
ファイルがらみの例外は種々雑多なので例外処理のコストを嫌ってすべて条件判定
で処理しようとしても、労多く益は少ないと思いますが。
0250デフォルトの名無しさん
2008/03/04(火) 10:35:19二つや三つの場合分けならいいんですが、たとえば
Aページでフォームに自動記入してBページに飛んで、そこでなんか情報取って
さらにCページへ飛んで、サーバ側やクライアントスクリプト、activeXコンポーネント等で自動
ジャンプさせたのを判定して…Dページでまたフォームを記入して………
などと一連の動作を自動化することを考えると、条件分岐が異常に深くなってしまって、
それはそれでものすごく読みにくいんですわ。
素直にwebclientで同期的にダウンロードしてHTML独自に解析しろって言われそうですが、
ページでスクリプトやらactiveXコンポーネント使っているとお手上げなもんで、どうしても
DOM操作して人間の動作をエミュレートしたいときがあるもんで…。
0251デフォルトの名無しさん
2008/03/04(火) 11:14:03よくわからんけど、
abstract class Base {
public abstract void やること();
}
class 処理A : Base{
public override void やること() {
.....
}
}
class 処理B : Base{
public override void やること() {
.....
}
}
みたいにそれぞれの処理用のクラスを定義して、
Navigateする前に該当する処理クラスのオブジェクトを作って、
private Base 今の処理
みたいに保持しておいて
DocumentCompletedで
今の処理.やること()
みたいにすればすっきりするんじゃね?
0252247
2008/03/04(火) 11:15:49>>249
ありがとうございます。
trycatchはコストが低いということが聞けて安心しました
もし、以下の処理だけならcatch{}だけでよかったですね、反省
foreach (string file in Directory.GetFiles(dir))
{
try
{
File.Copy(file, destpath, true);
}
catch
{
continue;
}
}
0253デフォルトの名無しさん
2008/03/04(火) 11:16:160254デフォルトの名無しさん
2008/03/04(火) 11:26:18continueはいらんっちゃいらんけど
0255デフォルトの名無しさん
2008/03/04(火) 11:28:460256デフォルトの名無しさん
2008/03/04(火) 11:36:53キャッチはどっちみち必要だけど
0257デフォルトの名無しさん
2008/03/04(火) 11:48:31事前に全部チェックしてたら二重になって遅くなりそうだし面倒くさいから俺はやらねえ。
0258デフォルトの名無しさん
2008/03/04(火) 14:39:24ここではたまたまcontinueがループの最後にきてるから良いけど
continueは後無視してループの頭に戻っちゃうから、場合によっちゃまずくないですか?
0259デフォルトの名無しさん
2008/03/04(火) 14:39:47C#のフォームとグラフィックを扱った書籍を教えていただけないでしょうか?
MDIでの開発の仕方が載っているものがあると助かります。
以前はDelphiを数年バリバリに使っておりましたので、
プログラミング初心者というわけではありません。
0260デフォルトの名無しさん
2008/03/04(火) 14:40:14C#のフォームとグラフィックを扱った書籍のお勧めを教えていただけないでしょうか?
0261デフォルトの名無しさん
2008/03/04(火) 14:43:07えっと 出していただいた例を今ひとつ理解し切れていない自分ですが、
たとえば、wb_documentcompletedでdocumentを取得して
その中のformをinvokemenber("submit")したりすると、次にやるべき処理の
クラス(baseの子クラス)を設定する場面が無いと思うんですが…。
wb.Navigateを呼び出したルーチンには戻らないでそのまま再びdocumentcompletedに
とんでっちゃうわけで…。
0262102
2008/03/04(火) 18:54:07すみません、後学のために教えていただけますでしょうか、フィールドハンドルって何ですか?
知らない知識がまだまだあるみたいです……
0263デフォルトの名無しさん
2008/03/04(火) 18:56:19なんでそういう解釈されたか意味不明
0264デフォルトの名無しさん
2008/03/04(火) 18:59:05ちゃんとレス辿ってないだけでしょ、彼が
0265デフォルトの名無しさん
2008/03/04(火) 21:30:42しかし、ひとつ作ってみたいプログラムのアイディアが浮かんだので、
これからC#で作ろうかと思っているのですが、なかなか指針すら立ちません。
どのような設計をすればよいのかアドバイスをお願いいたします。
何を作るのかというと、睡眠日誌というものがあるのですが・・・↓
ttp://www.kaimin.info/part/pdf/nisshi.pdf
これを実現するようなアプリを作りたいのです。どうすればよいでしょうか?
0266デフォルトの名無しさん
2008/03/04(火) 21:42:03作るかな。
ネタ提供サンクス。
0267デフォルトの名無しさん
2008/03/04(火) 22:00:08まず書いて動かすこと
動かせる範囲のものを書くこと
はじめからちゃんとしたものを作ろうとしないで一部分だけでいいからちゃんと動かす
うまく行かなくなったら何度も書き直す
それがうまくやるコツ
0268265
2008/03/04(火) 22:02:27なんとありがたい!
あまり突っ込むとスレ違いになりますが、私自身過眠症で必要に迫られてのことで。ぜひともお願いいたします。
後学のため、よろしければどのような感じで作るかの指針をお教えいただけませんでしょうか?
0269265
2008/03/04(火) 22:06:56なるほど。一度イメージするUIを紙に書いて、
自分なりにどの部位からコード化していけそうか考えてみます。
アドバイスありがとうございます。
0270デフォルトの名無しさん
2008/03/04(火) 22:37:48いや、逆にcontinue書かなきゃいけない理由が知りたいですけど
0271デフォルトの名無しさん
2008/03/04(火) 22:44:54むしろ後に何か書き加える場合にcontinueがないとぶっ壊れるだろ
形としてはここにcontinueがあるべきで、今必要ないからといって
削除しなきゃならないというものでもない
0272デフォルトの名無しさん
2008/03/04(火) 22:46:10{
// この部分
}
上記のコメント部のなかで、
引数のobjが宣言時に特定の属性をつけられたかどうかを判別する方法はありますか?
たとえば
[Marked()]object a;
void Test()
{
if(IsMarked(a))
{
Console.WriteLine("True");
}
}
みたいなことができれば満足です。
詳しい方がたくさんおられるようなので、宜しくお願い致します。
0273デフォルトの名無しさん
2008/03/04(火) 22:47:45なんか最近の医者って新しい病気作るのに必死だよな。
0274デフォルトの名無しさん
2008/03/04(火) 22:48:30それは属性の使い方が間違ってる
0275デフォルトの名無しさん
2008/03/04(火) 22:59:110276デフォルトの名無しさん
2008/03/04(火) 23:11:27>>275
ありがとうございます。
納得しました。
0277デフォルトの名無しさん
2008/03/05(水) 00:28:15> むしろ後に何か書き加える場合にcontinueがないとぶっ壊れるだろ
追加実装の場合は、単なるコーディングミスだろ・・・
> 形としてはここにcontinueがあるべきで
ないべき。
使用しない、意味の無いコードは書いてあっても利益にならない。
なんで使わない変数とかが警告出るか考えろよ。
0278デフォルトの名無しさん
2008/03/05(水) 00:29:560279デフォルトの名無しさん
2008/03/05(水) 00:35:35ちゃんとレス読んでから書け、読んでてそれなら半年ROMれ。
>>247だとfor文の最終行にcontinueつけてんのと同じ事。
0280デフォルトの名無しさん
2008/03/05(水) 00:44:46同じことだろうが
実行結果に関わらない、単に無駄なだけのコードだ
それに意味があると考えるか考えないかはお前の主観でしかない
ifを{}にいれておくのが望ましいといわれるのは、そこに何か追加することがあるからだ
あのコードは下に追加される可能性が大いにある
その意味ではあのcontinueには意味がある
elseがいらなくてもelseと書いた方が分かりやすいこともある
ケースバイケースだ
それはそれとしてC#ではfor文の最後にcontinueを書かなきゃならなくなることもよくあるぞ
0281デフォルトの名無しさん
2008/03/05(水) 00:47:14いいえ
0282デフォルトの名無しさん
2008/03/05(水) 00:48:41>最初のインスタンスが作成される前、または静的メンバが参照される前
と書いてありますが、複数スレッドから同時にアクセスした場合でも正常に動作するのでしょうか?
0283デフォルトの名無しさん
2008/03/05(水) 00:49:32なんでそうなってるのかといえばラベルがforの最後にあるより、その下にcontinueがあったほうが
意味がはっきりするからだろう
0284デフォルトの名無しさん
2008/03/05(水) 00:52:24bool flg = false;
if (flg) {
} else {
・・・
}
こんなコード書いちゃう人?
0285デフォルトの名無しさん
2008/03/05(水) 00:54:13それはわかりにくいだろう
if(flg == false)
と俺は書くな
0286デフォルトの名無しさん
2008/03/05(水) 01:11:51if ( ! flg ) {
//・・・
}
って書くぜ。
っていうかたまに flg == false とか flg == true って書き方みるけど変じゃね?
0287デフォルトの名無しさん
2008/03/05(水) 01:18:00普通に左から読んでいけば
もしフラグがfalseならば、
と読める
!flgは頭の中で変換しなきゃならない
flgがよっぽど何のことか分からない名前でなければ==trueとも書かないな
しかし変数名がflgだったら==trueと書くかもしれない
0288デフォルトの名無しさん
2008/03/05(水) 01:32:300289デフォルトの名無しさん
2008/03/05(水) 02:21:11ちょっとだんだん意味わかんなくなってきたんですけど、
もしかしてcontinueの意味取り違えてません?
あとに何か書き加えたときにcontinueあったら、「後に書き加えた何か」
無視して、次の反復処理に制御を移動されちゃうと思うんですが…。
break→以下無視して反復処理抜ける
continue→以下無視して 次の反復処理へ移動
だと思ってましたが、違いましたっけ?
0290デフォルトの名無しさん
2008/03/05(水) 02:30:41何を言っているのか分からないが
後に書き加えた何かは、例外で失敗した後には実行されないものだ
そしてそれはtryブロックの後ろに配置されるべきものだ
全部をtryで囲んで全てをキャッチするというのは悪いコーディングだ
0291デフォルトの名無しさん
2008/03/05(水) 02:32:26もう相手すんな
0292デフォルトの名無しさん
2008/03/05(水) 02:48:52}の直前など、対応するコードの無い部分にラベル付けられないからだろ
どうしてもラベル付けたいなら、普通は空ステートメントを書く
>>284-288
if(flg == true)と書くやつは、何故if((flg == true) == true)あるいは
if((((flg == true) == true) == true) == true)と書かないのか
という指摘を見たことがあるな
0293デフォルトの名無しさん
2008/03/05(水) 03:00:03空ステートメントなんていう異様なものを書くよりは、continueの方がずっと分かりやすいだろう
ちなみにCにはこんな制限はない。C#にわざわざ加えられたものだ。
おそらくcontinueと書かせるためだろう
>f(flg == true)と書くやつは、何故if((flg == true) == true)あるいは
>if((((flg == true) == true) == true) == true)と書かないのか
意味が伝わりにくくなるからだな
プログラムにとって大事なのは意味が伝わりやすいことであり
文の量が最小になることではない
0294デフォルトの名無しさん
2008/03/05(水) 03:01:10例外で失敗した後には実行されないものはtryブロックの中に入れるべきで
>全部をtryで囲んで全てをキャッチするというのは悪いコーディングだ
とは全然無関係ですよ。
0295デフォルトの名無しさん
2008/03/05(水) 03:02:52bool isHogehoge
なら
if( isHogehoge )
と書いても違和感はない
0296デフォルトの名無しさん
2008/03/05(水) 03:09:48それでは例外で失敗しなかった後に実行された文で起こった例外まで無差別にキャッチする
それはバグを握りつぶしてしまう
よくないコーディングだ
0297デフォルトの名無しさん
2008/03/05(水) 03:35:54まず flg という名前が論外で、if ... の ... に配置して意味が通るような名前を付けて、flg==true だの flg==false だのは今すぐ止めるべきと思うな
それが「プログラムにとって大事なのは意味が伝わりやすいこと」になるんだと思うよ。
0299デフォルトの名無しさん
2008/03/05(水) 03:40:54>文の量が最小になることではない
まったくもって同感だが、ロジックの複雑さは最小にすべきだ。
0300292
2008/03/05(水) 04:36:35continueを書くかどうかは好みの問題だから議論する気はないが、
「continueと書かせるため」というのは誤解を招くので
ラベルの後にステートメントが必須なのはC++からで、
一応、仕様ではlabeled statementということになっている
単にラベル単独では存在し得ないというだけのこと
0301デフォルトの名無しさん
2008/03/05(水) 04:40:14ラベルは命令文の前に書く必要がある。命令文は空文でも良い。
for ( .. ) {
....
label_1: ;
}
でOK。
0302デフォルトの名無しさん
2008/03/05(水) 06:47:59自作のコンテキストメニューではなく、標準というかShell(?)のコンテキストメニューです。
DataGridViewTextBoxColumn、DataGridViewTextBoxCellでセル選択後に
カーソルがあたった状態で編集可能になったときに
右クリックすると、このコンテキストメニューが出るのを抑えたいのです。
通常のTextBoxでは
TextBoxのContextMenuStripに、空のContextMenuStripを設定するなり
新しいContextMenuStripのインスタンスを(newする)設定するなりすれば
抑制できるとことまでは判明して、実行できているのですが
DataGridViewの場合に、同様の制御をするための実装方法がわからないのです。
ご存知の方、お教えください。
0303デフォルトの名無しさん
2008/03/05(水) 06:48:34C++には論理型があるがCとの互換のために穴だらけだから結局Cと同じになる。
一方C#のifには条件文しかかけないし、論理型は単独で条件文たりえる。
0304デフォルトの名無しさん
2008/03/05(水) 07:05:06EditingControlShowing とか
0305デフォルトの名無しさん
2008/03/05(水) 07:49:18文字列の構成は、9つの行と、行数不定の項目です。
その構成を一つのかたまりとしてたくさん扱いたいのですが、どうしたらいいんでしょうか?
0306デフォルトの名無しさん
2008/03/05(水) 08:23:00実際本職の方達はC/C++ベースで作ってそうですし
いまいちピンとこないです
0307デフォルトの名無しさん
2008/03/05(水) 08:31:32CSVでもXmlSerializeでもいいんじゃないかと。
>>306
ASP.NETとか?
0308デフォルトの名無しさん
2008/03/05(水) 08:49:49flgの話は 命名法の問題は同意 その先 ==trueとするかどうかは趣味の問題。
>>296
continue書かないなら正解。
continueなんてせっかくの例外処理の構造化をわざわざ壊すようなもんをどうしても
書きたいなら不正解だろ。
0309デフォルトの名無しさん
2008/03/05(水) 09:40:47RuntimeFieldHandle
フィールドを一意に識別出来るハンドル。
識別という意味では、FieldInfoに1対1で対応している。
RuntimeFieldHandleとFieldInfoは相互に取り出すことが出来る。
FieldInfoなどのオブジェクトはサイズが大きいため、
常に使い続ける必要がないものはRuntimeFieldHandleで保持しておき、
実際に必要になった時点でRuntimeFieldHandleからFieldInfoを取得する。
こうするとFieldInfoがGC対象となり、頻繁に使われないものはメモリを占有しなくなる。
0310デフォルトの名無しさん
2008/03/05(水) 10:25:56いやいや、中小企業で使ってる業務システムには、VisualBasicが多いよ
Cで組んだシステムの方が珍しい。
大企業みたく開発費をかけたくないし、開発期間も短くしたいし、保守性を容易にしたいし、
負荷も少ないしリアルタイム性も求められない用途は多いから。
C#はVisualBasicよりいいし、そういう方面にも使われる
0311デフォルトの名無しさん
2008/03/05(水) 10:34:38>>310
なるほど…
来年度から就職でして、使うのかなぁといった感じで質問しました。
C/C++をやりつつC#に手出してて最近はWinAPI関連の本買って手出し始めたので
ちょっと気になりました、ありがとう
0312デフォルトの名無しさん
2008/03/05(水) 10:35:480313デフォルトの名無しさん
2008/03/05(水) 10:38:04そこら辺が明確に教えてもらえてなくって(使う言語とか)
一応エンジニア業と営業のそれを両方出来る人材を…って感じで募集されてて
会社自体は自動車会社のシステム部門です
0314デフォルトの名無しさん
2008/03/05(水) 10:39:170315デフォルトの名無しさん
2008/03/05(水) 10:53:19だったら、営業の顧客管理表をC#でちゃちゃっと作ったり
(たいてい、個人が自分の机のPCでエクセルでちまちまやってるから、
活用するときに面倒だったり、顧客表の流出する可能性があったり、
各営業間で共有が出来てなかったり等々。システムを作れば、
顧客の誕生日一週間前にポップアップさせてみたり、
車検前や12ヶ月点検前にポップアップさせてみたり、いろんな活用も出来る)。
また、営業所とエンジニア部門とをLANで結んだ連絡システムを作ったりにも使えるだろ。
stand-aloneなシステムを手早く作るのにも、
離れた部門をLAN経由で結んだシステムにも、C#は向いているし。
0316デフォルトの名無しさん
2008/03/05(水) 11:02:400317デフォルトの名無しさん
2008/03/05(水) 11:11:46ごめ質問が理解できないので具体例をあげて
>>313
続けたいならあとはマ板でたのむ
0318デフォルトの名無しさん
2008/03/05(水) 11:24:17ええと。例えば、文字列ABCにダブルクォート"の引用符を付けると、
"ABC"、文字列DE"Fに付けると、"をエスケープ?して、"DE""F"にする
ようなメソッドです。Dequoteはその逆の操作です。
0319デフォルトの名無しさん
2008/03/05(水) 11:25:02このclassに後から変数を追加するなんて暴挙はできないでしょうか?。
0320デフォルトの名無しさん
2008/03/05(水) 11:33:26それくらい自分で作れば
>>319
無理
classのオブジェクトをキーにしたDictionary使うとか
0321デフォルトの名無しさん
2008/03/05(水) 11:57:01C# 2008 Expressを使ってます。
OpenFileDialogで、画像を選択した際にdialogのウィンドーにプレビュー画像を表示したいのですが、
いったいどうすればいいのでしょうか。
0322デフォルトの名無しさん
2008/03/05(水) 12:00:53ありがと。
それでなんとかなりそうです。
0323デフォルトの名無しさん
2008/03/05(水) 12:03:02VS2005なので SystemIcons.Shieldが利用できません。
なので、APIから行おうとしたのですが、
internal class WinAPI
{
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
extern public static IntPtr SendMessage(IntPtr hWnd, uint msg, IntPtr wp, IntPtr lp);
}
〜
WinAPI.SendMessage(Target.Handle, (UInt32)0x160c, IntPtr.Zero, (IntPtr)1);
としてもシールドアイコンが表示されません。
何か間違ってるのでしょうか?
0324321
2008/03/05(水) 12:05:32↑の件ですが、「縮小版」ではなく、クリックしたときにパッと表示してほしいんです。
あと、openFileDialogには大きさのプロパティがありませんが、
実行時にはマウスでドラッグして大きさが変えられますよね。
プログラム上で自動で変更できるんでしょうか。
0325デフォルトの名無しさん
2008/03/05(水) 13:10:17ありがとうございます。
XmlSerializeでなんとか出来そうです。
0326デフォルトの名無しさん
2008/03/05(水) 13:29:52つまり、OpenFileDialogを拡張したいということだろ
結論から言うと、Win32API使わないと無理
cf. ttp://msdn2.microsoft.com/en-us/library/ms996463.aspx
0327デフォルトの名無しさん
2008/03/05(水) 13:34:58毎回リフレクションを使わないようにしてみたら10倍くらい速くなった
もっと速くなると思ったんだけどなあ
0329デフォルトの名無しさん
2008/03/05(水) 14:59:10if else は、フィールドの数が増えると遅くなるんじゃねえの、使うならswitchだろ。
0330デフォルトの名無しさん
2008/03/05(水) 15:19:440331デフォルトの名無しさん
2008/03/05(水) 15:45:360332デフォルトの名無しさん
2008/03/05(水) 15:50:58若干最適化は効きやすいとされる。
0333デフォルトの名無しさん
2008/03/05(水) 16:13:40おまいら今すぐC言語のスレで、コンピュータの基礎を勉強しやがれ
0334デフォルトの名無しさん
2008/03/05(水) 16:27:33お前も基礎を勉強しやがれ
0335デフォルトの名無しさん
2008/03/05(水) 16:29:17違うだろ、テーブルルックアップ式 goto label の勉強だ
0336デフォルトの名無しさん
2008/03/05(水) 16:29:20FieldIndexerAttributeにAttributeUsage(Attribute)付けるといいかもと思った
あと、>>139の言ってるのは多分FieldInfo.FieldHandle/GetFieldFromHandleの事
>>329-332
以下、MSIL生成する言語に限った話しなのでそのように
疑問があれば逆アセンブル(ildasm.exe)してみればいい
判定するのが連続した整数値じゃないときはswitchもif〜elseも大差ない
比較部分は同じで処理部分がサブルーチンかスパゲッティかって感じ
連続した整数値があれば(一部でも可)switchではその部分がまとめられる
MSILから先は分からないが、多分ジャンプ先を数値的に計算してるんだと思う
0337デフォルトの名無しさん
2008/03/05(水) 16:34:210338デフォルトの名無しさん
2008/03/05(水) 16:39:46あれ手でやるのは面倒
0339デフォルトの名無しさん
2008/03/05(水) 16:49:22{
// ildasm.exe
static void Main( string [] arg )
{
System.Console.WriteLine( arg[0] ) ;
switch( (int)arg[0][0] )
{
case 0 : System.Console.WriteLine( 'A' ) ; break ;
case 1 : System.Console.WriteLine( 'B' ) ; break ;
case 2 : System.Console.WriteLine( 'C' ) ; break ;
}
}
}
0340デフォルトの名無しさん
2008/03/05(水) 16:50:36{
.entrypoint
// コード サイズ 66 (0x42)
.maxstack 3
.locals init (int32 V_0)
IL_0000: ldarg.0
IL_0001: ldc.i4.0
IL_0002: ldelem.ref
IL_0003: call void [mscorlib]System.Console::WriteLine(string)
IL_0008: ldarg.0
IL_0009: ldc.i4.0
IL_000a: ldelem.ref
IL_000b: ldc.i4.0
IL_000c: callvirt instance char [mscorlib]System.String::get_Chars(int32)
IL_0011: stloc.0
IL_0012: ldloc.0
IL_0013: switch (
IL_0026,
IL_002f,
IL_0038)
IL_0024: br.s IL_0041
0341デフォルトの名無しさん
2008/03/05(水) 16:51:27IL_0026: ldc.i4.s 65
IL_0028: call void [mscorlib]System.Console::WriteLine(char)
IL_002d: br.s IL_0041
IL_002f: ldc.i4.s 66
IL_0031: call void [mscorlib]System.Console::WriteLine(char)
IL_0036: br.s IL_0041
IL_0038: ldc.i4.s 67
IL_003a: call void [mscorlib]System.Console::WriteLine(char)
IL_003f: br.s IL_0041
IL_0041: ret
} // end of method A::Main
このスレは息を吸うようにウソをつく奴が居るので注意が必要だ
0342デフォルトの名無しさん
2008/03/05(水) 16:55:09結局、IL レベルで switch 命令ありで、
JIT 時に if-else 式かテーブルルックアップ式かで最適な方選択ってこと?
0343デフォルトの名無しさん
2008/03/05(水) 16:57:310344デフォルトの名無しさん
2008/03/05(水) 17:04:55その常識ってのは、
MSIL が switch 命令を持ってるってのの方か、
一般に switch はルックアップテーブル使って高速化可能って話の方か、どっち?
0345デフォルトの名無しさん
2008/03/05(水) 17:07:010346デフォルトの名無しさん
2008/03/05(水) 17:15:14Javaバイトコードにはもう1つlookupswitchって命令もあって、CILにはこれに相当するものがない。
これがないせいでgotoだらけのコードができることもあるかもね。
あと、C#のswitch caseには文字列を突っ込むこともできて、このときはもはやswitch命令は関係なくなる。
MSのC#コンパイラは、分岐数増えてきたらDictionary<string,int>を裏で作るって実装になってたかと。
0347346
2008/03/05(水) 17:21:07すまん、これは言い過ぎか。
Dictionary<string,int>を使って無理矢理switch命令用のインデックスを作り出す。
が正しい。
0348デフォルトの名無しさん
2008/03/05(水) 17:26:34case が 0 で始まる連続な整数 → IL switch 命令
非 0 から始まっての連続 → sub してから switch 命令
完全に不連続 → beq とか brtrue の連続(= if-else と変わらない)
だった。
0349デフォルトの名無しさん
2008/03/05(水) 17:29:51switch(x) {
case 0: xxx; break;
case 4: xxx; break;
case 6: xxx; break;
case 9: xxx; break;
}
みたいなのは、0 のところだけ beq、
それから 4引いてから switch 命令、
その後さらに switch 後の default 句内で case 9 の判定するような妙なコードに。
ラベルが不連続でも、値の近い整数ならある程度最適化かけてるっぽい。
0350デフォルトの名無しさん
2008/03/05(水) 17:30:38高速化したいなら、コンパイラにキチンと意図の伝わる形でコードすべき
前から準にシーケンシャルに比較をする事を伝えたいなら if else if で
一括比較したいなら switch で、将来のJITのチューンにあやかれるようにね。
0351デフォルトの名無しさん
2008/03/05(水) 17:33:020352デフォルトの名無しさん
2008/03/05(水) 17:34:24常識っていうのは、プログラマ間で意思疎通をするのに最低限必要な知識だよ
0353デフォルトの名無しさん
2008/03/05(水) 17:37:29まあswitch命令がそういう仕様なんだから仕方ないよなぁ。
ここの議論とか参考になるかも。
ttp://www.atdot.net/~ko1/w3ml/w3ml.cgi/yarv-dev/msg/444
ttp://www.atdot.net/~ko1/w3ml/w3ml.cgi/yarv-dev/msg/452
0354デフォルトの名無しさん
2008/03/05(水) 17:38:13これはどこに書いてありますか?
0355デフォルトの名無しさん
2008/03/05(水) 17:39:29それは同意。
まあ、ただ、単なる興味本位で、IL の switch 命令に関して。
Java の tableswitch, lookupswitch とはどっちとも違うかも。
単に、スタックの先頭を見て、その値をインデックスにしてジャンプするだけっぽい。
ldloc.1
switch (0x10, 0x20, 0x30)
なら、ローカル変数1の値が 0 なら 0x10 に、1 なら 0x20 にジャンプってだけ。
switch をブランチの羅列にするか、引き算/テーブル参照+switch 命令にするかは
結局コンパイラ次第ね。
0356デフォルトの名無しさん
2008/03/05(水) 18:19:160357デフォルトの名無しさん
2008/03/05(水) 18:49:10コイツ以前マ板にもマルチレスで同僚がswitch文を使って if をごまかしたとか書きまくっていた奴じゃねぇかな
こういうキチガイはいっぺん地獄へ落ちればいいんだよ
0358デフォルトの名無しさん
2008/03/05(水) 18:54:31一旦的外れな方向に話が行った方が議論が盛り上がるからとか?
>>357
そういう発言はキチガイをよりいっそう近づけるから、
キチガイがいやなら逆に抑えた方がいいよ。
0359デフォルトの名無しさん
2008/03/05(水) 20:11:27任意のイベントを発生させるにはどうすればいいんでしょうか?
たとえば、textbox1でKeyPressが発生した時に、そのキーがエンターキーだった場合、
button1.Clickを発生させるときなどです。
0360デフォルトの名無しさん
2008/03/05(水) 20:19:00button1.Click(button1,new MouseEventArgs());
こんな感じか?
0361デフォルトの名無しさん
2008/03/05(水) 20:23:200362デフォルトの名無しさん
2008/03/05(水) 20:57:58上手く動かなかったのでbutton_Clickメソッドを直接呼び出してみました。
button_Click(button1,new MouseEventArgs());
一応意図したとおりに動きましたが他のクラスからだと呼び出せないと思うので常套手段ではなさそうですね…。
0363デフォルトの名無しさん
2008/03/05(水) 21:36:37イベントは特定条件がそろった時に内部から発生するものだから、
その条件を無理やりそろえるためのメソッドがないものは基本的に無理
通常はイベントを発生させなくても、イベントハンドラで実行される処理と
同じ処理が実行されれば十分なはず
その例だとPerformClickでもいい
0364デフォルトの名無しさん
2008/03/05(水) 21:59:49なるほどそうですか。
同じ処理をしたいだけなので、例のbutton_Clickの処理内容を別のメソッドにして、
そのメソッドを呼び出すのが自然みたいですね。
0365デフォルトの名無しさん
2008/03/05(水) 21:59:53***** 何回かループ *****
Button objButton = new Button();
objButton.ID = "Btn" + i.ToString();
objButton.Width = 50;
objButton.Click += new EventHandler(Button_Click);
objTableCell.Controls.Add(objButton);
***** 何回かループ *****
縦にボタンがループの回数分並んだとして、適当に真ん中辺りのボタンを押した時、
そのボタンのIDって取得出来るの???
ちなみに"Btn" + i.ToString();で順番にボタンのIDをつけてるんだけど
private void Button_Click(object sender, EventArgs e)
{
string 押されたボタンのID = どのようなコード??
}
0366デフォルトの名無しさん
2008/03/05(水) 22:03:220367デフォルトの名無しさん
2008/03/05(水) 22:09:34それともsender.Get…という形で使うのでしょうか?^^;
0368デフォルトの名無しさん
2008/03/05(水) 22:15:32"System.Web.UI.WebControls.Button"としか取れず、色々してみても
特定のIDを取ってくることが出来ませんでした。。
0369デフォルトの名無しさん
2008/03/05(水) 22:21:490370デフォルトの名無しさん
2008/03/05(水) 22:23:51それはつまりsenderがButtonにキャストできるということ。
0371デフォルトの名無しさん
2008/03/05(水) 22:27:070372デフォルトの名無しさん
2008/03/05(水) 23:20:43的外れな話かもですが、
そのコントロールの定義?のところに書いてある、senderなんちゃらを使ってみるというのは?
質問です。
画面AからダイアログBを呼び表示させました。
ダイアログBのロードメソッドで条件を判定した結果によって、
ダイアログBを閉じたということにしたいのですが、うまくいきません。
ロード処理の中で、ダイアログのクロージングの処理を呼んだのですが、
処理が画面Aの呼び出し元に戻らず、ダイアログが表示されたままになってしまいます。
クロージングの中で使う、CancelEventArgsで何かパラメーターを渡せばよいのでしょうか?
すいません。お願いします。
0373デフォルトの名無しさん
2008/03/05(水) 23:47:22進まないのは私だけ?
ttp://www.microsoft.com/japan/msdn/vstudio/express/
0374デフォルトの名無しさん
2008/03/06(木) 00:10:24クロージングの処理とやらは何?
イベントメソッドを呼んでるのか?
それは「閉じようとしてるときに呼ばれるイベントメソッド」であって
「閉じるために」呼ぶもんじゃないが。
>>373
これまじお勧め。
全部入り。
http://www.microsoft.com/japan/msdn/vstudio/express/maninstall/2008/default.aspx
0375デフォルトの名無しさん
2008/03/06(木) 01:08:13メンバの順序を↑↓で変更しても反映されないのはバグ??
0376デフォルトの名無しさん
2008/03/06(木) 01:49:03どれも似たり寄ったりでしょうか?
ペイントブラシのようなものに挑戦しているので、グラフィック関係が書かれていると助かります。
0377デフォルトの名無しさん
2008/03/06(木) 02:13:57いつのまにか全部入りのExpress Edition出てたのか
単品よりいいね
0378323
2008/03/06(木) 09:45:15ボタンのFlatStyleをSystemにしたら適用されるようになりました。
0379デフォルトの名無しさん
2008/03/06(木) 15:37:43C#でWin32ネイティブアプリ作れます?
0380デフォルトの名無しさん
2008/03/06(木) 15:57:57VC#以外のコンパイラはしらね。
0381デフォルトの名無しさん
2008/03/06(木) 17:45:30ListViewのViewプロパティをDetailsにして、Columnsのコレクションをいくつか追加して、
コレクションエディタの↑↓で位置を変えても反映されません。
(DisplayIndexが変更されない?)
0382デフォルトの名無しさん
2008/03/06(木) 19:08:52DisplayIndexってわかってるなら自分で直せばいいじゃん。
位置を変えたときに変わらないのは仕様なのかもしれないし。
0383382
2008/03/06(木) 19:20:46コレクションエディタの順番は単にListViewItem.SubItemsの順番で、
DisplayIndexが表示の順番なんだと思う。
で、それらは必ずしも一致せず、
ListViewItemを作る部分のコードは変えずに表示の順番を変えることも出来るようになってると。
#実は俺も前に同じように順番が変わらず悩んだことがある。
そのときは.Designer.csにDisplayIndexの指定があるのを見つけて、
なんじゃこりゃと思いつつ手作業で削除した。
0384デフォルトの名無しさん
2008/03/06(木) 20:17:33投げてみたのですが直らず。どうしたら良いのでしょうか?。
0385デフォルトの名無しさん
2008/03/06(木) 20:25:29自己レス、接続時にcharsetを投げたら上手く行きました。
他の言語ではnamesを投げて上手く行っていたのですがc#ではだめなのですね。
0386デフォルトの名無しさん
2008/03/06(木) 21:48:210387デフォルトの名無しさん
2008/03/06(木) 22:21:04そうなのね。ありがと。
でもコレクションエディタで順番変えてOK押した一瞬だけ順番が変わってすぐに戻るのがデザイナ上で見えるからバグっぽく見える…
0388デフォルトの名無しさん
2008/03/06(木) 22:37:24それぞれのインスタンスを区別するにはどうしたらいいのですか?
たとえばこんなクラスです。
public void 猫()
{
string kainushi
public 猫(string, ka)
{
this.kainushi = ka
}
public 好きな遊び{ get; set;}
}
0389デフォルトの名無しさん
2008/03/06(木) 22:41:450390デフォルトの名無しさん
2008/03/06(木) 23:01:410391デフォルトの名無しさん
2008/03/06(木) 23:04:340392デフォルトの名無しさん
2008/03/06(木) 23:05:360393デフォルトの名無しさん
2008/03/06(木) 23:10:58Console.WriteLine(cats[0] == cats[1]);
Console.WriteLine(cats[0] == cats[2]);
Console.WriteLine(cats[0] == cats[3]);
Console.WriteLine(cats[0] == cats[4]);
Console.WriteLine(cats[1] == cats[2]);
Console.WriteLine(cats[1] == cats[3]);
Console.WriteLine(cats[1] == cats[4]);
Console.WriteLine(cats[2] == cats[3]);
Console.WriteLine(cats[2] == cats[4]);
Console.WriteLine(cats[3] == cats[4]);
全部Falseだろ。つまり区別できてる。
0394デフォルトの名無しさん
2008/03/06(木) 23:16:16インスタンスの区別じゃないの??
0395デフォルトの名無しさん
2008/03/06(木) 23:17:20cats[0] → インスタンス
cats[1] → インスタンス
cats[2] → インスタンス
cats[3] → インスタンス
cats[4] → インスタンス
0396デフォルトの名無しさん
2008/03/06(木) 23:22:54そのまま動かしたら全部trueになっちゃうw
0397デフォルトの名無しさん
2008/03/06(木) 23:59:330398デフォルトの名無しさん
2008/03/07(金) 00:02:36cats[1] → null
cats[2] → null
cats[3] → null
cats[4] → null
0399デフォルトの名無しさん
2008/03/07(金) 00:12:270400デフォルトの名無しさん
2008/03/07(金) 00:26:150401デフォルトの名無しさん
2008/03/07(金) 00:31:44>>393
>>393
0402デフォルトの名無しさん
2008/03/07(金) 00:54:490403デフォルトの名無しさん
2008/03/07(金) 00:59:17中身が全く同じでもインスタンスが違えば==はfalseになる
0404デフォルトの名無しさん
2008/03/07(金) 01:24:405分くらいで適当に考えた対策だけど多分おk
全選択してDisplayIndexを 列数-1 で並び順になる (0だと逆順)
0405デフォルトの名無しさん
2008/03/07(金) 01:52:53何その裏技っぽいのwすごw
でもそれでいけるね!
0指定すると逆順になるけどコレクションエディタと同期してないから同じ事だけど。
0406デフォルトの名無しさん
2008/03/07(金) 02:25:26C#3.0ってもうリリースしてるんでしょうか?
どうせなら3.0から勉強したいなと・・・^^;
0407デフォルトの名無しさん
2008/03/07(金) 02:26:470408デフォルトの名無しさん
2008/03/07(金) 02:30:41そうでしたか・・・アホな質問してすいません(__)
Wikipediaは見たんですが、言語仕様しか書いてなくて^^;
JavaScriptっぽいらしいですね。JavaScriptは好きなんで楽しみです。
後、C#でP2Pしたいんですがお勧めのページあるでしょうか?
ActionScript3.0がSocketが扱えて同期通信できるようになるって言ってたんですが
当分先そうなんでFlex2からC#に浮気してみようかなと・・・^ω^;
0409デフォルトの名無しさん
2008/03/07(金) 02:32:330410デフォルトの名無しさん
2008/03/07(金) 02:36:080411デフォルトの名無しさん
2008/03/07(金) 02:39:200412406
2008/03/07(金) 02:40:14でwwwすwwwよwwwねwww
まぁ進捗Blogとか貼ってくれたら儲けもんぐらいに思ってただけなんで、
適当にググッてみますわwwww
0413デフォルトの名無しさん
2008/03/07(金) 02:41:43あー・・・右上の表見落としてた・・・
まじすまそ・・・あほすぎ。
0414デフォルトの名無しさん
2008/03/07(金) 04:08:060415デフォルトの名無しさん
2008/03/07(金) 11:22:30mysql側に専用のエスケープ関数などあるのでしょうか?。
0416デフォルトの名無しさん
2008/03/07(金) 12:55:07例えば、文字列リテラルで \" とエスケープせずに、 " と書いて関数でエスケープしたいと
0417デフォルトの名無しさん
2008/03/07(金) 13:25:23いじわる!!笑
@の他は正規表現でいちいち書き換えないとだめなのでしょうか?
0418デフォルトの名無しさん
2008/03/07(金) 14:03:44パーサが文字列リテラルを判別するためにエスケープが必要で
関数に渡されるのはパースされた文字列
当たり前すぎて確認してなかったけど、
valは文字列リテラルでエスケープというのは ' => '' とかのことだよな
0419デフォルトの名無しさん
2008/03/07(金) 14:04:50そんなことより株取引がんばってください
0420デフォルトの名無しさん
2008/03/07(金) 14:21:10言われて見て思ったのでちょっと試したのですがこういう事ですよね。
sqlでインサートできないから安易にエスケープと考えてしまったのですが問題は別にあると
認識し試行錯誤します。
string text = @"\a\a\a'''";
MessageBox.Show(text);
>>419
おうよ!。みずほが下がってる><
0421デフォルトの名無しさん
2008/03/07(金) 18:00:24『C#によるプログラミングWindows』上下Charles Petzold (著)が気になっています。
0422デフォルトの名無しさん
2008/03/07(金) 18:33:200423デフォルトの名無しさん
2008/03/07(金) 18:47:21描画処理を行わせるようにしたのですが、その際にPaintEventArgs.Graphicsを利用して描画すると意図通り動くのに対して
それを利用せずに関数内でPictureBox.CreateGraphics()により取得したGraphicsオブジェクトを利用して描画した場合には
他のウインドウの影に隠れた場合等に再描画が正常に行われないのですが何故なのでしょうか?
0424デフォルトの名無しさん
2008/03/07(金) 19:22:06てか、そのためのPaintイベントじゃないか
0425デフォルトの名無しさん
2008/03/07(金) 19:31:44どちらの場合も処理してる関数自体はPictureBox.Paintに登録しているのでクライアント領域が無効化された場合には
再描画のルーチンが実行されると思ったのですが違うのでしょうか?
0426デフォルトの名無しさん
2008/03/07(金) 20:10:490427デフォルトの名無しさん
2008/03/07(金) 20:33:12こんな感じにして何度か再描画すると面白いものがみれるよ
void pictureBox1_Paint(object sender, PaintEventArgs e) {
e.Graphics.Clear(Color.White);
Thread.Sleep(1000);
e.Graphics.Clear(Color.Gray);
Thread.Sleep(1000);
this.pictureBox1.CreateGraphics().Clear(Color.Blue);
Thread.Sleep(1000);
}
0428デフォルトの名無しさん
2008/03/07(金) 20:33:44while(MySqlDataReader.read()){
List<string>.Add(val)//これだと一番最後の行が追加されない
}
0429デフォルトの名無しさん
2008/03/07(金) 21:51:04楽に確認する方法ってないでしょうか。
プロキシサーバーにpingを打って、100ms以内に応答がなけれ
ば無効と判断するコードの、簡単な書きかたってないでしょうか?
0430デフォルトの名無しさん
2008/03/07(金) 23:27:150431デフォルトの名無しさん
2008/03/08(土) 00:17:09サードパーティ製ライブラリについて質問するのに、ライブラリの名称もバージョンも書かないとか
どんだけ
0432デフォルトの名無しさん
2008/03/08(土) 00:52:320433デフォルトの名無しさん
2008/03/08(土) 01:32:31read()の時点で1レコード呼ばれてるってオチだろ
0434デフォルトの名無しさん
2008/03/08(土) 03:04:25C#もJAVAのように数学の関数などを
Math.Sin();
等とクラス名を書かなければいけないようですが
クラス名を省略することは可能なのでしょうか。
0435デフォルトの名無しさん
2008/03/08(土) 03:05:090436デフォルトの名無しさん
2008/03/08(土) 03:26:02C# には似たようなものってあったっけ
0437デフォルトの名無しさん
2008/03/08(土) 03:27:340438デフォルトの名無しさん
2008/03/08(土) 04:41:440439デフォルトの名無しさん
2008/03/08(土) 04:44:480440デフォルトの名無しさん
2008/03/08(土) 04:49:07Dictionary
0441デフォルトの名無しさん
2008/03/08(土) 07:38:26string[] str = (string[]) List<string>をみたいに簡単に変換する方法はないでしょうか?
0442デフォルトの名無しさん
2008/03/08(土) 07:40:200443デフォルトの名無しさん
2008/03/08(土) 07:41:050444デフォルトの名無しさん
2008/03/08(土) 07:49:23こんな便利なものがあったのですね
ありがとうございます
0445デフォルトの名無しさん
2008/03/08(土) 10:37:58いきなりSin()とか書かれても面食らうだけだからやめてくれ
0446デフォルトの名無しさん
2008/03/08(土) 10:58:30usingだと省略できますか。
別名をつけられるのはできたのですが
M.Sin()とかになってしまうのでこれでもまだすっきりしないというか。
できないならできないで仕方ありませんが。
>>445
そうですか?
数学をやるとき「数学の積分(R*数学のSIN(π + θ))」なんて
いちいち書くのは冗長ですよね・・・と思っていたのですが、
sin ,cosと来たら三角関数、というのはもはや非常識なのでしょうかね。
0447デフォルトの名無しさん
2008/03/08(土) 11:08:59確かに数値計算系のプログラムではいちいちMathつけると読みにくいというのには同意。
自クラスに
static double sin(double x) { return Math.Sin(x); }
なんて定義するのはダメ?
クラス毎に定義しなきゃいけないのが面倒だが。
0448デフォルトの名無しさん
2008/03/08(土) 11:41:550449デフォルトの名無しさん
2008/03/08(土) 11:46:260450デフォルトの名無しさん
2008/03/08(土) 11:55:120451デフォルトの名無しさん
2008/03/08(土) 11:58:39VB使えよ
0452デフォルトの名無しさん
2008/03/08(土) 12:17:050453デフォルトの名無しさん
2008/03/08(土) 12:17:220454デフォルトの名無しさん
2008/03/08(土) 12:38:28現状で最もましな方法はpartialクラスで>>447だと思う
てか、モドキじゃないMix-inが使えればいいのにな
0455デフォルトの名無しさん
2008/03/08(土) 12:55:40プログラムから選択させることって出来ますか?
listView1.Items[0].Selected = true;
こんな感じにしてみたのですが選択はされていると思うのですが見た目上選択されたようにはなっていません。
見た目も選択されているようにするにはどうしたらいいんでしょうか?
0456デフォルトの名無しさん
2008/03/08(土) 13:16:41違うと思うよ。
もっとも「マシ」な方法は、"Mathがうっとうしい"などという感覚を矯正すること。
要するにただの慣れの問題でしょ。
まあ慣れすぎて自分のクラスの静的メソッドでもクラス名つけたくなってくるのも
それはそれで難儀だとは思うけど
0457デフォルトの名無しさん
2008/03/08(土) 13:25:230458466
2008/03/08(土) 13:40:33クラス名の省略はとりあえずできない、というのがわかって助かりました。
ありがとうございました。
0459デフォルトの名無しさん
2008/03/08(土) 14:07:05HideSelectionがTrueのままになってて、フォーカスが他にあるってオチじゃないよね?
0460デフォルトの名無しさん
2008/03/08(土) 14:09:48listview.Focus()してもだめ?
0461455
2008/03/08(土) 14:15:32で解決しました。
0462デフォルトの名無しさん
2008/03/08(土) 14:17:31違うみたいです。
>>460
だめでした。。
0463デフォルトの名無しさん
2008/03/08(土) 16:47:120464デフォルトの名無しさん
2008/03/08(土) 16:54:03pause
0465デフォルトの名無しさん
2008/03/08(土) 17:09:11ジェネリッククラスだとファイルとクラスの名前が連動しないのは仕様ですかね?
0466デフォルトの名無しさん
2008/03/08(土) 17:12:520467デフォルトの名無しさん
2008/03/08(土) 17:13:04ごめん。質問の仕方が悪かった。
僕が言いたいのは以下のようなプログラムの場合、
using System;
namespace HelloWorld
{
class Program
{
static void Main()
{
Console.WriteLine("Hello World");
}
}
}
実行すると一瞬コンソールが現れて消えてしまうんだけど「Visual Studio」とかで実行したら
"続行するには何かキーを押してください . . ."って出て終了しないよね?
それでそのようなことをするコマンドプロンプトのオプションがあるのかなあって調べたら無かったからどうやるのかなあってこと。
0468デフォルトの名無しさん
2008/03/08(土) 17:15:26Console.Write("続行するには何かキーを押してください . . .");
Console.ReadKey();
0469デフォルトの名無しさん
2008/03/08(土) 17:32:04レスどうもありがとう。
でもその方法は知っているんだ。
Visual Studioはいちいちそれを加えてからコンパイルして実行しているの?
違うよね。FileMonitorで監視してみたけど「Console.ReadKey();」が付加されている
exeファイルは見つけることが出来なかった。
僕は今C#用のエディタを作っているんだけどどうしても、
よく見る"続行するには何かキーを押してください . . ."が出来ない。
教えてください。よろしくお願いします。
0470デフォルトの名無しさん
2008/03/08(土) 17:33:43もしくは、コマンドプロンプトから実行すればいい
0471デフォルトの名無しさん
2008/03/08(土) 17:35:240472デフォルトの名無しさん
2008/03/08(土) 17:40:390473デフォルトの名無しさん
2008/03/08(土) 17:50:37デリゲートもインターフェイスみたいなもんだな
0474デフォルトの名無しさん
2008/03/08(土) 17:55:05出来ました。ありがとうございました。
0475デフォルトの名無しさん
2008/03/08(土) 18:08:10んじゃあ、自分でインターフェイスを作る事はそんなに無い感じなのかな?
ありがとう^
0476デフォルトの名無しさん
2008/03/08(土) 18:29:56ライブラリつくるときとか
プラグインぽいのつくるときとか
0477デフォルトの名無しさん
2008/03/08(土) 19:54:38じゃあ俺にはまだ必要ないな
ありがと^
0478デフォルトの名無しさん
2008/03/08(土) 22:42:48Visual C#でコンソールアプリケーションを作成してデバグするときに
ウィンドウが消えないように、Visual C#のオプション設定でできないの?
(>>468のようにソースはいじらないで。)
0479デフォルトの名無しさん
2008/03/08(土) 22:47:55(>>468)
#endif
でいいだろもう
0480デフォルトの名無しさん
2008/03/08(土) 22:51:530481デフォルトの名無しさん
2008/03/08(土) 23:00:23オプションではできないんじゃね?
ってか回答者は機械じゃねぇぞ。
0482デフォルトの名無しさん
2008/03/08(土) 23:02:030483デフォルトの名無しさん
2008/03/08(土) 23:02:410484デフォルトの名無しさん
2008/03/08(土) 23:03:110485デフォルトの名無しさん
2008/03/08(土) 23:04:30>>478に回答できる奴いないの?
0486デフォルトの名無しさん
2008/03/08(土) 23:05:140487デフォルトの名無しさん
2008/03/08(土) 23:06:170488デフォルトの名無しさん
2008/03/08(土) 23:07:00おk。
【結論】
Visual C#でコンソールアプリケーションを作成してデバグするときに
ウィンドウが消えないように、Visual C#のオプション設定できる。
以上。
0489デフォルトの名無しさん
2008/03/08(土) 23:07:56いまのとこ、HttpWebResponseの結果をテキストにしてるのですが、
これじゃPOSTに成功したのかどうかさっぱり・・・。
IEに簡単に表示とか出来ないものでしょうか?
0490デフォルトの名無しさん
2008/03/08(土) 23:08:240491デフォルトの名無しさん
2008/03/08(土) 23:09:580492デフォルトの名無しさん
2008/03/08(土) 23:12:17申し訳ない、プロトコルレベルでの通信は成功してます。
チェックしたいのは、掲示板に書き込んだときあとの、
「名前を入力してください」
とかの類です。POSTの送信データが抜けなく遅れてるのかをチェックしたいのです。
0493デフォルトの名無しさん
2008/03/08(土) 23:27:490494デフォルトの名無しさん
2008/03/08(土) 23:29:470495デフォルトの名無しさん
2008/03/09(日) 00:21:030496デフォルトの名無しさん
2008/03/09(日) 00:22:020497デフォルトの名無しさん
2008/03/09(日) 00:22:570498デフォルトの名無しさん
2008/03/09(日) 00:23:440499デフォルトの名無しさん
2008/03/09(日) 00:54:21選択されたカラムの名前が取得できるといいのですが…。
0500デフォルトの名無しさん
2008/03/09(日) 00:57:270501デフォルトの名無しさん
2008/03/09(日) 01:02:55リストビューのColumnです。
0502499
2008/03/09(日) 01:27:52columnHeaderの名前自体は取得できないのですかね…?
0503デフォルトの名無しさん
2008/03/09(日) 01:38:320504デフォルトの名無しさん
2008/03/09(日) 01:43:550505デフォルトの名無しさん
2008/03/09(日) 01:52:24こんなことも重いつかんのならプログラミングやめたほうがいい。
向いてないから。
0506デフォルトの名無しさん
2008/03/09(日) 01:59:340507デフォルトの名無しさん
2008/03/09(日) 02:03:450508デフォルトの名無しさん
2008/03/09(日) 02:15:40index??
それ動きませんよ。
>>507
カラムの名前じゃなくて、カラムのメンバ名を取得したいのです…。
0509デフォルトの名無しさん
2008/03/09(日) 02:19:520510デフォルトの名無しさん
2008/03/09(日) 02:21:03お前に意味はなくても>>508にはあるんだよ
0511505
2008/03/09(日) 02:30:47string name = listView1.Columns[e.Column].Text;
お前の欲しいものはこれか?
最初っからTextって言えよ馬鹿。
本当に向いてないからやめておけ。
そして二度とくるな。
0512499
2008/03/09(日) 02:32:42メンバ名を取得する方法はないってことですかね??
0513デフォルトの名無しさん
2008/03/09(日) 02:34:09さっきから釣りですか?
向いてないんじゃないですか?w
0514デフォルトの名無しさん
2008/03/09(日) 02:34:380515デフォルトの名無しさん
2008/03/09(日) 02:39:48メンバ名ってprivate ColumnHeader hoge; の hoge だろ?
動的に追加削除したらメンバ名も何も無いじゃん
0516デフォルトの名無しさん
2008/03/09(日) 02:40:58>インデックス番号だけしか取得できないとカラムが動的に追加・削除されたら困ると思うのですが…。
困りません。
>メンバ名を取得する方法はないってことですかね??
日本語でおk
0517デフォルトの名無しさん
2008/03/09(日) 02:46:250518デフォルトの名無しさん
2008/03/09(日) 02:48:10はチンコ剥いてプログラミングやめて2chもやめた方がいい。
人生だけはやめなくていいから。
0519デフォルトの名無しさん
2008/03/09(日) 02:52:59動的に追加・削除してインデックスがかぶってしまったら困ると思うのですが…。
例えばインデックス1を削除したあとに、新しく追加したカラムもインデックス1にしたら区別がつかなくなると思うのですが。
0520デフォルトの名無しさん
2008/03/09(日) 02:59:13悔しかったの?w
0521デフォルトの名無しさん
2008/03/09(日) 03:00:57削除したんならもうインデックス存在しないじゃん
0522デフォルトの名無しさん
2008/03/09(日) 03:04:21削除した方はもうないから新しい方と区別つかないじゃん。
0523デフォルトの名無しさん
2008/03/09(日) 03:06:410524デフォルトの名無しさん
2008/03/09(日) 03:12:36まあそうですよね。
冗長でもインデックスとは別に取得出来るんじゃないかと思ってしまってました。
ありがとうございました。
0525デフォルトの名無しさん
2008/03/09(日) 03:23:00気になってしょうがないから、思いついた人おせーて
0526デフォルトの名無しさん
2008/03/09(日) 03:25:17インスタンスそのものがわかってもインスタンス名が分からないと困る事あるだろ。
0527デフォルトの名無しさん
2008/03/09(日) 03:26:480528デフォルトの名無しさん
2008/03/09(日) 03:27:160529デフォルトの名無しさん
2008/03/09(日) 03:28:090530デフォルトの名無しさん
2008/03/09(日) 03:29:58その列以外は数字でもstringで扱いたいのに、その列だけは数値として扱いたい。
そして動的に追加・削除されるものだとしたらインデックスよりインスタンス名が欲しいでしょ?
0531デフォルトの名無しさん
2008/03/09(日) 03:32:100532デフォルトの名無しさん
2008/03/09(日) 03:35:57Nameプロパティが取得できないからこういう流れになってるんだろ
0534デフォルトの名無しさん
2008/03/09(日) 03:37:06死ね
0535デフォルトの名無しさん
2008/03/09(日) 03:40:06で、インスタンス名って何。
0536デフォルトの名無しさん
2008/03/09(日) 03:43:150537デフォルトの名無しさん
2008/03/09(日) 03:43:460538デフォルトの名無しさん
2008/03/09(日) 03:44:280539デフォルトの名無しさん
2008/03/09(日) 03:56:26クリックされた列がある特定のデータ群だった時にだけ処理をしたい場合
0540デフォルトの名無しさん
2008/03/09(日) 03:59:420541デフォルトの名無しさん
2008/03/09(日) 04:01:210542デフォルトの名無しさん
2008/03/09(日) 04:01:520543デフォルトの名無しさん
2008/03/09(日) 04:01:570544デフォルトの名無しさん
2008/03/09(日) 04:10:380545デフォルトの名無しさん
2008/03/09(日) 04:13:521 1
AとBの列があったとして、Aの列(1)にだけ特定の処理をしたい場合困るんじゃね?
0546デフォルトの名無しさん
2008/03/09(日) 04:16:480547デフォルトの名無しさん
2008/03/09(日) 04:18:110548545
2008/03/09(日) 04:20:31俺に聞いてる?
じゃあ逆にAの列をどうやって特定する?
削除される可能性もあるからインデックスからは特定できないよ。
Aの名前も削除された後に追加されるかもしれないから名前でも特定できない。
0549デフォルトの名無しさん
2008/03/09(日) 04:34:540550デフォルトの名無しさん
2008/03/09(日) 04:36:35ColumnClickアクションを拾って、e.Columnでインデックスが取れるよね。
で、アプリはどのカラムが何を意味してるか知ってるはずだよね?
知らないとしたら、それってどういう状況なの??
0551デフォルトの名無しさん
2008/03/09(日) 04:45:46ListViewにカラムを追加するのはアプリ。
何番目のカラムに何を格納するかを決めるのもアプリ。
インデックスが分かればカラムを特定できる。
カラムを特定できればあとはアプリが自由に操作できる。
何が困るのか全く分からない。
0552デフォルトの名無しさん
2008/03/09(日) 04:49:10Tag
単純な処理ならint,enumを入れておいてその値で処遇を決めるとか、
ソートするだけならtype(比較可能)を入れておいてキャスト時に使うというのも
複雑な処理をしたければ>>549-551
0553デフォルトの名無しさん
2008/03/09(日) 06:21:56削除された列のクリックイベントってどこから発生するの?
動的に追加削除されるカラムの中の特定のカラムに対して特定の処理をしたいってんなら、
そもそもクリックイベントでインデックスを取るまでもなく、そのカラムの変数名でアクセスすればいいだけ。
というよりも、削除されているであろうカラムのインデックスをクリックイベントで取る意味が分からん。
流れ分かってる?発端は>>499だよ
0554デフォルトの名無しさん
2008/03/09(日) 11:48:110555デフォルトの名無しさん
2008/03/09(日) 12:52:160556デフォルトの名無しさん
2008/03/09(日) 13:10:38あるインスタンスを格納する変数名を取りたいってことか??
変数名なんて単なる箱なんだからスコープ違えば役に立たないと
おもうんだけど…それとは違うの?
0557デフォルトの名無しさん
2008/03/09(日) 14:19:01何いってるの
0558デフォルトの名無しさん
2008/03/09(日) 14:30:220559デフォルトの名無しさん
2008/03/09(日) 14:59:37こういう場合はを想定ごらん。
例えばボタン1を押したらカラム追加、ボタン2を押したらカラム削除するとして、
プログラム上ははじめから配置されているある特定のひとつのカラムだけに操作する必要がある場合。
勿論削除されたら操作しないし、内容も他のカラムと見た目上判断できない。
0560デフォルトの名無しさん
2008/03/09(日) 15:01:10>>550-551は状況を想定できないようなので言ってみた。
0561デフォルトの名無しさん
2008/03/09(日) 16:41:57カラムクリックイベントからインデックスを取るという状況の話をしているのに、
なんでボタンのクリックイベントで特定のカラムを操作する話になってんの?
もともとそんな状況の話なんかしてないんだからそんな想定は無意味だ。
0562デフォルトの名無しさん
2008/03/09(日) 17:05:24そんなもんプログラム上で如何様にもできるっての。
0563デフォルトの名無しさん
2008/03/09(日) 17:23:08なんでインデックスを取る話になるの?
インデックスじゃ区別つかないからインデックス以外の方法はないかって話題だろ?
>>562
如何様に出来てもインデックス以外の要素で一発で判断できるメンバがあれば楽って話だろ。
例えばエクスプローラでよくあるカラム上の▲▼マークだってオーナードロー駆使すれば如何様にも出来るけど
デザイナ上で一発で出来れば楽だろ。
それと同じ。
0564デフォルトの名無しさん
2008/03/09(日) 17:25:40それと、カラムクリックイベントからそのカラムを操作するのと
ボタンクリックから特定のカラムを操作するのとでは条件同じだろ。
どっちにしろ指定されたカラムが”ある特定のカラムか”判断する術はインデックスからは無理って話なんだけど理解できる?
0565デフォルトの名無しさん
2008/03/09(日) 17:35:37....
}
なにが無理なの?
0566デフォルトの名無しさん
2008/03/09(日) 17:39:160567デフォルトの名無しさん
2008/03/09(日) 17:41:130568デフォルトの名無しさん
2008/03/09(日) 17:46:23>ボタンクリックから特定のカラムを操作するのとでは条件同じだろ。
イベント引数の中身が全然違う。ゆえに条件は同じとは言えない。
>どっちにしろ指定されたカラムが”ある特定のカラムか”判断する術はインデックスからは無理って話なんだけど理解できる?
何言ってんの?
"ある特定のカラム"というからにはそのカラムオブジェクトとインデックスから導かれたカラムの参照が
同じかどうか判定すればいいじゃん。お前もしかして"その特定のカラム"のインスタンスが分からないと
参照が同じかどうか判定できないとでも言いたいわけ?
比べる対象なんだからそんなもの分かっている前提に決まってるだろ。
お前が>>559で言っている状況の話を理解できないわけないだろうが。
>>559の内容がこの話の流れと全く違っていると言ってるのよ。
この話の発端となった>>499を百回声に出して読むんだな。
お前以外のやつは>>449のアホな質問に対する答えについてどうこう話しているはずだ。
お前だけ流れが読めてない。
0569デフォルトの名無しさん
2008/03/09(日) 18:00:010570デフォルトの名無しさん
2008/03/09(日) 19:36:28誰かが質問するかすれば、すぐにでも解決できそうなものなのにな
0571499
2008/03/09(日) 19:43:020572デフォルトの名無しさん
2008/03/09(日) 19:47:47そのカラムオブジェクトとインデックスから導かれたカラムの参照が同じかどうか判定
ってどうすればいいの?
0573デフォルトの名無しさん
2008/03/09(日) 19:49:06>>565
0574デフォルトの名無しさん
2008/03/09(日) 19:55:190575デフォルトの名無しさん
2008/03/09(日) 21:09:480576デフォルトの名無しさん
2008/03/10(月) 08:04:41「DVD-RAM ドライブ」 といった文字列を取得する方法は、
.NETのライブラリには用意されていないのでしょうか?
IShellFolder::GetDisplayNameOfを呼び出すよりも楽に取得する方法はありますか?
0577デフォルトの名無しさん
2008/03/10(月) 12:15:000578デフォルトの名無しさん
2008/03/10(月) 13:40:18private string GetSpecialFolder(string name)
{
Environment.SpecialFolder esf = new Environment.SpecialFolder();
if (name == "Desktop")
{
esf = Environment.SpecialFolder.Desktop;
}
else if (name == "MyDocuments")
{
esf = Environment.SpecialFolder.MyDocuments;
}
return Environment.GetFolderPath(esf) + @"\";
}
0579デフォルトの名無しさん
2008/03/10(月) 13:52:40Desktop,MyDocumentsをそこらじゅうで使うなら
class Desktop
class MyDocumentsと作って使うメソッドを定義
そこらじゅうで使わないならメソッド自体いらないと思う
0580デフォルトの名無しさん
2008/03/10(月) 14:48:37private string GetSpecialFolder(string name)
{
return (Environment.SpecialFolder)TypeDescriptor.GetConverter(typeof(Environment.SpecialFolder)).ConvertFromString(name);
}
0581デフォルトの名無しさん
2008/03/10(月) 14:53:38private string GetSpecialFolder(string name)
{
return Environment.GetFolderPath((Environment.SpecialFolder)TypeDescriptor.GetConverter(typeof(Environment.SpecialFolder)).ConvertFromString(name)) + @"\";
}
0582デフォルトの名無しさん
2008/03/10(月) 15:34:50ありがとうございます。
ループの中で使うだけなのでソース上で多用するわけではないので短くある必要は
ないのですが色々と勉強になります。
特にこんなものがあるなんて!。
TypeDescriptor.GetConverter(typeof(Environment.SpecialFolder)).ConvertFromString(name))
0583デフォルトの名無しさん
2008/03/10(月) 17:21:030584デフォルトの名無しさん
2008/03/10(月) 18:15:50HP巡回しても行き着かない・・・
0585デフォルトの名無しさん
2008/03/10(月) 18:45:15自己解凍しました
0586デフォルトの名無しさん
2008/03/11(火) 00:37:58メモリリークってアプリケーションを終了させてもメモリが開放されない状態を言うんですよね?
ガベージコレクタはそうならないように解放してくれるんですよね?
だとしたらOSにガベージコレクタを実装すればメモリリークなんてなくなるんじゃないでしょうか???
0587デフォルトの名無しさん
2008/03/11(火) 00:47:49メモリリークってのは、プロセスが動いている間に不要になったメモリをOSに返還し忘れて、溜まっていく状態。
0588デフォルトの名無しさん
2008/03/11(火) 00:52:43それもメモリリークに入りますが、C#スレとしてはその定義は間違っています。
>ガベージコレクタはそうならないように解放してくれるんですよね?
違います。
>OSにガベージコレクタを実装すればメモリリークなんてなくなるんじゃないでしょうか???
そうかもしてませんが、現実的ではありません。
0589デフォルトの名無しさん
2008/03/11(火) 03:57:570590デフォルトの名無しさん
2008/03/11(火) 04:07:482つの配列があってその配列には1〜9の数字が記録されています。
そこから、1〜9の数字のうち両方で使われていない数字を抽出したいと思います。
たとえば、
A が 1,2,3,4
B が 3,4,5,6
だったら、
C 7,8,9
という答えを得たいです。
配列でもコレクションでもかまわないのですが、
そういう比較を簡単にできる方法はないでしょうか?
現在は配列をforで回して比較しています。
0591デフォルトの名無しさん
2008/03/11(火) 04:20:21int[] A = { 1, 2, 3, 4 }, B = { 3, 4, 5, 6 };
var C = Universe.Except(A).Except(B);
0593デフォルトの名無しさん
2008/03/11(火) 06:55:050594デフォルトの名無しさん
2008/03/11(火) 09:38:490595デフォルトの名無しさん
2008/03/11(火) 09:47:190596デフォルトの名無しさん
2008/03/11(火) 12:20:45拡張メソッドがLINQの本体
ごくまれにクエリ式を使った方がシンプルに書けることがあるけど
普通は拡張メソッドを使った方が早いし見やすいし楽だ
0597デフォルトの名無しさん
2008/03/11(火) 12:29:12クエリを書けるようにする技術を総称してそう呼ぶだけで
別にC#にLINQっていう機能が付いてるわけじゃない
0598デフォルトの名無しさん
2008/03/11(火) 12:32:17本当かよそれw
0599デフォルトの名無しさん
2008/03/11(火) 12:50:44それどころか、WindowsもUnixもファイルハンドルとかの
OSに属するプロセス単位の資源はみんなプロセス終了時に片付けるぞ。
0600デフォルトの名無しさん
2008/03/11(火) 15:03:32システムを再起動する=プロセスを終了させても解放されない(?)
0601デフォルトの名無しさん
2008/03/11(火) 15:06:11OSの資源管理がタコだったりバグってたりするとその限りじゃなくなるわけだが。
0602デフォルトの名無しさん
2008/03/11(火) 15:42:130603デフォルトの名無しさん
2008/03/11(火) 15:47:59それは OS による。
>>596
LINQ =
標準クエリ演算子(こういう(拡張)メソッドを用意しときなさいっていう規約)
+ クエリ式構文(C# / VB の言語拡張)
0604デフォルトの名無しさん
2008/03/11(火) 16:46:58OSがメモリリークしてたらその通り。
0605デフォルトの名無しさん
2008/03/11(火) 16:59:370606デフォルトの名無しさん
2008/03/11(火) 17:23:060607デフォルトの名無しさん
2008/03/11(火) 18:25:13だとしたら「プロセス」ってそもそも何よw
0608デフォルトの名無しさん
2008/03/11(火) 20:10:05COMとかの細かいことはよく知らない。
0609デフォルトの名無しさん
2008/03/11(火) 20:27:27COMで起動したexcel.exeを終了してなくて、いつの間にか数十ものプロセスがメモリを占有してる、
という事例に出くわしたことがある。
0610デフォルトの名無しさん
2008/03/11(火) 20:30:320611デフォルトの名無しさん
2008/03/11(火) 21:29:27http://msdn2.microsoft.com/ja-jp/library/microsoft.win32.systemevents.userpreferencechanged(VS.80).aspx
0612デフォルトの名無しさん
2008/03/11(火) 21:33:05staticイベントにイベントハンドラを追加したまま放置すると
呼び出しターゲットのオブジェクトがGCの対象外になってメモリリークする
0613デフォルトの名無しさん
2008/03/11(火) 22:48:54プログラムを起動すると減り、終了すると戻るが
プログラムによっては元の値まで戻らないと当時聞いていた。
これがリークしたからなんだろうなと今だから思える。
0614デフォルトの名無しさん
2008/03/11(火) 23:24:46みたいなんだけど、実際は
string str = "Hoge\tFuga\tFugo";
string[] val1 = str.Split('\t');
string[] val2 = str.Split(new char[]{ '\t' });
どちらも問題なくコンパイル及び実行が通ってしまうのだけどなんで?
また、どっちでも良いとなればみんなはどっちの書き方してる?
new char[]{ '\t' }を渡してやった方が良さそうかなとは思うんだけど、
str.Split('\t');と書く方がスマートにも見えてしまう。
まあどうでもいいことだと言われたらそれまでなんだが、どうも気になってしまう。
0615デフォルトの名無しさん
2008/03/11(火) 23:27:050616デフォルトの名無しさん
2008/03/12(水) 01:13:23str.Split('a','b','c',...)でもいいし
配列を入れてもいい
0617デフォルトの名無しさん
2008/03/12(水) 02:45:15public class Hoge{
public int AddOne(int val) {
return val + 1;
}
}
のような引数の値を処理して返すだけのメソッドの場合は
staticにするのが普通なのでしょうか?
0618デフォルトの名無しさん
2008/03/12(水) 03:01:36なるほど。今までparamsの意味が分からなかったけどそういうことだったのね。
勉強になりました。サンクス。
0619デフォルトの名無しさん
2008/03/12(水) 03:10:33強制的にDateChangedイベントで
monthCalendar1_DateSelected(monthCalendar1, new DateRangeEventArgs(monthCalendar1.SelectionStart, monthCalendar1.SelectionEnd));
のようにDateSelectedを呼び出しました。
期待通りに、方向キーでの移動でもDateSelectedを呼び出せましたが、
方向キーで移動後にマウスで他の日付をクリックすると範囲選択になってしまいます。
期待する動作はドラッグ以外で範囲選択してほしくないのですが、上記の方法自体が間違っている(常套ではない)のでしょうか?
個人的には強制的にイベントを呼び出すのは良くないと思うのですが他に方法が思いつきません。
0620619
2008/03/12(水) 03:27:22まず、方向キー入力後にマウスで日付をクリックすると範囲指定になるのはもともと仕様のようなので今回は質問から外します。
monthCalendar1_DateSelected(monthCalendar1, new DateRangeEventArgs(monthCalendar1.SelectionStart, monthCalendar1.SelectionEnd));
という強制的にイベントを呼び出す方法は正しいのでしょうか?という質問に絞らせてください。
過去ログを読んでみると>>363のような書き込みがあるのですが、
PerformClickのようなイベントをシミュレートするようなメソッドがどのイベントにも確実にあるのでしょうか?
0621デフォルトの名無しさん
2008/03/12(水) 08:26:16全然わかってないから。
遠回りでもまずOOPを理解することを考えた方がいいんじゃないの?
「イベントを呼び出す」、なんて普通に書いてるけど、
揚げ足取りじゃなくて意味不明だよ。
まあ初心者にはありがちな「勘違い」の類ではあるけど。
0622デフォルトの名無しさん
2008/03/12(水) 09:33:11初期化のときに、Guid.Emptyなどを設定することによって
扱っているんですが、DateTimeのときはどうしたら良いのでしょうか?
DateTime.Emptyは無いですし‥‥
DateTime.MinValueを使っても良いもんでしょうか?
0623デフォルトの名無しさん
2008/03/12(水) 10:03:330624デフォルトの名無しさん
2008/03/12(水) 10:16:22基本的にはそんな感じ。
double X = 3.14159265;
string str = X.ToString("F3"); //インスタンスメソッド
double newX = double.Parse(str); //staticメソッド
クラスのインスタンスにより異なる動作をさせたければインスタンスメソッドにする。
double.Parseメソッドがインスタンスメソッドだったらちょっと変でしょ?
0625デフォルトの名無しさん
2008/03/12(水) 10:22:09623も書いているけどnull許容型。
0626デフォルトの名無しさん
2008/03/12(水) 10:24:09OOPっていうかイベントはそんなに単純じゃないよ
君がやってるのはイベントハンドラ用のメソッドを呼び出してるだけ
別に問題ないけどイベントハンドラに直接処理を書かずに他のメソッドを作って
それをそれぞれのイベントハンドラから呼び出すようにした方が綺麗
0627デフォルトの名無しさん
2008/03/12(水) 10:56:22>>625
DateTimeってstructで値型だから、nullにはならないのではないでしょうか?
0628デフォルトの名無しさん
2008/03/12(水) 10:57:040629デフォルトの名無しさん
2008/03/12(水) 10:58:21DateTime?でnullになるDateTimeが出来る
値型じゃなくてclassだけど
0630デフォルトの名無しさん
2008/03/12(水) 11:01:13==nullで比較できるのは構文糖衣
0631デフォルトの名無しさん
2008/03/12(水) 11:01:19http://msdn2.microsoft.com/ja-jp/library/1t3y8s4s(VS.80).aspx
>>629
Nullable<T>は構造体だから値型だぞ。
0632デフォルトの名無しさん
2008/03/12(水) 11:07:58http://uchukamen.com/Programming1/Menu/image2.gif
このようなメニューを作りたく思い、MenuStripを作り
RenderModeをSystemにしてみましたが出来ません。
VS2005では無理なのでしょうか?
よろしくお願いします。
0633627
2008/03/12(水) 11:09:15nullableって、関数の引数でnullを許容するための構文だと思っていて、
何にでも使えるとは知りませんでした‥‥。びっくり。
どうも有り難うございました。
0634デフォルトの名無しさん
2008/03/12(水) 11:11:45何が出来ないんだよ。
0635デフォルトの名無しさん
2008/03/12(水) 11:22:52レス有り難うございます。
ttp://sakuratan.ddo.jp/uploader/source/date73737.png
こうなります。
http://uchukamen.com/Programming1/Menu/image2.gifより文字が大きいのでなんとかしたいです。
0636デフォルトの名無しさん
2008/03/12(水) 11:40:18お勧めしない
0637デフォルトの名無しさん
2008/03/12(水) 11:41:29そのサンプルはMenuStripじゃなくてMainMenuなんじゃね?
知らんけど。
MenuStripならToolStripSystemRenderer継承したクラス作って
好きなように描画するようにしたらいい
0638デフォルトの名無しさん
2008/03/12(水) 11:42:040639デフォルトの名無しさん
2008/03/12(水) 11:56:15ありがとうございました。
希望の動作を実現することが出来ました。
ところで、どうしてお勧めできないのですか?
>>638
menuStripにVisualStyleというプロパティはありませんでした。
0640デフォルトの名無しさん
2008/03/12(水) 11:58:49Obsolete来ても知らないよ
0641デフォルトの名無しさん
2008/03/12(水) 14:04:30class Test
{
static int GetDigit(this int num)
{
return (int)Math.Log(num, 10) + 1;
}
}
という拡張メソッドがあったとき、C#3.0からはインスタンスメソッドとして使えますが、ライブラリにしてC#2.0から使うときは
インスタンスメソッドとして使えるのでしょうか?それとも、Testクラスのstaticメソッドとして使うことになるのでしょうか?
0642デフォルトの名無しさん
2008/03/12(水) 14:05:110643デフォルトの名無しさん
2008/03/12(水) 15:23:22そのリストからワイルドカードで検索するにはどうしたら良いのでしょうか。
string[] fileListText = Directory.GetFiles(@"C:\Hoge\", "*.txt");
と同じことを、
string[] fileListAll = Directory.GetFiles(@"C:\Hoge\", "*");
とした後に、fileListAll の中から "*.txt" のファイル名のみ抽出して fileListTex を作成したいのです。
0644デフォルトの名無しさん
2008/03/12(水) 15:59:400645デフォルトの名無しさん
2008/03/12(水) 16:08:17でも良い
0646619
2008/03/12(水) 16:37:49はい、多分そうじゃないかと思ったのでヒントを頂きたく質問しました。
>>626
なるほど。
それだとごく簡単に共通の事が出来ますね。
PerformClickのようなものがあるので他のイベントにも同じような呼び出しでいいのかと思いました。
とすると共通の処理がないときでもイベントハンドラに直接処理を書くのは良くないのですか?
それとも共通の処理が必要になった時にメソッドを分ければいいのでしょうか??
0647デフォルトの名無しさん
2008/03/12(水) 17:10:58>とすると共通の処理がないときでもイベントハンドラに直接処理を書くのは良くないのですか?
いいえ。直接処理を書いて問題ないです。
>それとも共通の処理が必要になった時にメソッドを分ければいいのでしょうか??
メソッドを外に書いてそれを呼び出す方がスマートになる場合もあるし、
わざわざそんなことせんでも良い場合もある。そんなに気にしなくていいよ。
俺なんかはbutton1_Click(null, null)なんかで呼び出したりするのは別に汚いともなんとも思わんし。
if(result==false)と書くか、if(!result)と書くかみたいなもんで、ただの趣味の問題。
気にするだけ無駄だと思う。
0648デフォルトの名無しさん
2008/03/12(水) 17:16:300649647
2008/03/12(水) 17:45:59それも趣味の問題だと俺は思うぞ。
例えば、
void button2_Click(object sender, EventArgs e)
{ button1_Click(null, null); }
void button1_Click(object sender, EventArgs e)
{ /*処理*/ }
こういうように書くより、
void button2_Click(object sender, EventArgs e)
{ SampleMethod(); }
void button1_Click(object sender, EventArgs e)
{ SampleMethod(); }
void SampleMethod()
{ /*処理*/ }
こう書くべきってことを言いたいんだと思うが、
後者の書き方でもまだ汚いと思うやつ(例えば俺)もいるってことだ。
次に俺の書き方を示す。
0650デフォルトの名無しさん
2008/03/12(水) 17:52:30public Form1()
{
InitializeComponent();
//イベント
button1.Click += new EventHandler(Button1or2_Click);
button2.Click += new EventHandler(Button1or2_Click);
}
void Button1or2_Click(object sender, EventArgs e)
{
//処理
}
つまり、処理を行うメソッドを外部に記述しても、それを呼び出すためだけのメソッドを記述している時点で
無駄があると感じる人間もいるんだわ。
処理を行うメソッドを直接イベントに紐付けて、デリゲートがメソッドを直接呼び出す方がスマートに感じるということ。
当然反論もあるかもしれん。イベント引数を扱いたいときなどはこの方法ではまずい場合もあり得る。
要するに俺が言いたいことは、最初から言っているとおり趣味の問題だってこと。
自分が綺麗で可読性があると思えるいうコードを書けばいいじゃんって言うだけの話。
コードはこう書くべきなんて他人がどうこう言うもんじゃない。
0651デフォルトの名無しさん
2008/03/12(水) 18:18:39ありがとうございます!
ということは>>620のような書き方でも問題ないということですか??
イベントの引数が違う時は>>650のようには出来ないので>>649のようになると思うのですが、
>>620でも趣味の範囲という解釈でいいんでしょうか。
0653デフォルトの名無しさん
2008/03/12(水) 18:25:49ありがとうございました。
0654デフォルトの名無しさん
2008/03/12(水) 18:35:42ありがとうございます。
0655デフォルトの名無しさん
2008/03/12(水) 18:40:02ちなみに、強制的にイベントを発生させるということを厳密に行いたいのであれば、
monthCalendarを継承したカスタムクラスで、イベントデリゲートを呼び出してくれるようなメソッドを公開する。
public PerformDataSelected(object sender, DateRangeEventArgs e){
if(this.DataSelected != null)
this.DataSelected(sender, e);
}
ほんで外からそのメソッドを呼び出せばいい...と思う。
もしかしたら俺が何か勘違いしてるかもしれん。
興味あったら試してみて。
0656デフォルトの名無しさん
2008/03/12(水) 18:40:52OnDataSelectedを呼ぶべき
0657デフォルトの名無しさん
2008/03/12(水) 18:40:590658655
2008/03/12(水) 18:41:32public void PerformDataSelected(object sender, DateRangeEventArgs e){
if(this.DataSelected != null)
this.DataSelected(sender, e);
}
voidが抜けてたわ
0660デフォルトの名無しさん
2008/03/12(水) 18:47:04だから派生クラスから呼び出す手段としてOn**メソッドを用意する
0661デフォルトの名無しさん
2008/03/12(水) 18:50:17趣味の問題、か。
議論の余地なく間違ってると思うよ。
こういう人は「抽象化」の意味と意義がわかってないんじゃないの。
0662デフォルトの名無しさん
2008/03/12(水) 19:00:45好みじゃなくて使い分けるもの
0663655
2008/03/12(水) 19:08:09あらま、やはり勘違いしてたみたいね。
派生クラスからでもイベントは呼べないのか。
失礼しました。
>>655はスルーして下され。
0664デフォルトの名無しさん
2008/03/12(水) 19:15:39英語だとInvokeとかRaiseだから「起こす」とでも言うのが正解じゃないの?
0665デフォルトの名無しさん
2008/03/12(水) 19:19:080666643
2008/03/12(水) 19:34:45そのままでは "=>" が上手く行かなかったのですが、
string[] fileListText = Array.FindAll(
fileListAll,
delegate (string item) { return ( System.IO.Path.GetExtension(item).ToLower() == ".txt" ); }
);
でいけました。
ありがとうございました。
0667デフォルトの名無しさん
2008/03/12(水) 19:43:21設計時から経過措置として認識されてて,後で捨てても影響が出ないように
明示的すぎる書き方になってるのかな
0668デフォルトの名無しさん
2008/03/12(水) 19:46:02ええっと、反論ってのは具体例を挙げて行うものなんでしょうか?
それとも理由を添えろって言いたいの?
まあいいやまず>>661で言いたかったことをはっきりしておくと、要するに
>>649の前者のコードは議論の余地なく×で、これは趣味の問題なんかではないということ。
後者のコードは普通は△だが、確かにこのように書いた方がわかりやすい場合も
稀にあるかもしれないことは認める。
通常は>>650の書き方を選択すべき。
>>649の前者がダメなのは、
(1) button1_Click()が羊頭狗肉になってる。
(2) だからbutton2_Click()の処理内容が把握しづらい。
0669デフォルトの名無しさん
2008/03/12(水) 20:21:11シグネチャが違うイベントの場合を示せよ。
0670デフォルトの名無しさん
2008/03/12(水) 20:28:45判断基準は人それぞれとしても,場合によって適切に使い分けるもの
0671デフォルトの名無しさん
2008/03/12(水) 20:33:14なんでこういう日本語も満足に使えないたわけってのは例外なく口調が偉そうなのかね。
シグネチャが違うってどういうこと?
>>668に「通常は」と書いたつもりだけど。
EventHandler<T>と違うシグネチャのイベントを扱うのって通常かな。
0672デフォルトの名無しさん
2008/03/12(水) 22:02:39OnDateSelected使えって指摘は既出の通りで、
引数として渡すイベントソース・データを外部から取るのはだめ
ソースはthis固定、データはコンストラクタの引数だけ外部から取って自前で生成
その例だとこんな感じ
public PerformDateSelected(DateTime start, DateTime end) {
OnDateSelected(this, new DateRangeEventArgs(start,end));
}
0673デフォルトの名無しさん
2008/03/12(水) 22:50:08>判断基準は人それぞれとしても,場合によって適切に使い分けるもの
それこそが、まさしく好みとか趣味という言葉の指し示すものである。
0675デフォルトの名無しさん
2008/03/12(水) 23:15:51普通にあるでしょ。
例えばbutton1が押された時と、textbox1上でエンターキーが押された時に同じ処理をしたい時とか。
この場合は
private void button1_Click(object sender, EventArgs e)
{foo();}
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{foo;}
}
のように>>649の後者の書き方になるんじゃない?
0676デフォルトの名無しさん
2008/03/12(水) 23:17:250677デフォルトの名無しさん
2008/03/12(水) 23:30:090678デフォルトの名無しさん
2008/03/12(水) 23:38:100679デフォルトの名無しさん
2008/03/13(木) 11:59:03Hoge hoge;
hoge += foo1;
hoge += foo2;
hoge();
とするとfoo1, foo2と呼ばれfoo2の返り値だけが返りますが
hogeに登録されているものを個々に呼び出し
それらの返り値を得たいのですが、どうやるのでしょうか?
0680デフォルトの名無しさん
2008/03/13(木) 12:03:34GetInvocationListでDelegate[]を取得するとか。
0681デフォルトの名無しさん
2008/03/13(木) 12:09:24素直にrefまたはoutで渡せばいいじゃん。
0682デフォルトの名無しさん
2008/03/13(木) 12:28:19thx
Delegateクラスのメンバ一覧見てたのに全然気が付かなかった・・・
0683デフォルトの名無しさん
2008/03/13(木) 16:31:24[Description("ほげほげ"), DefaultValue(false)]
public bool HogeHoge {〜}
[Description("ほげほげ")]
[DefaultValue(false)]
public bool HogeHoge {〜}
0684デフォルトの名無しさん
2008/03/13(木) 16:42:070685デフォルトの名無しさん
2008/03/14(金) 01:14:17hoge = new Hoge(); // 2
hoge = new Hoge(); // 3
hoge = new Hoge(); // 4
hoge = new Hoge(); // 5
とやったときに1~4までのインスタンス解放を気にする必要が無いってのが
ガーベジコレクト機能を持つ言語の利点という理解でよろしいでしょうか?
0686デフォルトの名無しさん
2008/03/14(金) 01:18:050687デフォルトの名無しさん
2008/03/14(金) 01:48:14早く答えろよ
0689デフォルトの名無しさん
2008/03/14(金) 02:19:530690デフォルトの名無しさん
2008/03/14(金) 04:06:28{
処理;
}
でいいじゃない。
やらないけど。
0691デフォルトの名無しさん
2008/03/14(金) 08:30:070692デフォルトの名無しさん
2008/03/14(金) 08:32:100693デフォルトの名無しさん
2008/03/14(金) 08:54:51どのように処理したらいいでしょうか?
また、変換後の画像の大きさ(高さ・幅)は取得できるでしょうか?
低レベルですみませんがよろしくお願い致します。
0694デフォルトの名無しさん
2008/03/14(金) 09:06:28> テキストを画像に変換したいのですが、
意味がわからん
0695デフォルトの名無しさん
2008/03/14(金) 09:12:380696デフォルトの名無しさん
2008/03/14(金) 09:17:15例えば「abcde」と入力したら、
abcdeと書かれた画像を生成することです
0697デフォルトの名無しさん
2008/03/14(金) 09:22:290698デフォルトの名無しさん
2008/03/14(金) 09:24:50ありがとうございます
生成後のBitmapのサイズは取得できますか?
0699デフォルトの名無しさん
2008/03/14(金) 09:40:290700デフォルトの名無しさん
2008/03/14(金) 10:05:18TextRendere.MeasureTextとかで。
0701デフォルトの名無しさん
2008/03/14(金) 10:09:41ありがとうございます!
本当に助かりました!
0702デフォルトの名無しさん
2008/03/14(金) 10:14:34これでC#は事実上最強言語になったわけだ
http://an.to/?microsoft01news
0703デフォルトの名無しさん
2008/03/14(金) 10:24:230704デフォルトの名無しさん
2008/03/14(金) 10:27:37ただの釣り
開くとビルゲイツの若かりしころの写真が出てくるだけ
0705デフォルトの名無しさん
2008/03/14(金) 10:32:030706デフォルトの名無しさん
2008/03/14(金) 10:36:19ググってみたらan.to/?で始まるのがあちこちに張りまくられてるみたいだけど。
0707デフォルトの名無しさん
2008/03/14(金) 10:51:51写真が出てくるだけじゃないんだが、
telnetつかってごにょごにょっしようとする。
0708デフォルトの名無しさん
2008/03/14(金) 10:54:09「これ」が何を指しているのか分かりかねるが、
URLのことなら書いてる通りの転送サービスじゃないのか
内容のことなら見てないので知らない
0709デフォルトの名無しさん
2008/03/14(金) 11:29:510710デフォルトの名無しさん
2008/03/14(金) 11:54:440711デフォルトの名無しさん
2008/03/14(金) 12:04:000712デフォルトの名無しさん
2008/03/14(金) 12:20:18WPFのRadialGradientBrushみたいなことがしたいのですが
0713712
2008/03/14(金) 12:28:37using (GraphicsPath path = new GraphicsPath()) {
path.AddEllipse(0, 0, width, height);
using (PathGradientBrush brush = new PathGradientBrush(path)) {
brush.CenterColor = Color.White;
brush.SurroundColors = new Color[] { Color.Red };
g.FillEllipse(brush, 0, 0, width, height);
}
}
0714デフォルトの名無しさん
2008/03/14(金) 12:50:20SendKeysでスペースキーを送信したいのですがどのようにすればよいのでしょうか。
よろしくお願いします。
0715デフォルトの名無しさん
2008/03/14(金) 13:08:58半角スペースをSendすればいい予感がしました
0716デフォルトの名無しさん
2008/03/14(金) 13:13:5910回連続で送信したく思い、
SendKeys.SendWait("{ 10}");
のそうにやってみたわけですが出来ないのでここに書き込みました。
0717デフォルトの名無しさん
2008/03/14(金) 13:18:5210回forを回すとか10個の半角スペースをSendすればいい予感がしました
0718デフォルトの名無しさん
2008/03/14(金) 13:19:33それ以外に方法が無いのならばそれでしますが...
0719デフォルトの名無しさん
2008/03/14(金) 13:24:040720デフォルトの名無しさん
2008/03/14(金) 13:26:370721デフォルトの名無しさん
2008/03/14(金) 15:25:460722sage
2008/03/15(土) 00:46:41とりあえずC#でゲームをつくりたいとおもうのですが、
どのようにして習得(勉強)したほうがよいのでしょうか?
ネットでしらべるとC#の手引きのようなものがのってますが、
そういうものでいいのでしょうか?
おしえてください。
0723デフォルトの名無しさん
2008/03/15(土) 00:48:38諦める マジオヌヌメ
0724デフォルトの名無しさん
2008/03/15(土) 00:50:25そういうものでいいのです。
0725722
2008/03/15(土) 01:56:50わかりました。とりあえずそこで勉強してみます。
一応参考までに聞きたいのですが皆さんはどうやってC#を習得したのですか?
できればおしえてください
0726デフォルトの名無しさん
2008/03/15(土) 02:08:48ふつーに本を読んで。
0727デフォルトの名無しさん
2008/03/15(土) 03:41:30現在forが入れ子で4段になっているのですが、
一番内側の場所から一気に1段目や2段目のforまでbreakするにはどうすればいいのでしょうか?
0728デフォルトの名無しさん
2008/03/15(土) 03:42:190729デフォルトの名無しさん
2008/03/15(土) 03:46:39忘れてました、そうですね。C#には普通にありましたねgoto
0730デフォルトの名無しさん
2008/03/15(土) 03:59:29C# 入門 でググレ。
俺はそのサイトと@ITとMSDNとぐぐる大先生だけで独学で習得したぞ。
細かいところとかは.NET関連の質問スレとかをROMったりしても勉強になった。
本なんぞ別に買わんでもネットで十分OOPはマスターできる。
0731デフォルトの名無しさん
2008/03/15(土) 05:57:250732デフォルトの名無しさん
2008/03/15(土) 06:45:380733デフォルトの名無しさん
2008/03/15(土) 07:49:390734デフォルトの名無しさん
2008/03/15(土) 07:57:59どんなゲームを作りたいのかにもよるんだろうけど、
その先に「画面の描画」って大きなハードルがある気がするなあ。
0735デフォルトの名無しさん
2008/03/15(土) 09:02:37printf("%10s %s",first, second);
と同じようなことをしたいのです。
例えば、
aaa xxxxx
bbbbb yyyy
cc zzzzzzzzzzz
のような文字列を表示するときに、
左の項目を最低10文字分とるようにしたいのです
よろしくお願い致します。
0736デフォルトの名無しさん
2008/03/15(土) 09:20:340737デフォルトの名無しさん
2008/03/15(土) 09:23:22string.Format("{0,-10} {1}", first, second)
0738デフォルトの名無しさん
2008/03/15(土) 09:28:22ありがとうございます
カンマで区切るのですか
MSDNにも載ってないので助かりました
0739デフォルトの名無しさん
2008/03/15(土) 09:33:18載ってるよ? 複合書式設定
0740デフォルトの名無しさん
2008/03/15(土) 09:43:25何かライブラリDLLはあるでしょうか?よろしくお願いします。
0741デフォルトの名無しさん
2008/03/15(土) 09:46:14public TreeEx() { this.Nodes.Add("ほげ"); }
}
こんなクラスをフォームに貼り付けて実行してみたら
"ほげ"というルートノードが2つ作られました。
おかしいと思ってInitializeComponent()を見てみたら
"ほげ"ノードを追加する処理が生成されてました。
勝手に追加されると困るのですが、これを止めることってできないんですか?
0742デフォルトの名無しさん
2008/03/15(土) 09:58:20デザイナが自動生成しないようにするやり方はわからないけど、
とりあえずDesignModeなら追加しないってやれば回避できると思う。
デザイナで見れなくなるけど。
0743デフォルトの名無しさん
2008/03/15(土) 10:06:53Nodesプロパティをoverrideして、[Browsable(false)]つけてみるとか。
0744デフォルトの名無しさん
2008/03/15(土) 11:21:170745デフォルトの名無しさん
2008/03/15(土) 11:50:40引数をつけて呼び出して使おうとしているのですがエラーになったりちゃんと動作したりします。
エラーの内容から考えるとどうもe.Columnと_columnの数字が異なる事があるらしく
比較に失敗してしまうようなのですが、どうしてでしょうか?
0746デフォルトの名無しさん
2008/03/15(土) 11:55:59Browsable属性ではできなかったので
public bool ShouldSerializeNodes() { return false; }
public new TreeNodeCollection Nodes { get { return base.Nodes; } }
を書いたら望み通りになりました。
高機能なのはいいんだけどいろいろメンドクサイデスネ
0747745
2008/03/15(土) 12:09:07パラメータ名: index
だからインデックスではなくてそのlistviewitemのsubtime[4]が見つからないのですね。
でも、何で動いたり動かなかったりするのでしょう?。
0748デフォルトの名無しさん
2008/03/15(土) 12:11:540749745
2008/03/15(土) 12:25:57IComparer.Compare(object x, object y)のオブジェクトは何処から来ているのでしょうか?。
e.Column から __column にインデックスが入ってそれを基準にオブジェクトが返ってきて
いるのだと思うのですがIComparer.Compareの内容はどうやったら見れますか?。
0750745
2008/03/15(土) 12:34:18IDEって凄く便利ですね。デバッグ字に変数にカーソルを合わせると内容まで表示してくれるとは
今まで気付きませんでした。
0751デフォルトの名無しさん
2008/03/15(土) 13:34:22・自分のプログラムのバグなのかコンパイラのバグなのかわからない
・他の仕事に応用できない糞開発ツールの独自世界を必死に学習している
・テキストエディタで書いたほうが効率的なのに糞UIツールを懸命に使っている
糞だけど、政治的な理由で無理やり使わされているんですよね
もういい加減、我慢するのはやめませんか?
・糞開発ツールを部下に押し付ける上司の命令は無視しましょう。
上司は糞開発ツールが使われる実績を作ることであの会社のごきげんをとっているのです。
・あの糞開発ツール提供会社には「糞開発ツールは話にならない」と突き放しましょう。
バグレポートなどしてはいけません。改善要求などもってのほかです。
あの会社はあなたたちのことをテスター/モルモットとしか思っていません。
・あの会議で「糞開発ツールを使ったら生産性がxx%アップしました」
なんて話が出たら力強く机を叩き、会議室を出ましょう。
あの人たちは糞開発ツールをマンセーすることで立場を確保しているのです。
糞な開発ツールを糞だと言える、そんな当たり前の環境をみんなの力で取り戻しましょう。
0752デフォルトの名無しさん
2008/03/15(土) 13:47:190753デフォルトの名無しさん
2008/03/15(土) 13:51:360754デフォルトの名無しさん
2008/03/15(土) 14:56:23君ならできる。やればできるさ!
0755デフォルトの名無しさん
2008/03/15(土) 16:33:150756デフォルトの名無しさん
2008/03/15(土) 17:18:420757デフォルトの名無しさん
2008/03/15(土) 17:24:14Microsoft Visual C# 2008をつかっていいるのですが、
ビルドして実行すると一瞬だけ(入力まちがあるとき以外)表示されて
すぐにきえるのですが、どうすればきえなくなりますか?
おしえてください
0758デフォルトの名無しさん
2008/03/15(土) 17:25:370759デフォルトの名無しさん
2008/03/15(土) 17:26:480760デフォルトの名無しさん
2008/03/15(土) 17:27:430761デフォルトの名無しさん
2008/03/15(土) 17:34:570762デフォルトの名無しさん
2008/03/15(土) 17:35:440763デフォルトの名無しさん
2008/03/15(土) 17:37:280764デフォルトの名無しさん
2008/03/15(土) 19:01:46コマンドプロンプトからexeを起動しろ
0765デフォルトの名無しさん
2008/03/15(土) 19:10:31staticをつけてるけど、
ttp://msdn2.microsoft.com/ja-jp/library/ms171728.aspx
を見るとつけてない。
つけるのとつけないのとではどう違うの?
0766デフォルトの名無しさん
2008/03/15(土) 19:12:480767デフォルトの名無しさん
2008/03/15(土) 19:14:050768デフォルトの名無しさん
2008/03/15(土) 19:17:40そのメソッド自体を同時にひとつしか動かさないなら、別に変わらないと思うけど。
0769デフォルトの名無しさん
2008/03/15(土) 19:19:350770デフォルトの名無しさん
2008/03/15(土) 19:25:42キーアサイン変えてるからキーわからないけど、ステップオーバー押していって実行すれば?
0771デフォルトの名無しさん
2008/03/15(土) 19:26:10そういう保証が必要な時点で
扱いにくくなってるということだろう?
0772デフォルトの名無しさん
2008/03/15(土) 19:34:51VS上なら「デバッグ開始」じゃなくて「デバッグなしで開始」だと終了後にpauseしてくれる
0773765
2008/03/15(土) 19:35:47ありがとう。
0774デフォルトの名無しさん
2008/03/15(土) 21:39:03気にしないでいいというより気にするべきところが違うという話では。
0775デフォルトの名無しさん
2008/03/16(日) 00:19:41入力できる文字を制限したテキストボックスを作りたいのですが、
どのメソッドをオーバーライドするのが適切ですか?
TextChangedだとテキストが変わってから戻すことになりそうだし、
KeyPressだとコピペに対応できなさそうなイメージがあって、
msdnみてもよくわかりません。
教えて。
0776デフォルトの名無しさん
2008/03/16(日) 00:22:13俺も知りたい。
入力中に入力値を評価するのはどうやるんだろうな。
0777デフォルトの名無しさん
2008/03/16(日) 00:28:23wndproc
0778デフォルトの名無しさん
2008/03/16(日) 00:37:22コピペ対応はあきらめて(ShortcutsEnabled = falseと、コンテクストメニューにダミーをかます)
OnKeyPressで純粋にキー入力にだけ対応するのが一番簡単。
コピペにも対応させたいのならTextChanedで二重にチェックするのが一番簡単で確実じゃないかな。
0779デフォルトの名無しさん
2008/03/16(日) 00:51:55onPasteあたりをオーバーライドすればいいんじゃないの?
0780デフォルトの名無しさん
2008/03/16(日) 02:14:43このとき、アイテム内文字列の比較モードを変更できますか?
具体的には、文字列"9"、"88"、"56"をソートした場合
"88","56","9"の順番にならんでほしいのですが、
"9","88","56"の順番になってしまいます。
0781デフォルトの名無しさん
2008/03/16(日) 02:18:330782デフォルトの名無しさん
2008/03/16(日) 10:31:14>>778
ありがとうございます。
早速実装してみます。
0783デフォルトの名無しさん
2008/03/16(日) 10:46:17Controlがフォーカスされたときのイベントってどこに書くんですか?
OnClickかとも思ったのですが、これだとTabキーで移動してきたときには動きませんし・・・
0784デフォルトの名無しさん
2008/03/16(日) 10:57:000785デフォルトの名無しさん
2008/03/16(日) 11:06:56それかー。
ありがとーございます。
0786デフォルトの名無しさん
2008/03/16(日) 12:10:23OnGotFocus/OnLostFocus
0787デフォルトの名無しさん
2008/03/16(日) 15:03:34それとDB使ったツールを作って配布したいんだけど、PerlとかRubyだと一般ユーザに使ってもらえないので…
0788デフォルトの名無しさん
2008/03/16(日) 15:11:53スレチだけど
0789デフォルトの名無しさん
2008/03/16(日) 15:39:20ここ2日くらいexerbとかrubyscript2exeやってみてたんだけどどうもうまくいかんのだ
0790デフォルトの名無しさん
2008/03/16(日) 17:10:36(bool型とdouble型が〜とでるのですが自分にはわかりませんでした。)
どなたかおしえてくださいませ。
using System;
class IfSample
{ public static void Main(){ Console.Write("身長(cm)を入力してください");
double n = double.Parse(Console.ReadLine());
Console.Write("体重を入力してください");
double m = double.Parse(Console.ReadLine());
Console.Write("BMIは{0}です", m / ((n / 100) * (n / 100)));
bool bmi = m / ((n / 100) * (n / 100));
switch(bmi)
{ case (bmi<19.8):
Console.Write("痩せ型です");
break;
case (19.8<=bmi<24.2):
Console.Write("普通です");
break;
case (24.2<=bmi<26.4):
Console.Write("やや肥満です");
break;
case (26.4<=bmi<35.0):
Console.Write("肥満です");
break;
default:
Console.Write("高度な肥満です");
break;
}
}
}
0791デフォルトの名無しさん
2008/03/16(日) 17:13:530792デフォルトの名無しさん
2008/03/16(日) 17:15:13> bool bmi = m / ((n / 100) * (n / 100));
ここかな?
double bmi = ・・・
みたいにしてみれば?
0793デフォルトの名無しさん
2008/03/16(日) 17:17:460794デフォルトの名無しさん
2008/03/16(日) 17:19:33Console.Write("痩せ型です");
} else if (bmi < 24.2) {
Console.Write("普通です");
} else if (bmi < 26.4) {
Console.Write("やや肥満です");
} else if (bmi < 35.0) {
Console.Write("肥満です");
} else {
Console.Write("高度な肥満です");
}
0795デフォルトの名無しさん
2008/03/16(日) 21:04:38[Flags]属性をつけようがつけまいが同じなのでしょうか?
どこかで0,1,2,4になるようなことを読んだような記憶があるのですが、それは勘違いで、
自分で明示的に割り当てなければいけない。というのが正解なのでしょうか?
0796デフォルトの名無しさん
2008/03/16(日) 21:07:230797デフォルトの名無しさん
2008/03/16(日) 21:55:31俺もそんな話をどっかで読んだな。
どういう属性をつけるかとか、ぜんぜん覚えてないけど。
0798デフォルトの名無しさん
2008/03/16(日) 21:57:170799デフォルトの名無しさん
2008/03/16(日) 22:00:40ビットフィールドには[Flags]を付ける「お約束」
0800デフォルトの名無しさん
2008/03/16(日) 22:20:110801デフォルトの名無しさん
2008/03/16(日) 22:22:130802デフォルトの名無しさん
2008/03/16(日) 22:23:41http://www.melma.com/backnumber_120830_2325135/
↑C/C++の世界では、これは「ビットフィールド」とは言わんと思うけど。C#の世界では知らんけど。
0803デフォルトの名無しさん
2008/03/16(日) 22:25:49よく見たら、自動で割り当てるわけじゃなくて、自分で書かないといけないのか。
0804デフォルトの名無しさん
2008/03/16(日) 22:25:530805デフォルトの名無しさん
2008/03/16(日) 22:27:160806デフォルトの名無しさん
2008/03/16(日) 22:28:210807デフォルトの名無しさん
2008/03/16(日) 22:32:49public enum ABC { Z = 0, A = 1, B = 2, C = 4}
[Flags]を付けないと
ABC ab = A|B;
でエラーになる。
0808デフォルトの名無しさん
2008/03/16(日) 23:00:19エラーになるような違いが出るんだったら属性じゃなくて言語に直接組み込まれてるだろ
0809デフォルトの名無しさん
2008/03/16(日) 23:09:29やっぱりコンパイラの動作とは直接関係なくてMSとのお約束なんじゃね
0810デフォルトの名無しさん
2008/03/16(日) 23:17:530811デフォルトの名無しさん
2008/03/16(日) 23:35:390812デフォルトの名無しさん
2008/03/16(日) 23:40:54属性じゃなくて flags enum ABC { … } みたいにするわな
0813デフォルトの名無しさん
2008/03/17(月) 04:02:24Form1を閉じたら、スレッド2を終了したいのですが、どのようにすれば良いのでしょうか?
0814デフォルトの名無しさん
2008/03/17(月) 04:32:050815デフォルトの名無しさん
2008/03/17(月) 04:54:36それの書き方が分からないよ><
0816デフォルトの名無しさん
2008/03/17(月) 05:27:37Form のイベント全て試す
0817デフォルトの名無しさん
2008/03/17(月) 14:19:340818デフォルトの名無しさん
2008/03/17(月) 14:35:03こんなんじゃないか?
0819デフォルトの名無しさん
2008/03/17(月) 16:09:070820デフォルトの名無しさん
2008/03/17(月) 16:16:57int型変数へ入れるにはどうすればよいですか?
List<int>へループで入れたいが 一部smallint型が
ある場合に上手く出来なくて困ってます。
0821デフォルトの名無しさん
2008/03/17(月) 16:52:46むしろそんなんだからラムダ式使うんじゃないかと。
0822デフォルトの名無しさん
2008/03/17(月) 17:59:52そうです。break;の条件を、Form1が閉じたときとやりたいのですが、うまく行きません。
static int close1 = 0;
public void Form1_Closed(object sender, System.EventArgs e)
{
close1 = 1;
}
while (close1 == 0)
{
//////////////時計
long tick = DateTime.Now.Ticks;
DateTime d = new DateTime(tick);
Console.WriteLine(d.ToString());
label8.Text = (d.ToString());
Thread.Sleep(1000);
}
0823デフォルトの名無しさん
2008/03/17(月) 18:33:40>label8.Text = (d.ToString());
GUIスレッド以外からフォームにアクセスしちゃダメ。
close1をvolatileにするか読み書き時にlockする。
BackgroundWorkerの使用をすすめる。
0824デフォルトの名無しさん
2008/03/17(月) 18:47:220825デフォルトの名無しさん
2008/03/17(月) 19:11:01ぶわぁか、こんなんでC#3.0にしてどうする。
せめて匿名メソッドだうんこ。
0826デフォルトの名無しさん
2008/03/17(月) 19:12:46匿名メソッドは面倒だよ。
なげーもん。ラムダ式使ったら2.0には戻れんね。
0827デフォルトの名無しさん
2008/03/17(月) 19:14:330828デフォルトの名無しさん
2008/03/17(月) 19:17:24Cでもやってりゃいいのに
0829デフォルトの名無しさん
2008/03/17(月) 19:26:290830デフォルトの名無しさん
2008/03/17(月) 19:40:150831デフォルトの名無しさん
2008/03/17(月) 19:43:040832デフォルトの名無しさん
2008/03/17(月) 19:44:340833デフォルトの名無しさん
2008/03/17(月) 19:59:52λ......
0834デフォルトの名無しさん
2008/03/17(月) 20:01:550835デフォルトの名無しさん
2008/03/17(月) 20:05:560836デフォルトの名無しさん
2008/03/17(月) 20:08:030837デフォルトの名無しさん
2008/03/17(月) 20:28:33俺、C#よりC++をよく使うが、ラムダ式が羨ましくて仕方ないんだが。
0838デフォルトの名無しさん
2008/03/17(月) 20:37:260839デフォルトの名無しさん
2008/03/17(月) 20:39:29FileSystemWatcherってありますよね?
あれ凄くイヴェントを取り逃がすような気がするんですけど皆さんどうですか?
使い方がおかしいんでしょうけど、どうおかしいのかすら判りません。
例えばDeletedイベントハンドラってPathで指定したディレクトリ内の
Filter指定したファイルが消されると発生するんですよね?
0840デフォルトの名無しさん
2008/03/17(月) 20:41:06おまけで式木に変換される機能がついたけど、普通に使う分には匿名デリゲートにしかならない。
今思えば匿名デリゲートの記法を delegate(...){...} にしたのが失敗で、
先にラムダ式を導入していたらこの記法は絶対導入しなかったって中の人も言ってるくらいなのに。
0841デフォルトの名無しさん
2008/03/17(月) 20:41:500842デフォルトの名無しさん
2008/03/17(月) 20:45:542.ラムダ式の便利さに気づく
3.ラムダ式は式木でも書けることに気づく
4.もっと複雑な式木を書きたくなる
5.某カッコだらけの言語の存在を知る
6.某カッコだらけの言語の奥深さを知る
7.某カッコだらけの言語で悟りを開く
0843デフォルトの名無しさん
2008/03/17(月) 20:50:17いいですか?
また、アドレスから値を得るにはどうすればいいですか?
0844デフォルトの名無しさん
2008/03/17(月) 20:55:07変数のエイリアスはつくれねえぞ
0845デフォルトの名無しさん
2008/03/17(月) 20:58:40質問しなおします。
ある変数Aのアドレスが分かっているとしたとき、アドレスから変数A
の値を取得するにはどうすればいいでしょうか?
0846デフォルトの名無しさん
2008/03/17(月) 20:59:40>>825
>>839
InternalBufferSizeを増やす。
0847デフォルトの名無しさん
2008/03/17(月) 21:25:22アドレスってどういう意味で言ってんの?
*(int*)address
まさかこういうことじゃないよね
0848デフォルトの名無しさん
2008/03/17(月) 21:27:32unsafeでぐぐれ
0849845
2008/03/17(月) 21:39:03アドバイスありがとうございます。
変数につけられたメモリ上での番号のことを言っています。
簡単なコードを示していただけませんか?
例えば、メモリアドレス1000の値を取得したり、代入する場合など。。。
お願いします。
0850デフォルトの名無しさん
2008/03/17(月) 21:39:20explorerでけすと、ごみ箱へのMoveだから見逃す、というオチじゃないの?
0851デフォルトの名無しさん
2008/03/17(月) 21:39:390852デフォルトの名無しさん
2008/03/17(月) 21:46:21int a = 123; int addr = (int)&a; int aValue = *(int*)addr;
こういうこと?
超危険なだけで何の意味もないからせめて普通にポインタ使えよ
0853デフォルトの名無しさん
2008/03/17(月) 21:57:220854845
2008/03/17(月) 22:02:57アドバイスありがとうございます。
示していただいたコードで、変数のアドレスを取得することができました。
しかし、アドレス1000に対しての代入?についてはまだ疑問が残ります。。。
849の繰り返しになりますが、例えばメモリアドレス1000に格納されている
データを取得するにはどうすればいいでしょうか?
また、メモリアドレス1000に値を格納するにはどうすればいいでしょうか?
0855デフォルトの名無しさん
2008/03/17(月) 22:10:11そんなことをする必要はないし
する必要があるならC#を使うはずがない
0856デフォルトの名無しさん
2008/03/17(月) 22:11:06実際にこんなことやろうとしても、
割り当てられていないメモリを読み書きしようとしたとして、
OSに止められるだけだからな。
int* p = (int*)10000;
int x = *p;
*p = 666;
int x = Marshal.ReadInt32((IntPtr)10000);
Marshal.WriteInt32((IntPtr)10000, 666);
0857デフォルトの名無しさん
2008/03/17(月) 22:13:370858デフォルトの名無しさん
2008/03/17(月) 22:16:570859デフォルトの名無しさん
2008/03/17(月) 22:18:320860デフォルトの名無しさん
2008/03/17(月) 22:25:080861デフォルトの名無しさん
2008/03/17(月) 23:56:57勘違いしてない?
ここはC♯(シーシャープ)という言語のスレだぞ。
もしかして学校の宿題なら、それは、CとかC++という言語じゃなかったか?
0863デフォルトの名無しさん
2008/03/18(火) 02:36:23覚えるのめんどくさいんだが・・・
0864デフォルトの名無しさん
2008/03/18(火) 02:40:27Cから来たら無意識にジャグの方を使う。
0865デフォルトの名無しさん
2008/03/18(火) 02:42:29・・・まじかよ、じゃあ素直に勉強するわ
�d
0866デフォルトの名無しさん
2008/03/18(火) 02:46:24宣言と要素アクセスのやり方だけ知ってりゃいいんじゃん
ジャグのほうは単なる配列を要素とする配列ってだけの話だし
無意識に使われるジャグ配列って「ジャグ」じゃなくね?
0867デフォルトの名無しさん
2008/03/18(火) 03:09:39//動的に配列を追加していくループ
for(...){
lst.Add(....);
}
int[][] jag = lst.ToArray();
格納される配列の要素数が動的に変化するような場合とかもあるし、
ジャグのが柔軟。
0868デフォルトの名無しさん
2008/03/18(火) 03:56:09ジャグじゃないとN次元配列が書けんし
0869デフォルトの名無しさん
2008/03/18(火) 04:30:050870デフォルトの名無しさん
2008/03/18(火) 06:30:030871デフォルトの名無しさん
2008/03/18(火) 07:46:450872デフォルトの名無しさん
2008/03/18(火) 09:16:17Sortメソッドも使えない
0873デフォルトの名無しさん
2008/03/18(火) 09:24:21初期化するときも使用するときも、機械的にいつも似たようなfor文で処理できるし。
>>871
すごく初耳。
0874デフォルトの名無しさん
2008/03/18(火) 09:50:02rectangular の方は a[i, j] → *(a + i *WIDTH + j)
jagged の方は a[i][j] → *(*(a + i) + j)
相当で、一見 rectangular の方が早そう(間接参照よりは掛け算の方が軽い)だけど、
1次元配列の参照は IL が専用命令持ってるけど、
多次元配列参照命令がない関係で jagged の方が早いって聞く。
jagged 配列の方が柔軟だけど、new しまくらないといけないのが面倒なときもあるのよね。
0875デフォルトの名無しさん
2008/03/18(火) 11:40:010876デフォルトの名無しさん
2008/03/18(火) 15:44:04private void MainForm_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
}
の中に記述してもイベントそれ自体が発生しないんですが・・・
0877デフォルトの名無しさん
2008/03/18(火) 16:07:500878デフォルトの名無しさん
2008/03/18(火) 16:08:47そのイベントハンドラはちゃんとイベントにバインドしてあるのか
0879デフォルトの名無しさん
2008/03/18(火) 16:23:400880デフォルトの名無しさん
2008/03/18(火) 16:56:20public string Hoge{ get{ return this.hoge; }}
こう書くと
public string getHoge{ return this.hoge; }
と書くのに比べて何が幸せなんだぜ?
0881デフォルトの名無しさん
2008/03/18(火) 17:12:21Console.WriteLine(getHoge());
あと,リフレクションとの相性
0882デフォルトの名無しさん
2008/03/18(火) 17:14:580883デフォルトの名無しさん
2008/03/18(火) 17:22:10…ヘジは1.0からこの辺のものを第一言語要素にする点こそ重要って
言ってた気がするがスルーされっぷりが可哀想というか
0884デフォルトの名無しさん
2008/03/18(火) 17:26:51括弧なしのgetHogeでHogeプロパティ作れと
プロパティとアスセサ(メソッド)の違いについてならそういう風に書くだろうし
0885デフォルトの名無しさん
2008/03/18(火) 17:35:12そもそも普通のスムーズスクロールはどうやるのでしょうか
0886デフォルトの名無しさん
2008/03/18(火) 17:40:07wavファイルにするにはどうすればいいでしょうか。
#include <iostream>
#include <math.h>
using namespace std;
const int rate=44100;
int p(double q, int f, int t)
{
const double pi=3.1415;
double x;
x=sin(2*pi*f/rate*q);
cout << int(x*127+128+0.4999);
cout << "\n";
if (f<t) p(q,f+1,t);
return 0;
}
int main(void)
{
p(440.0 , 0, rate);
return 0;
}
0887デフォルトの名無しさん
2008/03/18(火) 17:44:02c++スレかと思った・・忘れてください
0888デフォルトの名無しさん
2008/03/18(火) 19:03:44Font font = new Font(fontName, size);
g.DrawString(code, font, Brushes.White, 0, 0);
で、1文字描画します。
この時描画した文字の幅を求める手段を教えてください。
0889デフォルトの名無しさん
2008/03/18(火) 19:07:520890デフォルトの名無しさん
2008/03/18(火) 21:09:56MSDNにはTypeConverterのインスタンスは直接作らずにTypeDescriptorを使えと書いてあるけど
TypeDesctiptor.GetConverter(typeof(Color))だとColorConverterが返ってきてしまう
0891デフォルトの名無しさん
2008/03/18(火) 22:07:380892デフォルトの名無しさん
2008/03/18(火) 22:24:13>次に、ツールバーのカスタマイズにより、コンパイルしたアセンブリーをツールバーに登録します。
ってどういうこと?
ツールバーのユーザー設定?
コンパイルしたアセンブリーって項目があるってこと?
0893デフォルトの名無しさん
2008/03/18(火) 22:33:460894デフォルトの名無しさん
2008/03/19(水) 08:02:56とあるとき、Tの型をAのクラスの外から調べて使っていく便利な方法があったら教えてください。
リフレクションを使えばなんでもできますが、できれば使用したくないです。
C++ では
class A<T> { typedef T ElementType ; }
とできたので話は簡単だったんですが・・・
#VBのLinq to XMLが便利すぎ〜〜〜〜ぐはぁぁぁぁ
#ヘジたぁぁぁん
0895デフォルトの名無しさん
2008/03/19(水) 08:05:32何か勘違いしているのでしょうか?
DateTime dt = DateTime.Parse(dateTimePicker.Text);
dt.AddDays(1);
lvi.SubItems.Add(dt.ToShortDateString());
0896デフォルトの名無しさん
2008/03/19(水) 08:11:38なにがしたいのかわからんけど
class A<T>
{
public Type ElementType = typeof(T);
}
こんなんじゃだめなの?
0897デフォルトの名無しさん
2008/03/19(水) 08:11:49勘違いでーす
DateTime dt = DateTime.Parse(dateTimePicker.Text);
dt=dt.AddDays(1);
lvi.SubItems.Add(dt.ToShortDateString());
0898デフォルトの名無しさん
2008/03/19(水) 08:13:29それだと、
A.ElementType inst = new A.ElementType();
とかできなくて不便なんですよ。
0899デフォルトの名無しさん
2008/03/19(水) 08:19:26じゃあ
void Method<T>(A<T> a) where T : new(){
T item = new T();
}
こうじゃねえの
0900デフォルトの名無しさん
2008/03/19(水) 08:24:16A<T>にこんなメソッド追加すれば
public T CreateElement()
{
return new T();
}
0901デフォルトの名無しさん
2008/03/19(水) 08:27:08それもちょっとなんですよね、全部のメソッドについてやらないといけなくて、場当たり感が・・・
C#に移ってみたもののC++とは勝手が違って難しいです、逆にC#では意外とあっさりできる物なども多いのですが。
0902デフォルトの名無しさん
2008/03/19(水) 08:28:39ありがとうございます。
盲目でした・・・。
0903デフォルトの名無しさん
2008/03/19(水) 08:48:06なんで
DateTime dt = dateTimePicker.Value.Date.AddDays(1);
じゃだめなの?
0904デフォルトの名無しさん
2008/03/19(水) 08:51:200905デフォルトの名無しさん
2008/03/19(水) 09:10:16カスタムフォーマットとかで元のコード落ちたりしないだろうか
0906デフォルトの名無しさん
2008/03/19(水) 09:15:290907デフォルトの名無しさん
2008/03/19(水) 09:16:47だよね
使う側はTがなにか知ってるんだし
0908デフォルトの名無しさん
2008/03/19(水) 09:31:56それこそ、その関数なりクラスなりをジェネリックにすべきだと思うが
0909デフォルトの名無しさん
2008/03/19(水) 09:37:480910デフォルトの名無しさん
2008/03/19(水) 12:41:47統合失調なんじゃないのチミ
0911デフォルトの名無しさん
2008/03/19(水) 12:59:40因果関係が逆な気もするぞ。
そういう人間のことを馬鹿というのでは。
0912デフォルトの名無しさん
2008/03/19(水) 15:10:00http://pc11.2ch.net/test/read.cgi/tech/1203650042/294
294 名前:デフォルトの名無しさん[sage] 投稿日:2008/03/14(金) 20:29:48
ふーん偉そうに他人を「偉そうだ」と言うのは偉そうじゃないんだ。
本当馬鹿ってのはどうしていつでも自分自身の言葉を自分に適用できないんざんしょ不思議。
まあ基本であることに全然異議はないんだけど、その基本すら理解できない御仁がいらっしゃるから
「偉そうに」貴殿はまちがっておられるぞよ、と進言差し上げたしだいなんでございますがね。
345 名前:デフォルトの名無しさん[sage] 投稿日:2008/03/17(月) 21:08:14
多分「俺」に否定的な言葉を投げる奴はみんな「(また)お前」なんだよw
冗談抜きで最近こういう統合失調一歩手前って人間増えてる気がするね
またお前か。
ふらっとスレだけは荒らさないでくれよな。
0913デフォルトの名無しさん
2008/03/19(水) 15:38:200914デフォルトの名無しさん
2008/03/19(水) 16:04:070915デフォルトの名無しさん
2008/03/19(水) 19:03:12言ってるそばから自分棚上げかよw
本当馬鹿ってのはどうして自分自身の吐いてる言葉を自分に適用できんの?
それから「荒れて」いるのはスレじゃなくてお前さん自身の脆弱な心、でしょ?w
馬鹿で心が弱いお前さんの感情が刺激されること=スレが荒れること、ではないよ。
0916デフォルトの名無しさん
2008/03/19(水) 19:11:080917デフォルトの名無しさん
2008/03/20(木) 00:39:48サンプルコードが載ったページをご存じないですか?
いくつか類似のページはありますが(http://www.divakk.co.jp/aoyagi/csharp_tips_wbzone.html)、
旧.Net用でVS2005/2008では使用できませんでした。
ページを読み込む前にDLしたページキャッシュを読んで書き換えて無効化する方法も考えましたが、
読み込みをキャンセルさせる方法が分からず、汎用性もないため諦めました
0918デフォルトの名無しさん
2008/03/20(木) 03:00:45色々探してみたんだけど、どれも複雑で。。。
0919デフォルトの名無しさん
2008/03/20(木) 03:01:04WebBrowser.ScriptErrorsSuppressed = true;
0920デフォルトの名無しさん
2008/03/21(金) 01:15:310921デフォルトの名無しさん
2008/03/21(金) 01:18:370922デフォルトの名無しさん
2008/03/21(金) 01:29:420923デフォルトの名無しさん
2008/03/21(金) 08:32:490924デフォルトの名無しさん
2008/03/21(金) 09:06:52特定箇所のvalueを更新する方法は
ありますか?
ファイル丸ごと読み込んで書き出す方法しか
知らないので教えて下さい
0925デフォルトの名無しさん
2008/03/21(金) 10:06:39Visual BasicとVisual C#とVisual C++だったらVBが先だろ。
0926デフォルトの名無しさん
2008/03/21(金) 10:49:551) 一気に読み込んで、DOMを使って編集する。
2) XmlReaderで少しずつ読みながら、XmlWriterで書き出す。
0927デフォルトの名無しさん
2008/03/21(金) 14:02:14static System.Collections.Generic.IEnumerable<int> CreateInt100()
{
for (int i = 0; i < 100; ++i) yield return i;
}
private void button2_Click(object sender, EventArgs e)
{
System.Collections.Generic.IEnumerable<int> collection = CreateInt100();
foreach (var element in collection) System.Console.WriteLine(element);
}
上のメソッド CreateInt100() を毎回作るのは面倒くさいですし、名前空間を汚すので匿名メソッドにしてみようかと考えました。
private void button2_Click(object sender, EventArgs e)
{
System.Func<System.Collections.Generic.IEnumerable<int>> lanbda = () =>
{
for (int i = 0; i < 100; ++i) yield return i;
};
System.Collections.Generic.IEnumerable<int> collection = lanbda();
foreach (var element in collection) System.Console.WriteLine(element);
}
残念ながらエラーになってしまうのですが、何か良い方法をご存知の方がおられましたら教えてください。
0928デフォルトの名無しさん
2008/03/21(金) 14:08:540929デフォルトの名無しさん
2008/03/21(金) 14:23:33すまみせん、int のシーケンスは例であって、int のシーケンスを作りたい訳ではないです。
手際よく yield を含むコードを書き下したいのです。
0930デフォルトの名無しさん
2008/03/21(金) 14:25:270931デフォルトの名無しさん
2008/03/21(金) 14:32:03yield 便利だね、なんでもかんでもコレで書いてしまいたくなる衝動に駆られます。
0932デフォルトの名無しさん
2008/03/21(金) 14:33:500933デフォルトの名無しさん
2008/03/21(金) 14:36:430934デフォルトの名無しさん
2008/03/21(金) 14:53:32片っ端から書きまくって、Eulals , GetHashCode …とこれまた片っ端から書きまくって
比較対照数×比較系メソッド数分の条件判断を書くという、ちょっと間違えれば書き損じ出まくりです
yield を使って列挙する側は、列挙する側、比較する側は比較する側とバシッと分けて書いてみると…なかなか気持ちいいです。
0935デフォルトの名無しさん
2008/03/21(金) 14:58:46よくわかんない
コードで頼む
0936デフォルトの名無しさん
2008/03/21(金) 15:11:35クラス C の Equals GetHashCode のオーバーライドが、メンバーの変更によって変更しなくても済みやすくなっています。
using System.Collections.Generic;
using System.Linq;
public class C
{
public int Field1;
public int Field2;
public string Field3;
public override bool Equals(object obj)
{
C tmp = obj as C;
if (tmp == null) return false;
IEnumerable<object> x = this.CreateFieldEnumerable();
IEnumerable<object> y = tmp.CreateFieldEnumerable();
return x.SequenceEqual(y);
}
public override int GetHashCode()
{
return CreateFieldEnumerable().Sum((a0) => a0.GetHashCode());
}
IEnumerable<object> CreateFieldEnumerable()
{
yield return Field1;
yield return Field2;
yield return Field3;
}
};
0937デフォルトの名無しさん
2008/03/21(金) 15:23:32Char.IsLetter('あ'); の結果がtrueを返してくる。
ほかにいい方法ありますか?
0938デフォルトの名無しさん
2008/03/21(金) 15:34:09GetHashCode()に和を使うのはどうかと
0939デフォルトの名無しさん
2008/03/21(金) 15:35:08( ゚д゚)つ正規表現
0940デフォルトの名無しさん
2008/03/21(金) 15:36:150941デフォルトの名無しさん
2008/03/21(金) 15:36:35そんなの問題があるならテキトーに替えてくださいよ(汗
0942デフォルトの名無しさん
2008/03/21(金) 15:39:04「アルファベット」の定義は?
0943デフォルトの名無しさん
2008/03/21(金) 15:44:270944デフォルトの名無しさん
2008/03/21(金) 16:10:50どうもです。普通にa-zA-Zで比較して判定します。
それにしてもMSDNのあの説明では日本人は勘違いしますね。
MSは苦労したとは思いますが。
0945デフォルトの名無しさん
2008/03/21(金) 16:30:12英語のアルファベットはA〜Z
単にアルファベットと聞かれたらどちらか分からない。
0946デフォルトの名無しさん
2008/03/21(金) 16:37:49ANK=Alphabet Numeric Kanaって単語だってあるのに。
0947デフォルトの名無しさん
2008/03/21(金) 16:44:07MessageBox.Show(char.IsLetter('山').ToString());
0948デフォルトの名無しさん
2008/03/21(金) 16:57:23ぼくは一般的じゃないんですかそうでつか><
0949デフォルトの名無しさん
2008/03/21(金) 17:05:24私は >>946 とは別人ですよ。あなたは人より教養があるんだと思います。
0950デフォルトの名無しさん
2008/03/21(金) 17:30:00ヘブライ人も彼らの文字をアレフベートって呼んでるし、
そう考えると、ヘブライ文字の親類のアラビア文字もアルファベットだし、
0951デフォルトの名無しさん
2008/03/21(金) 17:57:47domとうい単語しらなかったです ありがとう
0952デフォルトの名無しさん
2008/03/21(金) 18:09:09昔と違って、アルファベットの概念が広がっているね
int 山 = 5 ;
とか、コンパイル通るし、UTF8 で便利になった反面混乱も多々あり。
http://ja.wikipedia.org/wiki/Unicode
あえてライブラリを使うなら、基本ラテン文字 (ASCII互換)、かつアルファベットを調べるとなると
Char.IsLetter('あ') && 'あ' <= 0x7f
アホ臭いから、直接文字コードを調べるのが良さそうな気がしますね。そしてせっかくの新機能があるので拡張してみた。
static public class CharExt {
public static bool IsBasicLatin( this char c) { return c <= 0x7f; }
}
class MyClass {
void func() {
bool isBasicLatin = 'A'.IsBasicLatin(); // (笑
System.Console.WriteLine(isBasicLatin);
}
}
0953デフォルトの名無しさん
2008/03/21(金) 22:52:21xsd.exe .net で検索してみな
0954デフォルトの名無しさん
2008/03/22(土) 12:04:31Xamlとか一切使わずに、フルにC#でコーディングしてみたんだけど、System.Drawing.Graphics + Pain イベントと比べて断然楽だね
Linqに引き続き、説明がさっぱり分らんのは相変わらずで、なんとかしてくれよマイクロソフト・・・
簡単説明サイトをだれか作ってくれないかな・・・自分で作れってかorz
0955デフォルトの名無しさん
2008/03/22(土) 12:08:410956デフォルトの名無しさん
2008/03/22(土) 13:32:490957デフォルトの名無しさん
2008/03/22(土) 14:29:50プログラマブルに動かしたければ、やはりコーディングするしかないよ
いやできなくは無いが、逆に面倒になるだけという意味で。
0958954
2008/03/22(土) 14:54:20つまらない処理にも関わらず、工数の取られる作業がプロパティーの設定とGrid親子構造の作り方一つで
簡単対処できるのには驚愕しています、最後に印刷処理を作りたいのですが、どうするんだ・・・
0959954
2008/03/22(土) 14:58:45さすがDirectX使っているだけの事はある、描画範囲外に大量にLineを配置しても全然速度低下がない。
これが System.Drawing.Graphics ベースだと、Pain 処理はややこしくなるし
手抜きして全部描画しようものならガックンガックンになるし。
0960デフォルトの名無しさん
2008/03/22(土) 18:42:46探してみても、本とか講座とかしか出てこないんだがー
0961デフォルトの名無しさん
2008/03/22(土) 18:44:430962デフォルトの名無しさん
2008/03/22(土) 18:49:35プログラミング自体が初めてだからさ、一応勉強しとかないとと
0963デフォルトの名無しさん
2008/03/22(土) 18:53:200964デフォルトの名無しさん
2008/03/22(土) 18:54:54Pain処理ってある意味間違ってないよなw
>>962
unixコマンドのリファレンス引っ張ってきて実装すれば
catとかtelnetとか
0965デフォルトの名無しさん
2008/03/22(土) 18:58:08そんなもんですか、やっぱ基本的にGUI弄るってことかな
ありがとうございます^
>>964
ググってみます^
0966デフォルトの名無しさん
2008/03/22(土) 18:58:10初めてなら逆に手を出す必要はないと思うんだが。
0967デフォルトの名無しさん
2008/03/22(土) 19:02:13いやー、やっぱ基本的なことは知っといた方が良いのかなと
0968デフォルトの名無しさん
2008/03/22(土) 19:02:51本当にやりたいのはその先だろ?
>>966
"言語の"勉強にはCUIのほうがいいと思う
0969デフォルトの名無しさん
2008/03/22(土) 19:02:580970デフォルトの名無しさん
2008/03/22(土) 19:14:39どうもです、頑張ります^
0971デフォルトの名無しさん
2008/03/22(土) 19:16:01GUI まで教え始めるとページ数多くなるからな。
0972デフォルトの名無しさん
2008/03/22(土) 19:36:12入出力がまどろっこしいから言語仕様の解説には不向き
0973デフォルトの名無しさん
2008/03/22(土) 20:11:32C#だと、それほどでも無いだろ、Windowクラス生成して以上終了だし。
Win32使うと、激しいことになるけど
初代VS.NETには、CUIベースのわかりやすいサンプルが多かったんですけどね。
クイックスタートのサンプルもう一度復活させてもいいと思うんだけど・・・
0974デフォルトの名無しさん
2008/03/22(土) 20:13:39だからな。
C# は GUI に力要れてるから問題ない。
0975デフォルトの名無しさん
2008/03/22(土) 20:20:50その処理結果を簡単に出力出来るという点では、
コンソールの方が簡単でいいよね。
GUIだと、そもそものイベントドリブンの仕組みから
色んなコントロールの説明とかしなくちゃならないから。
いきなり、言語の学習の次のステップからになってしまう。
0976デフォルトの名無しさん
2008/03/22(土) 20:21:320977デフォルトの名無しさん
2008/03/22(土) 20:24:32一番手軽なのがコンソールっていうだけ
使う話とはまた別だ
0978デフォルトの名無しさん
2008/03/22(土) 20:39:270979デフォルトの名無しさん
2008/03/22(土) 20:41:44WPFになるとXAML覚える方が大変なんじゃないか?w
0980デフォルトの名無しさん
2008/03/22(土) 20:59:23C#の場合それは問題多いだろ、開発環境が無ければ何故その機能があるのか、そうなっているのか理解できないものが大量にあるし。
たとえば、カスタムアトリビュートしかり、深いネームスペースしかりで。
0981デフォルトの名無しさん
2008/03/22(土) 21:57:09その反論の意味が全く分からないんだが。
では、GUIの方が入門者にとって、C♯"言語"の学習をし易いのか?
0982デフォルトの名無しさん
2008/03/22(土) 22:14:14だろ、そこから使用方法と説明が必要だ。
0983デフォルトの名無しさん
2008/03/22(土) 22:18:29そんなオレは、もうロートル入りだorz
0984デフォルトの名無しさん
2008/03/22(土) 22:24:29今の初心者はcmd.exeだからな
0985デフォルトの名無しさん
2008/03/22(土) 22:59:380986デフォルトの名無しさん
2008/03/22(土) 23:06:46プログラミングC#―C#2.0/.NET2.0/Visual Studio2005対応(オライリー)
読むならどっち?
0987デフォルトの名無しさん
2008/03/22(土) 23:08:20Googleブック検索でないよう少し見てみたらよかったし「初めてのC#」もよかったから。
0988デフォルトの名無しさん
2008/03/22(土) 23:10:30もう何でもpublicで作ってるしその内問題に遭ったりするんだろうか
0989デフォルトの名無しさん
2008/03/22(土) 23:16:40FormベースでXML使ってコントロールとか定義できる物ってことなの?
0990954
2008/03/22(土) 23:33:53使い始めて間もないのですが・・・簡単に説明すると
フラッシュみたいな物、htmlでいえば、imagタグとか適当にホームページ作成ツールで作って
それに名前を付けておいて、サイズや位置情報を、プログラム側からいじくれるという仕掛け。
各種タグで表示するオブジェクトには名前がつけられて、
その名前.アトリビュート名 = 適当な値
とすると、値が書き換えられて、表示が変化します。
Gridというタグがあって、これは各種オブジェクトを格納(子タグが作れる)、ここに自分で生成したオブジェクトを追加する事もできます。
基本的な要素には、LineとかPolyLineとか、DirectXで良く見られるプリミティブ要素のようなものがあって、ページ中に線やポリゴンなども書けます。
これに座標変換行列を効果させて、回転・拡大縮小・平行移動・平行四辺形的な変形といった事ができます。
最終的にはDirectXで描画されるらしく異様に高速。
大半はデザイナでデザインしておいて、必要な所だけをコードしてしまえます。
Paintイベントで再描画のコードは書く必要なしです。
0991954
2008/03/22(土) 23:41:120992デフォルトの名無しさん
2008/03/22(土) 23:47:130993デフォルトの名無しさん
2008/03/23(日) 06:49:36プロパティウインドウもまだ作りかけみたいな感じ。
VS2008には間に合わないから、「XAMLを全部自分で記述すれば作れるから、これでGo」みたいな雰囲気。
次のVSでまともに使えるようになるのかな。
まあ面倒くさいのはXAMLの記述だけだから、ベースだけ作ってあとはC#で書くなら問題ないんだけど。
0994デフォルトの名無しさん
2008/03/23(日) 09:49:09>もう何でもpublicで作ってるし
それは解説書を読んでないとか以前の問題
0995デフォルトの名無しさん
2008/03/23(日) 10:07:37publicでも何の問題もないけどなwww
0996デフォルトの名無しさん
2008/03/23(日) 10:25:30インテリセンスで全部出てくるから面倒くさい
0997デフォルトの名無しさん
2008/03/23(日) 10:48:21ツリービューのある項目をダブルクリックした際、編集できるように(エクスプローラーでF2を押した感じ)したいのですが検討が付きません。
0998デフォルトの名無しさん
2008/03/23(日) 10:48:360999デフォルトの名無しさん
2008/03/23(日) 10:53:33つ http://www.atmarkit.co.jp/fdotnet/dotnettips/229parentkeyproc/parentkeyproc.html
1000デフォルトの名無しさん
2008/03/23(日) 10:57:33LabelEditをtrueにするだけで、選択ノードをクリックすれば勝手に編集モードに入るみたいだけど
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。