08/01/15 06:24:53
>>157
アンマネージリソースを扱うなら、必ず適切なタイミングで
Disposeを呼ぶような設計しなきゃ駄目だよ。
細かい話が多いので割愛するけど、
ファイナライザに頼るスタイルは色々問題があるのヨ。
ぶっちゃけマネージドな世界では、例えばC++において参照カウンタ式スマートポインタで
自動化できてたリソース管理の一部は使えなくなると思っていた方が良いかと。
160:デフォルトの名無しさん
08/01/15 06:30:02
VBの参考書で勉強しているのですが
Label1.Text = DirectCast(Me.PreviousPage.FindControl( _
"TextBox1"), TextBox).Text
をC#で書くにはどうしたらいいですか?
161:デフォルトの名無しさん
08/01/15 07:42:54
自己解決しましたm(_ _)m
162:デフォルトの名無しさん
08/01/15 08:30:22
>>158
ペイントなどに良くあるやり直し・元に戻す操作です。
>>159
やっぱり自前でDisposeしなきゃだめなんですね…
ちょっと基本設計見直してきます orz
163:デフォルトの名無しさん
08/01/15 14:07:03
Form1とForm2を定義して
Form1内で
Form2 f2 = new Form2();
f2.ShowDialog();
でForm2を呼び出した後にf2内のbutton_Clickイベント処理内でf2の中のテキストボックスや、コンボボックスの値をForm1で取得したいのですが
どうしたらよいでしょうか?
164:デフォルトの名無しさん
08/01/15 15:56:14
Form2がイベント公開してf2内のbutton_Clickイベントハンドラ内でfire
イベントデリゲート自分で定義してテキストやコンボボックスの値をEventArgsにつっこむか
またはプロパティで公開しとく
165:デフォルトの名無しさん
08/01/15 16:31:40
fireってなんでしょうか?ぐぐってもよくわかんないです・・・
166:デフォルトの名無しさん
08/01/15 16:39:14
イベントを起こす、ってことじゃね?
//Form2.cs
public event EventHandler HogeEvent;
private void button_Click( object sender, EventArgs e )
{
if( this.HogeEvent != nul )
this.HogeEvent( this, EventArgs.Empty ); // ← ココ
}
-------------------------------------------
//Form1.cs
...
Form2 f2 = new Form2();
f2.HogeEvent += new EventHandler( f2_HogeEvent );
...
private void f2_HogeEvent( object sender, EventArgs e )
{
//ココが呼ばれる
}
167:デフォルトの名無しさん
08/01/15 18:47:13
>>f2.HogeEvent += new EventHandler( f2_HogeEvent );
これは何をしているのでしょうか?
form1では
private void button_add_Click(object sender, EventArgs e)
{
Addition add = new Addition();
add.ShowDialog();
}
でform2(Addition)を呼び出し、手動で、form2内のテキストエリアやコンボボックスに入力してOKボタンを押す
そのとき、したのイベントに遷移して、このメソッド内で、form1内のデータグリッドを更新できないか?ということなんですが。
private void button_OK_Click(object sender, EventArgs e)
{
}
168:デフォルトの名無しさん
08/01/15 18:52:38
(´・ω・`)しらんがな
169:デフォルトの名無しさん
08/01/15 19:03:28
恥をしのんで質問いたします。
初めてコンソールアプリを作ろうとしているのですが、
エクスプローラーからコマンドプロンプトにディレクトリパスをD&Dで使わせようと思っています。
そのとき、長いフォルダ名を含む場合、絶対パスを表す文字列がダブルクォーテーションで囲まれてしまいます。
そのため、"入力文字列補正処理"を入れるようにしましたが、なんだかスッキリしません。
皆様どうやってやってますか?
以下にソースを書きます。宜しくお願いいたします。
170:169
08/01/15 19:04:04
static void Main(string[] args)
{
string[] str; //検証用変数
string Input, Output; //フォルダパス
Console.WriteLine("入力フォルダパスを入力して下さい");
//入力文字列補正
str = Console.ReadLine().Split(new char[] {'\"'});
if (str.Length == 3) { Input = str[1]; }
else { Input = str[0]; }
Console.WriteLine("出力フォルダパスを入力して下さい");
//入力文字列補正
str = Console.ReadLine().Split(new char[] { '\"' });
if (str.Length == 3) { Output = str[1]; }
else { Output = str[0]; }
if (Directory.Exists(Input) & Directory.Exists(Output))
{
Console.WriteLine("valid");
Console.ReadLine();
}
else
{
Console.WriteLine("invalid");
Console.ReadLine();
}
}
171:デフォルトの名無しさん
08/01/15 19:07:37
>>167
form2でセットするんじゃなくて、form2はセットさせたい項目をpublicなプロパティで返すようにする
form1でDialogResultをチェックしてform2のプロパティからセットするのが正解
172:デフォルトの名無しさん
08/01/15 19:07:40
Trim(char[])
173:デフォルトの名無しさん
08/01/15 19:18:45
>>167
個人で作ってるだけでプロパティ作るのが面倒くさかったら、
form2の該当の入力フィールド(textBoxとか)のModifiersをPublicにするのも手だけど
174:デフォルトの名無しさん
08/01/15 19:22:07
>>171
丁寧にありがとうございます。
>>セットさせたい項目をpublicなプロパティで返すようにする
というのがいまいちわかりません。
ソース載せます。
//form1(Main)
public partial class Main : Form
{
public Main(){
InitializeComponent();
}
private void button_add_Click(object sender, EventArgs e) {
Addition add = new Addition();
add.ShowDialog();
}
}
//form2(Additon)
public partial class Addition : Form
{
public Addition() {
InitializeComponent();
}
private void button_OK_Click(object sender, EventArgs e) {
//MessageBox.Show(textBox_name.Text+"\n"+ comboBox1.Text+"\n"+textBox1.Text);
}
}
175:デフォルトの名無しさん
08/01/15 19:24:50
public partial class Addition : Form
{
public string 結果 { return textBox_name.Text+"\n"+ comboBox1.Text+"\n"+textBox1.Text; }
}
176:デフォルトの名無しさん
08/01/15 19:24:57
>>173
publicにしたら、Form1.csの補完機能からform2のコントロールが見えました!
ありがとうございます!
177:175
08/01/15 19:25:16
ミス
public string 結果 { get { return textBox_name.Text+"\n"+ comboBox1.Text+"\n"+textBox1.Text; } }
178:デフォルトの名無しさん
08/01/15 19:37:02
はじめまして。
まことに簡単な質問で恐縮なのですが、DataGridViewのculomnsのプロパティで
オートインクリメントをしたい列があるのですが、どうすればよいでしょうか?
よろしくお願いいたします。
179:デフォルトの名無しさん
08/01/15 20:33:34
>>169
な、何を言ってるのかね?
180:デフォルトの名無しさん
08/01/15 20:53:51
>>169
ただファイルを開くとかくらいなら、
ダブルクォーテーションがあっても問題なかった気がするけど。
181:デフォルトの名無しさん
08/01/16 10:43:24
>>169
dos窓でドロップやったことないのか?
スペース含むパス取り込むためにデフォルトで""囲みになるのが普通だよー
182:デフォルトの名無しさん
08/01/16 11:16:56
問題あるならTrimでもすりゃいいんでは?
183:デフォルトの名無しさん
08/01/16 11:40:31
C#でExcelを操作しようと調べているんですが、断片的な
情報しか見つける事ができませんでした。
何か参考になる本やサイトなど知っていたら紹介して貰えませんか?
184:デフォルトの名無しさん
08/01/16 12:33:03
COM Excel C# でググるとか
185:169
08/01/16 13:21:32
>>180
そうだと思ったんですが、パスを変数に格納した後にフォルダの存在確認を>>170の下の方で
行っているんですが、""つきのパスだと存在しないよって言われちゃうんですよ。
>>182
調べてみます
186:デフォルトの名無しさん
08/01/16 13:51:48
つか、D&Dできるの始めて知ったぜ。いつもいちいちコピペしてた。
187:デフォルトの名無しさん
08/01/16 14:00:08
Vistaでできないな、、、XPをリモートデスクトップで出してみたらこっちではD&Dできるが・・・
188:デフォルトの名無しさん
08/01/16 14:38:39
VS2005でC#の勉強をしています。
質問なのですが、テキストファイルに
1 200
2 356
3 1250
4 870
5 692
といったような行列があり、それをC#のプログラムで読み込み
1000以上の値を持つものだけピックアップすることはできるでしょうか。
ピックアップした後に計算もしたいので、変数にその値を代入したいのです。
よろしくお願いします。
189:デフォルトの名無しさん
08/01/16 15:00:03
StreamReaderとかで開いて
ReadLineして
パースすればいい
190:デフォルトの名無しさん
08/01/16 15:01:21
var hoge =
from line in File.ReadAllLines(@"...")
from str in line.Split(' ')
let value = Int32.Parse(str)
where value >= 1000
select value;
191:デフォルトの名無しさん
08/01/16 15:05:51
VS2005や言うてるやろスカタン
192:169
08/01/16 15:46:16
>>188
StreamReader sr = new StreamReader(filepath);
List<int[]> list = new List<int[]>();
do
{
string str = sr.ReadLine();
if (str != "")
{
string[] ary = str.Split(new char[] { ' ' });
int n1 = int.Parse(ary[0]);
int n2 = int.Parse(ary[1]);
if (n2 > 999)
{
list.Add(new int[] { n1, n2 });
}
}
}
while (sr.Peek() != -1);
193:169
08/01/16 15:51:20
どうやら手動で削除するほかなさそうですね。
splitを使って面倒なことをしてましたが、
Trim(もしくはReplaceでも可)を使って少しコードがすっきりしました。
ありがとうございました。
Console.WriteLine("入力フォルダパスを入力して下さい");
Input = Console.ReadLine().Trim(new char[] { '\"' });
Console.WriteLine("出力フォルダパスを入力して下さい");
Output = Console.ReadLine().Trim(new char[] { '\"' });
if (Directory.Exists(Input) & Directory.Exists(Output))
{
Console.WriteLine("valid");
Console.ReadLine();
}
else
{
Console.WriteLine("入力したフォルダパスが不正です");
Console.ReadLine();
}
194:デフォルトの名無しさん
08/01/16 21:00:02
オマイラそれ絶対なんか間違ってるだろwww
195:デフォルトの名無しさん
08/01/16 21:20:34
すみません、教えてください。
VS2005 .netでプログラムしていますが、HOMEPATHの取得法はあるのでしょうか?
もしあるならば方法をご教授ください。
よろしくお願いします
196:デフォルトの名無しさん
08/01/16 21:23:02
994 名前:デフォルトの名無しさん[sage] 投稿日:2008/01/11(金) 12:14:20
Environment.GetEnvironmentVariable( "HOMEPATH" );
197:デフォルトの名無しさん
08/01/16 21:27:22
\r\n と \n の差がわからないんだが
どっちも改行するわけだが動違うの?
198:デフォルトの名無しさん
08/01/16 21:31:50
>>197
サイズが違う。
199:デフォルトの名無しさん
08/01/16 21:38:14
おおまかにはOSによって改行コードが違う。
Unix:\n
Windows:\r\n
Mac:\r
ってか基本だと思うけど。
200:デフォルトの名無しさん
08/01/16 21:40:24
>>199
トンクス
Cとかだと\nが改行だから\r\nって何かと思ってたんだが
Windowsなら\r\nでいいってことでつね
201:デフォルトの名無しさん
08/01/16 21:46:35
>>200
Cは、テキストモードだと、\nは\r\nに変換される。(winでは)
202:デフォルトの名無しさん
08/01/16 21:52:10
>>196
ありがとうございました。無事解決です
203:デフォルトの名無しさん
08/01/16 22:09:14
>>200
どうでもいい話ではあるんだが意味的に言うとWinがたぶん正しい
なのでhttpとかも\r\n。この辺はCRとLFを調べてみれ
204:デフォルトの名無しさん
08/01/16 22:28:13
むかしタイプライターというものがあってのう
205:デフォルトの名無しさん
08/01/16 22:57:06
LFだけってのはおかしいと思う。
206:デフォルトの名無しさん
08/01/16 23:00:21
それ言ったらCRだけなのもおかしい
207:デフォルトの名無しさん
08/01/16 23:16:31
CRってキャリッジリターンなのは聞いたことあるけど、LFってなんて言うの?
ラインフィニッシュ?
208:デフォルトの名無しさん
08/01/16 23:20:38
ラインフィード
209:デフォルトの名無しさん
08/01/16 23:21:27
CR=キャリッジリターン=キャリッジ(紙を左右に動かす装置)を初期位置に戻すこと。
LF=ラインフィード=紙送り。
210:デフォルトの名無しさん
08/01/17 00:53:22
C#相談室から誘導されてきました。
たとえば、こういうコードがあったとします。
if (Result == null) {
transaction.Rollback();
MessageBox.Show("エラー0です。");
return false;
}
if ((int)Result == 1) {
transaction.Rollback();
MessageBox.Show("エラー1です。");
return false;
}
if ((int)Result == 2) {
transaction.Rollback();
MessageBox.Show("エラー2です。");
return false;
}
transaction.Commit();
return true;
これをスッキリ表記するのに何かいい手段はないですかねぇ…。
throwで例外起こしてtry~catchってのもスッキリしなくて…
211:デフォルトの名無しさん
08/01/17 01:08:54
C#でLispみたいなカッコイイプログラミングするにはどうすればいいの?
212:デフォルトの名無しさん
08/01/17 01:13:40
F#をダウンロードします
213:デフォルトの名無しさん
08/01/17 01:20:46
そして卵を御飯にかけます
214:デフォルトの名無しさん
08/01/17 01:27:18
>>210
result = (Result == null) ? 0 : (int)Result;
switch(result){
case 0:
case 1:
case 2:
transaction.Rollback();
string temp = "エラー" + result + "です。";
MessageBox.Show(temp);
return false;
break;
default:
transaction.Commit();
return true;
break;
}
215:デフォルトの名無しさん
08/01/17 01:39:34
xmlファイルをphpのsimple xmlみたいに簡単に扱える方法はないのでしょうか?
216:デフォルトの名無しさん
08/01/17 09:07:05
C#のswitchのcaseは絶対に下に降りられないと思ってたが、何も書かなければ並べられるのか。
しかし不必要なbreakを強要されるのが面倒くさいな。
Cの文法に慣れてる人がバグを作らないようにってことなのかな。
217:デフォルトの名無しさん
08/01/17 09:10:59
returnの下のbreakいらんだろ
218:デフォルトの名無しさん
08/01/17 09:22:09
いらん以前に到達できないコードな警告出たりしないかそれ確か
219:デフォルトの名無しさん
08/01/17 13:16:16
構造体のマーシャリングについて質問いいっすか?
自分よく分かってないんですが
typedef struct tagDESKBANDINFO {
DWORD dwMask;
POINTL ptMinSize;
POINTL ptMaxSize;
POINTL ptIntegral;
POINTL ptActual;
WCHAR wszTitle[256];
DWORD dwModeFlags;
COLORREF crBkgnd;
} DESKBANDINFO;
の WCHAR wszTitle[256];って
[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Unicode)]
にした上で
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=256)]
string wszTitle;
じゃないんですか?
URLリンク(www.pinvoke.net)
とかだと255になってるんですがどっちが正しいんでしょう?
220:デフォルトの名無しさん
08/01/17 13:16:55
試してみたがbreakいらんな
221:デフォルトの名無しさん
08/01/17 13:20:25
null終端とやらの関係かなとか思ったんですが
URLリンク(msdn2.microsoft.com)(VS.80).aspx
文字列のマーシャリングだと
TCHAR szCSDVersion[ 128 ];
↓
[ MarshalAs( UnmanagedType.ByValTStr, SizeConst=128 )]
String versionString;
になってるしワケワカリマセン
222:デフォルトの名無しさん
08/01/17 13:20:51
>>219
256であってる
223:219
08/01/17 13:25:09
>>222
ありがとうございます。
まじすか。
PInvoke.netのまま使ってると2バイトずつ上にずれてるってことですか?
224:219
08/01/17 13:30:11
ありゃMarshal.SizeOfを見たらどっちも同じ
さらにワケワカメ
アラインとかPackとかのせいですか?
ということは実害なし?
225:デフォルトの名無しさん
08/01/17 18:06:12
GTKについてわからないところがあるのですが、詳しい方いらっしゃいますか?
226:デフォルトの名無しさん
08/01/17 18:08:57
>>225
C#でGTKといったらMono?
Monoスレに行かないといないかもしれない。
227:デフォルトの名無しさん
08/01/17 18:11:31
そうですか…行ってみます。
すみません、ありがとうございました。
228:デフォルトの名無しさん
08/01/18 01:31:53
VC#2008関連の書籍って出ないの?
229:210
08/01/18 02:17:47
>214
ありがとうございます。
これで試してみます。
230:デフォルトの名無しさん
08/01/18 03:32:28
C#でxmlファイルをphpのsimple xmlみたいに簡単に扱える方法はないのでしょうか?
231:デフォルトの名無しさん
08/01/18 03:46:58
visual studio 2005を使ってます。
pictureboxに表示する画像のリソースを指定するときは
this***.Image = Properties.Resources.abc;
のようにしますが(というかVSが勝手にやってくれますが)
これを文字列型の変数を使ってやることはできないでしょうか?
string TMP;
TMP = "abc";
として5行目と同じように指定したいのです。
232:デフォルトの名無しさん
08/01/18 06:06:54
リフレクション使えばできると思うが、やるほどの価値はないと思う。
233:デフォルトの名無しさん
08/01/18 07:02:54
ResourceManager.GetObject使えばできるけど厳密な型指定できないよ
234:デフォルトの名無しさん
08/01/18 07:27:36
何をしたいのかを書けば、もっといい解決法があるかもよ
235:デフォルトの名無しさん
08/01/18 09:13:14
>>232
>>234
リソース名が連続した英数字なので、for文で数十の文字列の配列を作ったんですが、それをリソース名の指定に使う方法が分からなくて・・・
手動でやるよりはるかに効率的だと思うので、できればさわりだけでも簡単に教えてもらえればと
>>233
では、結局出来ないということになるんでしょうか・・・?
236:デフォルトの名無しさん
08/01/18 09:21:16
Properties.Resources.abc;の実装がどうなってるかみなよ。
237:デフォルトの名無しさん
08/01/18 10:18:33
>>230
XLinqでも使ってみれば
238:188
08/01/18 11:19:39
遅くなりましたが無事解決しました!
ありがとうございました。
239:デフォルトの名無しさん
08/01/18 15:01:23
byte[] b1 = new byte[] {1,2,3,4};
byte[] b2 = new byte[] {1,2,3,4};
があったとして、2つの配列の内容が全て等しいか簡単に調べる方法ってないですか?
b1 == b2;
も
b1.Equals(b2);
もfalseになります(´・ω・)
やっぱいちいちforeachで回さないとダメですか?
240:デフォルトの名無しさん
08/01/18 15:04:53
うむ
Array.Equals は object.Equals と変わらんからな
241:デフォルトの名無しさん
08/01/18 15:06:27
ぶ、C# 配列 比較 で検索したらすぐ見つかりました。
出来ないみたいですねorz
お騒がせしました。
242:デフォルトの名無しさん
08/01/18 15:09:45
継承クラスで共通のメソッド実行時
親クラスで共通の処理をさせたいのですがどうすればいいでしょうか
うまく説明できないんですがポリモーフィズム的なメソッドの共通処理を
継承クラスでは意識せずに親で処理させたいのですが・・・
243:デフォルトの名無しさん
08/01/18 15:24:50
//親
virtual void Hoge()
{
...
}
//子
override void Hoge()
{
...
base.Hoge();
}
じゃあかんのん?
244:デフォルトの名無しさん
08/01/18 15:27:51
>>243
やっぱりそうなりますかね
base.Hoge()の処理は必ずして欲しいのに
base.Hoge();を付け忘れちゃったりするものですから
245:デフォルトの名無しさん
08/01/18 16:21:12
Hoge は virtual じゃなくして、HogeOverridable を virtual にして
Hoge のなかで HogeOverridable を呼ぶ
ただし派生クラスで基底クラスの処理の呼び出す位置を変更できないデメリットもある
246:231
08/01/18 19:49:57
>>231ですが
URLリンク(www.atmarkit.co.jp)
を参考に
Assembly thisExe = Assembly.GetExecutingAssembly();
ResourceManager TMPres = new ResourceManager(
"***.Properties.Resources", thisExe);
xxx = (Image)TMPres.GetObject("abc");
とやったらできました。
247:デフォルトの名無しさん
08/01/18 20:10:42
Image img = (Image)Properties.Resources.ResourceManager.GetObject( "hoge" );
248:デフォルトの名無しさん
08/01/18 23:19:52
VS2008を使っていますが、
FormのFormClosingイベントを捕らえて
フォームを閉じることを中止するにはどうすればいいのでしょうか?
以下のように書いてもだめでした。
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
DialogResult result = MessageBox.Show("変更を保存しますか?", "確認",
MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
this.menuSaveProject_Click(sender, e);
}
else if (result == DialogResult.Cancel)
{
return; // ←これ
}
}
よろしくお願いいたします。
249:デフォルトの名無しさん
08/01/18 23:26:03
引数調べれ
250:デフォルトの名無しさん
08/01/18 23:28:22
e.Cansel = true;
とやればいいようですね(´・ω・`)
今までeなんて無視してました
ありがとうございました
251:デフォルトの名無しさん
08/01/18 23:29:03
ていうかイベントの解説に書いてるよな
252:デフォルトの名無しさん
08/01/19 00:16:31
IPAddress[] addrs;
があったとして、
この中から特定のIPの項目だけ削除ってどうすればいいんでしょうか。
InteliSenseで見てると
addrs.Except();
とかそれっぽいのはあるんですが、いまいち使い方がわかりません・・・
253:デフォルトの名無しさん
08/01/19 00:22:22
配列は要素の削除とかできないので作り直し
Array.FindAll でもいける
254:252
08/01/19 01:08:38
>>253
ありがとうございます。やっぱり作り直ししかないんですね(´・ω・)
でもFindAllのおかげでさっくりいきました。
ありがとうございました。
255:デフォルトの名無しさん
08/01/19 01:23:46
List<IPAddress>でいけー
256:デフォルトの名無しさん
08/01/19 01:24:22
>>254
List<>つかおうぜ
257:デフォルトの名無しさん
08/01/19 01:32:56
Listって要素の削除は向いてないんじゃない?
258:デフォルトの名無しさん
08/01/19 01:43:53
ほえ?
259:デフォルトの名無しさん
08/01/19 01:45:39
>>257
260:デフォルトの名無しさん
08/01/19 01:47:58
>>257
( ^ω^)・・・
261:デフォルトの名無しさん
08/01/19 02:05:44
(^ω^;)⊃ アウアウ!!
⊂ミ⊃ )
/ ヽ
262:デフォルトの名無しさん
08/01/19 02:47:03
またRemoveAll()の流れなのか・・・
263:デフォルトの名無しさん
08/01/19 05:04:38
末尾以外の削除は遅いと思うんだけど、大丈夫なわけ?
264:デフォルトの名無しさん
08/01/19 05:08:48
>>263
実装に因る
てか少なくとも配列を使うのよりは高性能に作られているとうれしい(ビクンビクン
265:デフォルトの名無しさん
08/01/19 05:10:29
>>264
実装見ろよ
266:デフォルトの名無しさん
08/01/19 05:55:24
要素の削除と挿入をやるならLinkedListでしょ?
ランダムアクセスできないけど。
267:デフォルトの名無しさん
08/01/19 06:37:57
>>266
> ランダムアクセスできないけど。
それが答えだ。
268:デフォルトの名無しさん
08/01/19 09:28:45
それは削除にむいてないんじゃなくて、
ランダムアクセスにむいてないだけ。
269:デフォルトの名無しさん
08/01/19 09:57:04
ある時点のList<T>の内容を配列か何かに保存しておき、その内容に戻すということをしたいのですが、
インスタンスを変えたくない場合は、Clearして一つずつAddし直すしかないのでしょうか?
270:デフォルトの名無しさん
08/01/19 09:58:58
要するに、コストの問題だ。
データを参照するより削除と挿入の方が多いならLinkedList だろうし、
頭からforeachしたりインデクスでアクセスする必要があるならList。
目的に応じて使い分ければ済むという当たり前のことだろ。
271:269
08/01/19 10:02:53
>>269
AddRangeってのが目に入っていませんでした。
ClearしてAddRangeが正解でしょうか。
272:デフォルトの名無しさん
08/01/19 10:14:14
>>268
ahosugi
273:252
08/01/19 10:40:42
これは・・・荒らしちゃったかも(・ω・`)
なんかごめんなさいです。
配列っていろいろ考えとかないといけないんですね。要素もすくないし、参照より削除や挿入が多いと思うんで、LinkList使ってみようかなと思います。ググってみます。ありがとうございました。
274:252
08/01/19 10:43:27
LinkedListですね、すいません(汗
275:デフォルトの名無しさん
08/01/19 14:51:22
>>270
そこでB*木とかRB木とかですよ
276:デフォルトの名無しさん
08/01/19 14:56:47
HashSetが合いそうだよなあと確かに話を聞いていて思ったが
要素数少なそうとも思ったのでむしろListでいい気もしたので
言わなかった
277:デフォルトの名無しさん
08/01/19 15:14:25
>>245
すみませんあれからいろいろやってみたのですが
class kitei
{
public void Hoge()
{
基底の処理;
派生Hoge呼び出し;
}
}
class hasei : kitei {
public virtual void Hoge()
{
派生の処理;
}
}
ということ感じになるのでしょうか
基底からの派生hogeのやり方がわからず詰まってしまいました
278:デフォルトの名無しさん
08/01/19 15:18:07
基底にvirtualなメソッドを一つ増やせ
279:デフォルトの名無しさん
08/01/19 15:29:27
>>278
共通でない処理を切り分けてvirtualメソッドを作って
基底で
public void Hoge()
{
基底の処理;
HogeSub();
}
public virtual void HogeSub()
{
}
という風にせよということでしょうか。
メソッド一つで自動的に裏で共通処理できたらいいなーと思ったんですが
使用者が何をするのか明示的に指示するのが正解か
280:デフォルトの名無しさん
08/01/19 15:37:21
>>279
>メソッド一つで自動的に裏で共通処理できたらいいなー
良くないだろ怖いよそんなのw
っていうか、チミは普通に継承の意味が分かってないだけとちゃうんかと
281:デフォルトの名無しさん
08/01/19 15:44:55
>>280
確かにそのとおりなんですよね…
派生を多人数が使うときにちゃんと規定どおりに使ってくれない場合があるもんで
もう強制自動処理にならんかなーと思った次第です…
282:デフォルトの名無しさん
08/01/19 15:57:57
>>281
テンプレートメソッド的な工夫ではダメなの?
つまりテンプレートメソッドから呼び出されるメソッドの方をabstractなりvirtualに
すればよくない?
283:デフォルトの名無しさん
08/01/19 16:02:35
>>282
具体的に言うとちょっと極端な例ですが
データ入力して保存するという共通処理で
親
public void ClickSaveButton() {
入力チェック()
データ保存()
ログ出力()
}
abstract void 入力チェック()
abstract void データ保存()
abstract void ログ出力()
とやるとabstractなんでそれぞれの実装は一応してくれんるんだが
セーブボタンを押したときClickSaveButtonを呼び出して欲しいのに
データ保存()だけ入れるやつとかいるんですよ
284:283
08/01/19 16:12:27
最初の話とずれてますね…
親
public void ClickSaveButton() {
入力チェック()
データ保存()
ログ出力()
}
abstract void 入力チェック()
abstract void データ保存()
private void ログ出力() //共通処理
いい子
セーブボタン_Click {
ClickSaveButton()
}
だめな子
セーブボタン_Click {
データ保存()
}
セーブボタン_Click {
入力チェック()
データ保存()
}
285:デフォルトの名無しさん
08/01/19 16:15:48
もはや最初と別の話になってるような気がするんですが。。
286:デフォルトの名無しさん
08/01/19 16:20:51
>>284
まあどうしてもということなら、その例ならSaveButtonClickedイベントを持つ
インターフェイスをコンストラクタに取るようにする、みたいな姑息な
対策はできるんじゃない?
287:デフォルトの名無しさん
08/01/19 16:28:03
>>285
自分でもよんでもよくわからない例でした・・・
つまり共通処理とabstractな派生の処理を組み合わせたテンプレートメソッドを
作ったんだがテンプレートメソッドを使わないで処理するやつがいるのです。
だからabstractなメソッド一つで共通も派生処理も出来たらなーと思ったのです
て、あーもうだめです日本語でおkです…
288:デフォルトの名無しさん
08/01/19 17:19:10
セーブボタン_Click が ClickSaveButton() を呼び出すと決まっているなら
基底クラスでそう定義しておけばいいんじゃないのか?
289:283
08/01/19 17:25:35
>>286
なるほどイベントを使うというのもいいですね
>>288
派生では実装無しですか、それだとすっきりですね
この方式が一番スマートな気がします
290:デフォルトの名無しさん
08/01/19 18:48:35
派生クラスでオーバーライドさせるためのメソッドはprotectedにしとくもんだよ
291:デフォルトの名無しさん
08/01/19 18:54:35
284のセーブボタン_Clickは、みんな親クラスのメソッドなのでは?
292:デフォルトの名無しさん
08/01/19 19:02:51
class Base{
void method(){・・・}
・・・
}
class Derived : Base{
void method(){・・・}
void method2(){・・・}
・・・
}
で、
Base obj = new Derived();
obj.method();
とできるのはなぜ?
これじゃobj.method2()とできないから
Derived obj = new Base();
obj.method();
と書くべきじゃないですか?
293:デフォルトの名無しさん
08/01/19 19:06:35
おまえは何を言ってるんだ
294:デフォルトの名無しさん
08/01/19 19:06:56
>>290
そうでしたか…勉強になります
>>291
そうななってしまいますね…そしてそれだも問題なしとなる…
ボタンクリック以外にも場合によってセーブ処理を走らせる必要がある場合の対応と読み替えてください…
295:デフォルトの名無しさん
08/01/19 19:09:27
>>293
DerivedよりBaseの方が持ってる情報が少ないのに
型になるのはおかしいということです
Base obj = new Derived();
と書いたら、Derivedのメンバでアクセスできないものがでてきてしまいませんか?
296:デフォルトの名無しさん
08/01/19 19:12:12
>>292
多態化から勉強し直せ。
Derivedじゃない他のBaseから派生したクラスを同じ流れで取り扱えるようにだよ。
ちなみにvirtualとoverrideしないと、前者のobj.method();が呼ばれるのはBaseのほうだぞ。
297:デフォルトの名無しさん
08/01/19 19:15:31
>>296
なるほど多胎っすか
だったらDerived obj = new Derived();
obj.method();
でいいんじゃないですか?
わざわざBaseを絡ませなくても・・・
298:デフォルトの名無しさん
08/01/19 19:17:14
>>297
2行目読めよ
299:デフォルトの名無しさん
08/01/19 19:21:16
>>298
Base obj1 = new Derived1();
Base obj2 = new Derived2();
Derived1.method();
Derived2.method();
とできるってことですか?
Derived1 obj1 = new Derived1();
Derived2 obj2 = new Derived2();
と同じ挙動だと思うんですが、意味あるんですか?
アクセスできるメンバが減ってるだけだと思うのですが・・・
300:デフォルトの名無しさん
08/01/19 19:27:24
本当に読んだか?
class Hoge : Base{
override void method(){・・・}
・・・
}
というクラスを後から追加しても
Base obj = new Hoge();
obj.method();
でHogeクラスのmethodを呼べるだろ
というかその辺の入門書にもかいてあるだろ・・・
301:デフォルトの名無しさん
08/01/19 19:30:32
型っていうのは、最低限それらのメンバが使えることを保証するもの
302:デフォルトの名無しさん
08/01/19 19:49:25
呼び出す側をベタに書くから分かりづらい
public void Write(Stream stream) {
stream.Write(this.data, 0, this.data.Length);
}
ほらstreamはFileStreamでもMemoryStreamでもGZipStreamでもなんでも持ってこい
303:デフォルトの名無しさん
08/01/19 19:53:59
例えば
public void show(object o) {
MessageBox.Show(o.ToString());
}
というメソッドを
show(5);
でも
show(DateTime.Now);
でも呼べるでしょ。そういうこと。
304:デフォルトの名無しさん
08/01/19 20:09:15
>>302
そういう間違いそうなのはふらっとに書くなよ
305:デフォルトの名無しさん
08/01/19 20:15:53
問題点を指摘してあげればプラスになるぜ
306:デフォルトの名無しさん
08/01/19 20:33:25
>>300-303
ああなるほど
Streamの例は分かりやすいですね
Streamを継承したクラスの分だけ全部オーバーロードしなくても
勝手にどれでも動くようにできるということですか・・・
ライブラリを使うときは便利そうですけど
自分で設計するのは難しそうですね
307:デフォルトの名無しさん
08/01/19 20:34:53
こういうこともできるんですか?
Base[] array = new array[3];
array[0] = new Base();
array[1] = new Derived1();
array[2] = new Derived2();
foreach(Base t in array){
t.method();
}
308:デフォルトの名無しさん
08/01/19 20:37:35
言語の習得にはトライ&エラーも大事だぜ
試せることは試す
309:デフォルトの名無しさん
08/01/19 21:05:25
>>308
まったくそのとおり
書いてどうしても通し方がわからなければ聞くのがいいね
310:デフォルトの名無しさん
08/01/19 21:07:13
で、>>307に答えられる人いないの?
311:デフォルトの名無しさん
08/01/19 21:08:38
答えられる人がいないとでも思ってるのか?
安い挑発する前に手を動かせよ
312:デフォルトの名無しさん
08/01/19 21:09:50
>>311
死ね
313:デフォルトの名無しさん
08/01/19 21:11:20
はい
314:デフォルトの名無しさん
08/01/19 21:12:56
>>311
答えろ、糞
315:デフォルトの名無しさん
08/01/19 21:13:55
馬鹿にはできないんじゃね?
316:デフォルトの名無しさん
08/01/19 21:19:46
>>310は偽物です
>>308
一通り疑問に思ったことはやってみました
Base obj = new Derived();
(obj as Derived).method2();
みたいなことをすればDerivedが持つメソッドも呼び出せるんですね
(なんか危なそうですが)
この場合、objが本当にDerivedのインスタンスじゃないと
実行時エラーになりますね
317:デフォルトの名無しさん
08/01/19 21:38:11
基本クラスは派生クラスの実装を知らないから
派生クラスのメソッドは呼び出せないようになっている
318:デフォルトの名無しさん
08/01/19 21:39:21
イテレータ・・・と言いたいところだけど
C#のイテレータって違うんだよな
319:デフォルトの名無しさん
08/01/19 21:47:29
(obj as Derived).method2();
こういうのはダウンキャストという
320:デフォルトの名無しさん
08/01/19 21:58:10
objがDerived型だという確信があるんだったらasじゃなくてキャストしたほうがいい
asは確信がない時に使うもの
321:デフォルトの名無しさん
08/01/19 22:51:29
この変の話は実例みて解説してるの読んで勉強してから出直せ
確か@ITに猪俣の書いた記事であったから
322:デフォルトの名無しさん
08/01/19 23:56:54
派生のメソッド呼んでほしいような場合にオーバーライドを使う。
それが多態ということ。
呼ぶ側のコードでは実際の型を知らなくても、
オブジェクト自身が必要な動作をしてくれる。
だからストリームの実体がなんだろうが
使う側のコードは変わらない。
323:デフォルトの名無しさん
08/01/20 05:21:37
.netで勉強しようとしてるのですが、expressで致命的に不満が残る欠陥って何かありますか?
当方、VisualStudioを本格的に触るのはVB6.0以来です。
URLリンク(www.microsoft.com)
↑ ここの性能比較を見たのですが良くわかりません。
特に、プロフェッショナルと比べて大きな違いがあれば教えていただけないでしょうか。
モバイルやofficeプログラミングはいらないのですが、
「クラス デザイナ / オブジェクト テスト ベンチ」、その他が無くて困ることってありますか?
フォームの編集はできるんですよね?
よろしくお願いします。
324:デフォルトの名無しさん
08/01/20 05:28:12
>>323
スキル次第。
つーかVSスレで聞け
325:デフォルトの名無しさん
08/01/20 07:10:03
>>323
Expressだと全角英数は使えないよ
326:デフォルトの名無しさん
08/01/20 09:27:38
いきなり欠陥とか何言ってるんだこいつは。
327:デフォルトの名無しさん
08/01/20 09:29:41
323がVS2008Expressを使いこなし限界にぶち当たるはるか以前にVS2010が出てしまうことを予言しておこう
328:デフォルトの名無しさん
08/01/20 09:30:23
スタンダードからはデフォで使えるコントロールが増えているとか
気になったのはそれぐらいかな
329:デフォルトの名無しさん
08/01/20 11:53:12
>>7に関し
MSは複雑になり過ぎたWinAPIから.netのクラスに
移行するということを.netが出てきた当時聞いたこと
があります。
しかし、現状を見てみると、オーバーヘッドで起動は
遅いし、肝心のところはAPIがないと作成できない、
XPではフレームワークをインストールしないと
ダメだとか、良いところがないような気がします。
C#を含め.net環境は今後どうなるのでしょうか。
今、C#を使ってますが他の開発環境に移行した方が
良いのかなと悩んでいます。
あ、一番聞きたいことはWinAPIがなくなるかどうか
ということでした。
330:デフォルトの名無しさん
08/01/20 11:57:12
釣りなので放置してよし
331:デフォルトの名無しさん
08/01/20 12:30:21
>MSは複雑になり過ぎたWinAPIから.netのクラスに
>移行するということを.netが出てきた当時聞いたこと
>があります。
これに関してはWin32APIではなく、
COMで拡張していた各種サービスへのAPIを.NETベースにしようということだった。
これがWin32のAPIと誤解され一人歩きしてた。
そして、おそらくJavaへの牽制のため、MSもエバンジェリストといわれる輩もわざと
誤解が一人歩きするのを放置してた。
332:デフォルトの名無しさん
08/01/20 12:36:11
>>331
回答ありがとうございます。
C#スレでこんなことを言うのも何ですが
今更ですが、C#のアドバンテージはどういった
点になりますでしょうか。
そういえば、ソフトウェア誌上でもC#の記事は
少なくなって来たような気がしますし。
333:デフォルトの名無しさん
08/01/20 12:42:44
ジェネリッククラスのstaticフィールドって便利だな
型チェックが減らせる
334:デフォルトの名無しさん
08/01/20 13:23:17
>>332
俺流のアホ回答
ソフト開発の面でいうと、
c++よりjavaのほうがアドバンテージがあった、
javaよりc#のほうがアドバンテージがあった。
335:デフォルトの名無しさん
08/01/20 14:48:49
>>332
おまえさんみたいなのにアドバンテージはない
フレームワーク(ランタイムみたいなもん)インストールさせるのが面倒
API叩かないとできないorめんどくさい処理があること
これだけで嫌がる奴なら選択の余地はない。やめとけ。
だいたい、仕事とかで「しかたなく」使ってみたけど
結構いいところがあるのに気づいて個人でも使ってるってやつか
近頃プログラムはじめてたまたま最初にC#を選んだやつだけだろ
あどばんてーじ があるのは
おとなしくC++でWin32APIにしとき
336:デフォルトの名無しさん
08/01/20 15:24:16
C++だとGUI周りが面倒くさいんだよなぁ。
MFCは設計が古いし、ATL/WTLは素のAPIよりマシだが面倒くさいのは変わらんし。
337:デフォルトの名無しさん
08/01/20 15:24:52
GUI作成はC#のほうが圧倒的にやりやすいし、標準ライブラリもC++よりはるかに充実している。
悪い点は >>329 の通りだが、それ以外はいいこと尽くしだろ。
Vistaが普及して.NET標準装備になってさえくれれば、C#は選択肢としてかなり良くなる気がする。
まあ、Vistaが普及するかが問題なのだが。
338:デフォルトの名無しさん
08/01/20 16:25:16
WinFXは何処に行ったんだか・・・
339:デフォルトの名無しさん
08/01/20 16:41:07
WinFXは.NET3.0のことだが?
WinFSのことなら確かにどこかに逝ってしまった。
340:デフォルトの名無しさん
08/01/20 16:47:42
>>339
その前の話なんだけど?
341:デフォルトの名無しさん
08/01/20 16:55:26
来週発売のDVDのリスト誰か貼ってくれ
342:デフォルトの名無しさん
08/01/20 17:17:01
VisualStudioでフォームがあるDLLを作って、それをC#コンソールアプリから呼び出して表示する場合
#DLL側
DLLのソリューションにWindows フォームを追加
参照設定にSystem.Windows.Formsを追加
[フォーム名].cs[デザイナ]に表示されるフォームウインドウダブルクリックで[フォーム名].cs作成→ビルド
#コンソールアプリ側
ビルドしたDLLとSystem.Windows.Formsを参照設定から追加、usingにDLLのnamespace追加
コードの中に↓二行を書き加える
[フォームのクラス名] form = new [フォームのクラス名]();
form.ShowDialog();
こんな感じであってますか?
343:デフォルトの名無しさん
08/01/20 17:18:27
フォームの継承がうまくいかない
URLリンク(www.atmarkit.co.jp)
↑みたいな問題って皆さん起きてないの?
344:デフォルトの名無しさん
08/01/20 17:38:08
バージョン情報の取得方法で質問があります。
・ Assembly.GetExecutingAssembly().GetName().Version.ToString();
こちらで取ってくると、 1.1.0.0 1.1.0.0
・ Application.ProductVersion;
こちらで取ってくると、 1.1 1.1
どちらも『アセンブリバージョン』と『ファイルバージョン』がくっついて並んでしまいます・・・
片方だけ取得する方法はありませんか?
@ITには片方コメントアウトするといいと書いてありましたが、
[assembly: AssemblyVersion("1.1")]
//[assembly: AssemblyFileVersion("1.1")]
出力では 1.1.0.0 1.1.0.0と出てきてしまいます。
345:デフォルトの名無しさん
08/01/20 17:48:47
>>343
それVS2005でも起きてる?
2002/2003の頃はいろいろあったけど。
346:デフォルトの名無しさん
08/01/20 17:52:33
まずなにしたらいいですか
347:デフォルトの名無しさん
08/01/20 18:03:19
>>344
AssemblyVersionしか出ないはずだけど。
.NETのバージョンは?
348:344
08/01/20 18:45:58
>>345
>>347
開発環境はVS2008 EE(.NET3.5)です。
ためしにVS2005で試してみたところ、
前者・後者の呼び出し方法共にアセンブリバージョンのみ出てきました。
.NET3.5で呼び出し内容が変わったみたいですね・・・。
349:デフォルトの名無しさん
08/01/20 19:07:25
>>348
.NET 3.5のみ問題なんならソースよんでみたら?
350:デフォルトの名無しさん
08/01/20 19:07:30
>>348
そこは2.0のまんまで変更はない。
351:デフォルトの名無しさん
08/01/20 19:08:41
すまん。Express Editionはソース読めんのだっけか。
352:344
08/01/20 19:11:33
試しにVS2008 EE(.NET3.5)ではなく、
VS2008 EE(.NET2.0)で試したところ。
変化がありませんでした。
つまりVisualStudio2008側が問題なのでしょうかね。
いい対策案が思いつきません。
353:デフォルトの名無しさん
08/01/20 19:44:20
単純なプログラムミスとかないか?
Console.WriteLine("{0} {0}", Application.ProductVersion); とかやってたりして。
AssemblyFileVersionは 1.0.0.0 の形式になってなくてもエラーにはならない。
[assembly: AssemblyFileVersion("ほげら")] もOK
[assembly: AssemblyFileVersion("1.1 1,1")] とうぜんこれもいける。
354:デフォルトの名無しさん
08/01/20 19:52:50
>>337
ありがとうございます。
VistaはPCの買い替えに比例して徐々に普及して
行くことは間違いないので、もうしばらくC#で
行こうかなと思います。
で、APIは無くなると信じていたので、APIをわざと
避けて来たことから、改めて勉強しようかなと
思い始めました。
355:デフォルトの名無しさん
08/01/20 20:15:02
駄目な奴は何をやっても駄目
356:344
08/01/20 20:16:57
>>353
解決しました。
353氏がおっしゃるとおり、{0}{0}が原因でしたw
お騒がせしてすいませんでした。
357:デフォルトの名無しさん
08/01/20 20:24:59
すみません。
関数とクラスの違いがよくわかりません。
わかりやすい解説ページがあれば教えてください。
お願いします。
358:デフォルトの名無しさん
08/01/20 20:29:56
ピンポイントでそんなアホな疑問に答えてくれるところはなさそう
まじめに初めから勉強してください
359:342
08/01/20 20:34:19
間違ってますか…?
360:デフォルトの名無しさん
08/01/20 20:51:03
動かしてみたらわかるだろ。
361:デフォルトの名無しさん
08/01/20 20:52:26
>>357
クラスは振る舞いの定義。生成を必要とする。
継承可能。コンストラクタで初期化。
中に関数や変数が含まれる。変数はget set
でアクセス。
362:デフォルトの名無しさん
08/01/20 20:55:03
最近C言語から移ってきたんだけど
メンバ変数って要はグローバル変数みたいなもんかな?
363:デフォルトの名無しさん
08/01/20 20:56:50
いいえ違います。
364:デフォルトの名無しさん
08/01/20 20:57:08
>>362
グローバルスコープというよりはファイルスコープ
365:デフォルトの名無しさん
08/01/20 20:57:23
>>357
まず古典的なcの構造体を理解する。
構造体の意義がわかればクラスの意義や意味はすぐわかると思う。(たぶん)
こういうこというとムキになって反対する人間がいるけど、
やっぱりクラスは構造体の拡張として理解するのが一番理解しやすいと思う。
>>361
そんな抽象的な説明でこういう質問する人間にわかるわけないだろw
366:デフォルトの名無しさん
08/01/20 21:00:29
>>364
なるほど
なんかどの関数からもアクセスできたら
Cのグローバル変数みたいに管理しにくくなったりしないのかな?
367:342
08/01/20 21:02:01
>>360
表示できることはできたのですが、試行錯誤でたどり着いたので正攻法かどうか自信がないんです
368:デフォルトの名無しさん
08/01/20 21:06:28
>>366
なんか根本からスタイルが違うな。
クラスとして実現したい機能があって
そのためにフィールドやメソッドがある感じ。
クラスは静的な関数の寄せ集めではない
369:デフォルトの名無しさん
08/01/20 21:06:34
>>366
だからグローバルちゃうよ、って364はいってるんだと思いますが。。
ひょっとして(案外よくいるんだが)Cとかのファイルスコープの概念を知らないの?
370:デフォルトの名無しさん
08/01/20 21:09:20
メンバ変数にもアクセス修飾子とかあるから一概には言えないんじゃない。
371:デフォルトの名無しさん
08/01/20 21:18:41
>>366
メンバ変数のスコープは各オブジェクト内で完結
ただしstaticなメンバの場合はどこからでもアクセスできる
372:デフォルトの名無しさん
08/01/20 21:22:57
うん?
373:デフォルトの名無しさん
08/01/20 21:28:30
>>368-371
クラス=ファイル
メンバ=staticグローバル変数
みたいなもんなのかな?
>>369
知ってますよ
でも、案外ファイルの中でも色んな関数から参照されてると
訳分かんなくなりませんか?
374:デフォルトの名無しさん
08/01/20 21:28:49
オブジェクト指向の基本は自分で身につけないと
こんなとこでのやりとりでは理解できるはずがない。
375:デフォルトの名無しさん
08/01/20 21:29:54
あとよくわかんないのはメンバ関数って
インスタンスの分だけ関数が複製されるんですか?
その意味がよくわかんなくて
376:デフォルトの名無しさん
08/01/20 21:30:08
>>373
>クラス=ファイル
>メンバ=staticグローバル変数
>みたいなもんなのかな?
悪いけど全然違う
だから真面目に基本から勉強しろと。
C++も使ったことないの?
377:デフォルトの名無しさん
08/01/20 21:56:18
>>375
されない
378:デフォルトの名無しさん
08/01/20 21:56:26
オブジェクト指向について解説してるウェブページでも適当に探して読んでみるべき。
379:デフォルトの名無しさん
08/01/21 00:10:53
>>375
staticをつけないとインスタンスごとに複製される
380:デフォルトの名無しさん
08/01/21 00:36:05
嘘を教えるな
381:デフォルトの名無しさん
08/01/21 01:23:20
ワロタ
382:デフォルトの名無しさん
08/01/21 08:57:03
LinkLabelについて質問です。
配列でLinkLabelを可変で作成しているのですが、クリックしたときの処理で不明な点があります。
linklabel[i]で複数作成して、クリック時のイベントは一括で一つで処理したいのですが、押されたlinklabal対応させる方法がわかりません。
x = 選択したlinklabelのテキスト みたいな感じにしたいのですが、よい方法はないでしょうか?
buttonだとselectとか使うみたいなんですがlinklabelの場合がわかりませんでした。
あらかじめlinklabel1みたいに作っている方法なら載っているサイトが見つかったのですがこの方法のやつが見つかりません。
383:デフォルトの名無しさん
08/01/21 09:13:50
sender
384:デフォルトの名無しさん
08/01/21 09:23:53
>>382
デザイナで一個置いてイベント設定してdesigner.cs見てみるといいんじゃないか?
385:382
08/01/21 10:37:11
>>383-384さんありがとうございました
x = ((System.Windows.Forms.LinkLabel) sender).Text;としたところ上手くいきました
参考サイト
URLリンク(dobon.net)
386:デフォルトの名無しさん
08/01/21 13:47:00
NotifyIcon.Textにセットするために、文字列が64文字を超える場合は64文字までに切りたいのですが
string.Remove(64)
string.Substring(0,64)
のどちらも64文字未満だと例外が起きるようです。
いちいち文字数のチェックをしないでも、一発で切ってくれるメソッドはないのでしょうか?
387:デフォルトの名無しさん
08/01/21 13:53:06
「いちいち文字数のチェックをしないでも、一発で切ってくれるメソッド」
が存在したとしても、それは内部で長さをチェックしている。
ゆえに自分で作ればよい
388:386
08/01/21 14:02:26
>>387
ということはやっぱりないんですね。
例外が起きると言うことは内部でもチェックしているはずなので
二重チェックになるのが嫌だっただけです。
拡張メソッドを作ることにしました。ありがとうございました。
389:デフォルトの名無しさん
08/01/21 14:07:55
そんなことに拡張メソッド使うな
390:デフォルトの名無しさん
08/01/21 18:26:42
Language Integrated Queryを「統合言語クエリ」と訳すのって変じゃね?
「言語統合クエリ」ならわかるけど
391:デフォルトの名無しさん
08/01/21 18:33:02
LINQってリンキューって読んでるけどあってる?
392:デフォルトの名無しさん
08/01/21 18:34:32
オレはリンク
393:デフォルトの名無しさん
08/01/21 18:46:31
try中に意図的にcatchに移動してほしくて
無理やり0除算発生するようにしてるんだが
もっとスマートな方法はないですか?
394:デフォルトの名無しさん
08/01/21 18:47:40
それ最悪の書き方
395:デフォルトの名無しさん
08/01/21 18:47:56
何か throw しろ。
396:デフォルトの名無しさん
08/01/21 18:49:46
if (flag) throw new GotoCatchException<int>();
else throw new GotoCatchException<String>();
397:デフォルトの名無しさん
08/01/21 18:52:22
そもそも意図的にcatchに移したい処理なんて
設計に問題があるだろ
398:デフォルトの名無しさん
08/01/21 19:02:25
たぶん発想が逆立ちしてるんだろうね。
本来例外処理の外に置くべき処理をcatchの中に書いちゃってる、
なんてオチだと推測する。
399:デフォルトの名無しさん
08/01/21 20:55:41
変数が使われてなかったりするとエラー一覧ウィンドウで「警告」で表示されますが
「メッセージ」も文法的な間違いを発見すると表示されるのですか?
400:デフォルトの名無しさん
08/01/21 21:13:57
メッセージって""内のメッセージか?
警告と並列で括弧でくくってある意味がわからん
401:デフォルトの名無しさん
08/01/21 21:53:03
エラー一覧のウインドウに並んでる
[エラー] [警告] [メッセージ]
のことだろう。
俺もまだ見たことないな。
402:デフォルトの名無しさん
08/01/21 22:52:07
例外の使い方だけど
try
処理1
処理2
catch(ex1)
エラー1
catch(ex2)
エラー2
catch()
想定外エラー
で処理1と2は戻り値無しでNG時にex1とex2をthrowする
って使い方は邪道?
例外は関数エラーに使うべきじゃなかたりする?
403:デフォルトの名無しさん
08/01/21 22:57:22
そうやって使わないで何に使う
404:デフォルトの名無しさん
08/01/21 22:58:44
むしろそれ以外の使い方があったら教えてほしい。
405:デフォルトの名無しさん
08/01/21 23:22:08
それ以外の使い方したら読みにくいだけだろw
406:デフォルトの名無しさん
08/01/21 23:30:16
想定外の例外を握りつぶすのがいいかどうかは賛否の分かれるところじゃなかろうか
407:デフォルトの名無しさん
08/01/22 02:27:48
C#ってスクリプト言語くらい気楽に使えるようにならないの。
いちいちコンパイルとかウザいし。
408:デフォルトの名無しさん
08/01/22 02:35:52
>>397
そうでもないキガす。
とりあえず例外処理に関してテスト条件なんて作らずに
投げたらどうなるんだか見てみたいなんて話はあるかも
しれない。 これはテストをはしょるズボラな俺だけか。
409:デフォルトの名無しさん
08/01/22 06:50:59
JavaScript書き出された文字列を取得
する方法はありませんか。
ブラウザコンポーネントで例えば
document.write("abc")と書かれていれば
このabcを取得したいとのですが。
410:デフォルトの名無しさん
08/01/22 08:47:29
>>400,401
[エラー] [警告] [メッセージ]の[メッセージ]の項目です。
ASPでweb.config内でカスタムセクションを追加した時に、
「属性○○のスキーマ情報が見つかりませんでした」と[メッセージ]でエラー一覧に表示されました。
でも問題なく動作してるのでそのまま続けてみます。
ありがとうございました。
411:デフォルトの名無しさん
08/01/22 08:48:26
>>409
document.body.innerText
つーかおもっくそスレ違い
412:デフォルトの名無しさん
08/01/22 09:52:11
>>407
ソースコードから実行てのはふつーにできるから調べてみれば?
使い物になるかは別だが。
413:デフォルトの名無しさん
08/01/22 18:24:43
CSVの質問です。
//string FileName = "二バイト文字テスト";
Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(str.ToString() + ".csv"));
上記のようにファイル名が2バイトになっても正常に「開く」「ダウンロード」「キャンセル」
のダイアログが出るようにしています。
ダウンロードした場合は日本語が含まれたファイル名でダウンロードできます。
「開く」をクリックした場合、エンコードされたファイル名で開こうとしてしまいます。
解決方法はありますか?
よろしくお願いします。
414:デフォルトの名無しさん
08/01/22 18:26:53
あげてしまった・・・
補足で、開くを選択した場合エラーになります
エンコードされたファイル名を開こうとするためです。
415:デフォルトの名無しさん
08/01/22 20:04:33
誰かが作ったクラスライブラリを利用する時は、exeと一緒にそのdllも付けなきゃならないの?
C/C++のスタティックリンクライブラリみたいにexeファイルに組み込むことできないのかな?
416:デフォルトの名無しさん
08/01/22 20:06:44
ilmerge
署名されてたら無理だけど
417:デフォルトの名無しさん
08/01/22 20:43:44
>>416
thx
418:デフォルトの名無しさん
08/01/22 22:48:44
文字列を表示するときに文字の間隔を標準
(Graphics.DrawString で表示されるときの文字間隔)
より1ドットずつ狭めて表示したいと思います。
思いついたのは ExtTextOut を使用する方法ですが、
それ以外の方法(できれば p/invoke を使わなくていいような)
があったら教えてください。
419:デフォルトの名無しさん
08/01/22 22:55:21
Frameworkで定義されているコンストラクタを持たないクラスを使用したい場合、
どのようにすれば使えるのでしょうか?
仮に、public sealed class ModelBoneというコンストラクタが無くプロパティのみを持つ
クラスのインスタンスをローカルで一時使用したいとします。
ModelBone bone = new ModelBone(); としても
'Microsoft.Xna.Framework.Graphics.ModelBone' のコンストラクタが定義されていません'
のエラーが表示されてインスタンスを作成できません。
420:デフォルトの名無しさん
08/01/22 22:57:21
無理
他にインスタンスを取得する方法が用意されてるはずだからそれに従う
421:420
08/01/22 23:02:25
ちょっと見てみたけど、ModelBoneに関してはContentManager.Loadで
モデルと一緒に読み込むしかないんじゃないかな
422:デフォルトの名無しさん
08/01/22 23:03:23
>>418
一文字ずつMeasureCharacterRangesで測ってRectangleF作って
DrawStringすりゃいいんじゃね
423:デフォルトの名無しさん
08/01/22 23:22:23
>407
Windows PowerShell使えよ。
424:419
08/01/23 00:37:32
>>420
やはりインスタンスは作成できないのですか・・・。
このクラスが持つプロパティを自前クラスの関数の引数で使用したくなり、
Frameworkのクラスからインスタンスを作成できない場合
全く同じプロパティとコンストラクタを持つクラスを改めて
定義しなければならないからどうしたものかと悩んでいました。
とりあえず出来ないことが分ったので、他の方法を検討してみます。
ありがとうございました。
425:デフォルトの名無しさん
08/01/23 01:15:38
>>423
ぜんぜん手軽じゃないじゃん。
426:デフォルトの名無しさん
08/01/23 06:25:57
>>420
拡張メソッド使っても無理?
427:デフォルトの名無しさん
08/01/23 07:40:21
そもそも、勝手にインスタンスを作られると不都合だから、わざわざコンストラクタを定義してないわけだ。
428:デフォルトの名無しさん
08/01/23 09:20:32
>>426
拡張メソッドにどんな幻想を持ってるんだ
429:デフォルトの名無しさん
08/01/23 10:19:50
>>428
なんでもできるはず
430:デフォルトの名無しさん
08/01/23 10:28:13
拡張メソッドのおかげで魔法使いにならずにすみました
431:デフォルトの名無しさん
08/01/23 10:38:00
formA、formB、formCがあり、
A→B、A→Cと呼び出すとします。
formBで取得したテキストボックスの値を、formCで参照したいときはどのようにしたらよいでしょうか?
432:デフォルトの名無しさん
08/01/23 10:39:45
formAがformBから値を取得してformCに渡せばいい
433:デフォルトの名無しさん
08/01/23 10:45:53
渡すときはどうしたらいいでしょうか?
FORMC fc = new FORMC(/*取得した値*/);
でしたっけ?
434:デフォルトの名無しさん
08/01/23 11:08:35
コンストラクタでもプロパティでもお好きなように
435:デフォルトの名無しさん
08/01/23 11:13:26
ところで、そのformB、formCはそれぞれ、formAからShowDialog()で呼んでいるのですが、その場合も
>>434さんの言うとおりでいいのでしょうか?
436:デフォルトの名無しさん
08/01/23 11:17:23
interface I1,I2,I3(既成の外部ライブラリ)があったとして、
I1 i1 = new I1();
I2 i2 = new I2();
i1.hoge = (I3)i2.hage();
みたいなコードがあるのですが、(I1~3は既成の外部ライブラリ)
それぞれのinterfaceで定義されているメソッドの実態はどこで定義されているんでしょうか?
やりたいのはi1にひとつ例えばvoid moe(string str)みたいなメソッドを追加したclass or interfaceを作って
void moe(string str){
i1で定義されているメソッドをコール;
}
みたいな感じにしたいのですが、何から手をつけていいのかわからなくて困っています。
よろしくお願いします。
437:デフォルトの名無しさん
08/01/23 11:17:55
お前は何を言ってるんだ
ShowDialog()で呼ぼうとコンストラクタには関係ないだろう
438:デフォルトの名無しさん
08/01/23 11:41:18
>>436
I1 i1 = new I1();
I2 i2 = new I2();
↑ ↑
ここ と ここ を
よーく見比べてみよう
439:デフォルトの名無しさん
08/01/23 12:56:15
印刷で困っています。
ツールボックスから印刷プレビューのダイアログ(PrintPreviewDialog)をそのまま利用しています。
プレビューでは,意図した画像が正しく表示されるのですが実際に印刷すると一ページだけ
真っ黒に印刷されてしまいます。
これを解決するためにはどこを調べなければならないでしょうか。
440:デフォルトの名無しさん
08/01/23 13:10:23
他のソフトから印刷してみてどう?
441:436
08/01/23 13:10:57
>>438さん
れすありがとうござます。
見比べて見たのですが、やはりinterface同士でなにがおこっているのか理解出来ません
new Interface();
という構文自体が何をしているのかわからないのですが、
もう少しヒントいただけないでしょうか?
442:デフォルトの名無しさん
08/01/23 13:26:54
>>441
よく見ろ。newしているほうはインターフェイスではないはず。
443:デフォルトの名無しさん
08/01/23 13:38:08
>>440さん
お返事ありがとうございます。
ほかの印刷ソフトでは正常でした。
PrintDocumentのデータはどのタイミングで破棄されるようになっているんでしょうか?
何度やっても再現してしまいます。。。
444:436
08/01/23 13:40:26
何度見てもinterfaceです。
そのインターフェースの定義を見ると
[Guid("hoge")]
[CoClass(typeof(I2cls))]
public interface I2 : I4
{
}
とかになっていてどうも思っている異常に複雑そうなのであきらめます。
ありがとうございました。
445:デフォルトの名無しさん
08/01/23 13:45:19
C#のGetFilesのメソッドについて質問なんですが
複数の拡張子(この場合jpg、gif、png、bmp)で
絞り込むのはどう書いたらいいんでしょう?
446:デフォルトの名無しさん
08/01/23 13:46:47
>>445
Path.GetExtensionすりゃいいじゃん
447:デフォルトの名無しさん
08/01/23 14:13:02
>>444
CoClass属性のが実体クラス。
448:デフォルトの名無しさん
08/01/23 15:50:08
>>445
C#の、ってここはC#スレだ、決まってんだろ、ハゲ
第一C#の、じゃなくて.net frameworkの、だろ、ハゲ
それにクラス名まで、書けや、ハゲ
Directory.GetFilesならsearchPatternとるオーバーロードがあるっしょ
449:デフォルトの名無しさん
08/01/23 16:20:38
ツンデレの>>448に萌えた
450:デフォルトの名無しさん
08/01/23 17:48:10
>>448
揚げ足とるな。ばか!!!!!!!!!!!!!!
451:デフォルトの名無しさん
08/01/23 17:50:18
>>450は騙り?
452:デフォルトの名無しさん
08/01/23 18:47:52
トランザクションオブジェクトつくって
INSERTとかUPDATEとかしたあと
コミットもロールバックもしないとどうなりまつか?
453:デフォルトの名無しさん
08/01/23 19:40:34
コネクション閉じる時点でロールバック。
だったと思うけどプロバイダに依存しそう。
ものによっては保留状態になるかも。
いや、手動トランザクションなら保留はないかな?
454:デフォルトの名無しさん
08/01/23 20:36:10
>>453
トンクス
SQL Serverだとそんな感じみたいでつね
455:デフォルトの名無しさん
08/01/23 23:26:09
TabControlのTabPageにいくつかTextBoxとRichTextBoxを配置しました。
あるタイミングで,Text
456:デフォルトの名無しさん
08/01/23 23:31:33
すいません,誤って途中のものを書き込んでしまいました。
TabControlのTabPageにいくつかTextBoxとRichTextBoxを配置しました。
あるタイミングで,TextBoxとRichTextBoxのレイアウトを Fixed3D から FixedSingle
に一気に変更しようとしています。
テキストボックスの変更はできたのですが,同様の方法でRichTextBoxの変更ができませんでした。
以下のようにしたのですが,何が問題でしょうか。
RichTextBox rtb = new RichTextBox();
foreach(Object ctrl in tabControl1.SelectedTab.Controls)
{
if(ctrl.GetType().Equals(rtb.GetType()))
{
rtb = (RichTextBox)ctrl;
rtb.BorderStyle = BorderStyle.FixedSingle;
}
}
457:デフォルトの名無しさん
08/01/23 23:56:04
>>456
・まず直接フォームのリッチテキストのフィールドで同じことをしてどうなるか
確認しよう。
・ブレークポイントの使い方を覚えよう。
・こんなくだらないことでいちいち悩んでるようなら、君才能ないのかも
458:デフォルトの名無しさん
08/01/24 00:10:40
RichTextBox rtb = new RichTextBox();
こうしてから、
if(ctrl.GetType().Equals(rtb.GetType()))
こう判定して、
rtb = (RichTextBox)ctrl;
こうやってしまうところに並々ならぬ才能を感じた。
向いてないよ、やっぱり。
459:デフォルトの名無しさん
08/01/24 00:19:16
なれてないだけ
as null
460:456
08/01/24 00:24:57
>>458さん
ご指導ありがとうございます。
勉強になります。
>>459さん
nullなんですね。
ありがとうございます。
デバッガの使い方も分からず,すいません。
ブレークポイントを指定してBorderStyleを見てみるとちゃんとFixedSingle
になっていました。
RichTextBoxはFixedSingleにしても表示が変わりませんでした。
もしかして,そういうものなんですかね。
461:デフォルトの名無しさん
08/01/24 00:47:41
if(ctrl is TextBox)
って,できるんですね...orz
462:デフォルトの名無しさん
08/01/24 01:10:50
キャストするならctrl as TextBoxとしてnullかどうか見た方がいい。
463:デフォルトの名無しさん
08/01/24 01:12:35
>>462
ありがとうございます。
459さんのヒントを頂き,そのようにしました。
型判定について全く無知でした。。。
464:デフォルトの名無しさん
08/01/24 13:11:02
検討違いなこと言っていたらすみません
public static void func(string str1, string str2, bool flag){
処理
}
このような文字列を2つと論理型で1つを引数とする関数を再帰的に呼び出す部分なのですが
今現在作成中のプログラムの中で、この関数による処理がほぼ全てのようなものです
なのでこの再帰的にこの関数を呼び出すという部分について何か最適化の方法がないかと探しています
関数内の処理はforeachと.NET内のクラスを利用したものでほぼ埋まっているため
そちらに関しては最適化はやりようがないかなと思っています
それではよろしくお願いします
465:デフォルトの名無しさん
08/01/24 13:21:53
>>464
プログラムの概要を教えてもらえんとなんともなぁ
そもそも本当に再帰が必要なのかもわからないし
466:デフォルトの名無しさん
08/01/24 13:42:20
>>465
すみませんでした、書くと長いので概要を
str1にはディレクトリへのパスを(こちらをA)
str2にはまた別のディレクトリへのパスを(こちらをB)受け取ります。
Bが存在するか確認
A内に存在するファイルを探していきながら、随時B内にA内のファイルを移動していく
その後、A内でディレクトリを検索し、無ければ終了、発見した場合
(今現在のstr1とstr2の値が以下だとしたら
str1 C:\aaa
str2 D:\xxx)
A内でディレクトリ検索をして見つけたものが
C:\aaa\abcだとすると
func("C:\\aaa\\abc", "D:\\xxx\\abc", true)
こんな感じで自信を呼び出します
つまりBディレクトリ以下にAディレクトリをサブフォルダ内等一切合財移動させるという感じです
467:デフォルトの名無しさん
08/01/24 14:49:16
最適化する意味はどこにもないな。
せいぜい再帰やめることで万が一のStackOverflowを回避するぐらい。
468:デフォルトの名無しさん
08/01/24 15:06:46
再帰させる必要ないでしょ。
Private Sub moveFile(ByVal a As String, ByVal b As String)
Directory.CreateDirectory(b)
Dim files() As String = Directory.GetFiles(a, "*.*", SearchOption.AllDirectories)
For Each f As String In files
Dim newpath As String = f.Replace(a, b)
Dim newdir As String = Path.GetDirectoryName(newpath)
Directory.CreateDirectory(newdir)
File.Move(f, newpath)
Next
End Sub
469:デフォルトの名無しさん
08/01/24 16:22:56
なんでVBなんだよ。死ぬほど読みにくいわ
466は書くと長いって書いてるんだから
全部のファイルじゃなくて、何か条件付けがあるんだろ
470:デフォルトの名無しさん
08/01/24 16:49:37
手元のマシンには、VBしか入っていないからVBで答えたまで。
なんか条件付けがあるというのならなぜその条件を説明しない。
その条件をこっちで考えろってか?
全部のファイルじゃない?
「一切合財移動させる」と書いてあるだろ。
471:デフォルトの名無しさん
08/01/24 16:53:22
.netじゃフォルダ移動したら、その下にあるのも一緒に移動しないの?
472:デフォルトの名無しさん
08/01/24 18:08:56
>>470
スレタイ読んでくれよ・・・
473:デフォルトの名無しさん
08/01/24 19:24:41
C++の頃に、switch文を嫌ってポリモーフィックを使って対応していた場合(GoFのstateやTemplete Method系?)、
C#にそのまま移植するとキャストやガベコレの為に返って処理が重たくなる事は有りませんか?
これから具体例を用意しようと思いますが、2,3時間後になると思うので、
場合によるときは何処が焦点になるか、忠告頂けると助かります。
ちなみにC# 2.0です。ジェネリックの恩恵を受けれると嬉しいのですが。
474:デフォルトの名無しさん
08/01/24 19:34:38
参照型→参照型のキャストは無問題
参照型→値型はボクシングが入って遅くなる
void Hoge<T> where T : IHogeHoge (T value) { ... }
こうすればボクシングは回避できて、インターフェイスメンバも使える
メソッドが一つならインターフェイスじゃなくてデリゲートを使うのも流行り
475:474
08/01/24 19:35:30
間違えた
値型→参照型はボクシングが入って遅くなる
476:デフォルトの名無しさん
08/01/24 19:35:38
そこが処理のボトルネックになってるかどうかがまず問題だろ
477:デフォルトの名無しさん
08/01/24 19:45:25
>476 swichを使いたがる人に人的な問題が有るだけなので、ネックにならない事がわかればすっきりできます。
>474さんのおかげで解決ですけど、私も興味が有るので、もうちょっと面白い話がを集めたいんですけどスレ違ですかね。
私が今書き出したサンプルはデリゲートの方がスマートっぽいので練り直さないと。
void Hoge<T> where T : IHogeHoge (T value) { ... } を有効利用したサンプルを書けてないと足下をすくわれそうだし。
478:デフォルトの名無しさん
08/01/24 20:00:11
手段と目的を履き違えていないか?
479:477
08/01/24 20:07:17
>478
そうですね。 「参照型→参照型のキャストは無問題 」の理由は解ってないし。
>where T : IHogeHoge (T value) { ... } は自分の件では要らない事が、返事を書いてから気づきました。
未だベンチテストとかできる状態では無いのでボトルネックの洗い出しはできません。
目安としてはポリモーフィックされたupdate()関数は一秒間に180回ぐらい行われて、 satateが切り替わるのは2,3秒に一回あるか無いかです。
それでupdate()関数内に switchが有るのは嫌だなと思う次第です。
480:デフォルトの名無しさん
08/01/24 20:42:01
C# を使うことそれ自体がボトルネックだとおもいまーす
481:デフォルトの名無しさん
08/01/24 20:53:24
switch使ったっていいと思うが
Enumってswitch用じゃね?
482:デフォルトの名無しさん
08/01/24 21:11:10
問題のサンプルソースできた。
100行ある。ここに貼るとしたらどうしたら良い?
483:デフォルトの名無しさん
08/01/24 21:27:57
(´・ω・`)しらんがな
484:デフォルトの名無しさん
08/01/24 21:30:45
お好きにどうぞ
URLリンク(zero0.x0.com)
485:デフォルトの名無しさん
08/01/24 21:32:37
URLリンク(www.uploda.net)
オリジナルのファイル名でDLすると良いみたい。
かなり汚いけど、これのswitch版を作ってみる。
486:デフォルトの名無しさん
08/01/24 21:32:53
一秒間に180回なら全く気にする必要ないだろ
487:デフォルトの名無しさん
08/01/24 21:44:26
stringの連結とかやってる時点で無意味だろ
488:デフォルトの名無しさん
08/01/24 21:52:36
switch有りのソース
URLリンク(www.uploda.net)
結果
switch無し 117261
switch有り 114267
switchの方が良かった。\(^o^)/
おまえらさー、 これ信じて本当に大丈夫?
>487 良い事言った。
489:デフォルトの名無しさん
08/01/24 21:57:23
テキスト連結を削除して試したら両方15ms以下で終わったよ
490:デフォルトの名無しさん
08/01/24 22:03:37
>489
LinkedListの大きさを20000にして、string xをint xにして只の足し算にした。
switch無し 35928
switch 21836
C#のキャストってやっぱり痛いんだな。
491:デフォルトの名無しさん
08/01/24 22:33:24
インライン展開されてるみたい
[MethodImpl(MethodImplOptions.NoInlining)]をswitch版のupdateに付けてみ
492:デフォルトの名無しさん
08/01/24 22:51:29
つけては見ましたけど、特に変わらなかったです。 21600ぐらい。
---------
using System.Runtime.CompilerServices;
--中略---
[MethodImpl(MethodImplOptions.NoInlining)]
public void update()
{
switch (this.state)
-----
UMLやDPを使って設計した方が遅くなるってのはC#ユーザーなら通らされる道なんでしょうね。
キャストやガベコレの世界ってこうなっちゃうんだな。 UMLは概念?だかで実装はswitch。
493:デフォルトの名無しさん
08/01/24 23:10:11
間違えた
インライン展開抑制でこっちで効果があったのはFunc1updateとFunc2updateの方。差がかなり小さくなった。
まあつきつめたらswitchの方が速いのは当たり前だけどそんなことに意味があるかどうかの方が大事
494:デフォルトの名無しさん
08/01/24 23:42:57
そりゃそんな感じの作りならswitchのが効率いいだろうし
3パターンじゃなおさらswitch有利だろうけど
だからどうしたってレベルの話だな。
そのレベルでパフォーマンス重視ならC#なんざ使うのが間違い。
まあ大抵はこんなレベルの差はどうでもいい。
普通は処理そのものがもっとずっと重いしな。
495:デフォルトの名無しさん
08/01/24 23:53:04
でどこでキャストとガベコレが関係してるわけ?
496:デフォルトの名無しさん
08/01/24 23:56:41
まったく関係ないw
switchの方が最適化されて有利っていうだけのこと
497:464
08/01/24 23:57:54
レスくださった方、ありがとうございます
最適化の意味がないというのがいまいちピンと来ませんでしたが
少し説明不足なところがありました。
関数内の処理をどうこうしたいのではなく、関数に引数を渡す部分に関して
何か速度を上げるのに繋がる手法のようなものがあれば・・・と思ってのことでした
なので検討違いかもしれないと今でも思っていますorz
再帰処理がいらないという意見がありましたが、私自身の力量ではこれで全力でして
これ自体アドバイス貰いながらの完成だったりします。
どんどんと階層を深く辿るにはどうしてもこれ以外の方法が思いつきませんでした
498:デフォルトの名無しさん
08/01/25 00:02:47
>494
>普通は処理そのものがもっとずっと重いしな。
テキスト連結
117261-114267= 2994
足し算
35928- 21836= 14092
そうですね。
>495
どう関係しているか解らないので、適当です。
C++のポインタとキャストならこうは成らないのでは?
switch無しは、何回キャストしているか把握してないし。 ガベコレとauto pointerを勘違いしているかも、
>495が関係ないと言うなら、もっとましなソースになるかもしれませんね。
499:498
08/01/25 00:05:31
>496 今見た。
500:デフォルトの名無しさん
08/01/25 00:06:08
>>497
>最適化の意味がない
どう見てもディスクIOの方が圧倒的に重いからじゃね
501:497
08/01/25 00:12:12
>>500
なるほど、確かにorz
少しでもと思ったんですが厳しそうですね
ありがとうございました
502:デフォルトの名無しさん
08/01/25 00:17:10
>>501
IOって面で工夫するとしたら
文字列で渡さずにDirectoryInfoを渡すようにしたらいいのでは
503:デフォルトの名無しさん
08/01/25 01:31:02
インラインとか書かれてるのをみると
脳内で淫乱に変換される漏れの頭を何とかしてください
504:デフォルトの名無しさん
08/01/25 04:51:44
PropertyGridで、uint型の配列を展開したとき、数値を16進数で表示するには
どうしたらいいのでしょうか。
505:デフォルトの名無しさん
08/01/25 07:57:25
頑張るのならば ArrayConverter を真似して実装してから
uint[] 型のプロパティに TypeConverter 属性で実装したのをつける
ArrayConverter の内部クラスが private なので面倒
頑張らないのならば
[TypeConverter(tyeof(UInt32HexConverter))]
struct UInt32Hex{
public uint Value;
}
とでもして Uint32HexConverter をお手軽に実装してから
UInt32Hex の配列を使う
506:504
08/01/25 09:13:17
>>505
ありがとうございます。
とりあえず、頑張らない方向でやってみます…。
507:デフォルトの名無しさん
08/01/25 09:57:14
がんばろうぜ…
いやまあどうでもいいんだけど
508:デフォルトの名無しさん
08/01/25 10:17:29
XMLコメントを書くと
メソッド自体とパラメータのコメントはカーソルを合わせたり、Ctrl+K,Pとかすれば表示されますが
戻り値の/// <returns>xxxx</returns>に書いたものは
どうすれば表示されるのでしょうか?
あとデバッガでメソッドの戻り値が何になったのかを
そのメソッド内で見ることは出来ないのでしょうか?
バージョンは2008です
509:デフォルトの名無しさん
08/01/25 11:33:12
>>323
VC# 2008 Express使ってて思ったのは、
クイックウォッチが使えないこと。
ブレークポイントからステップインして処理を追っていくときに、
その時点における式の評価ができるのは結構便利なんだよな。
それ以外では全く不満はないので、それだけの為にVS2005Proに戻そうとまでは思わんね。
VS2008Pro、アップグレード版の値段によっては購入を検討する。
510:デフォルトの名無しさん
08/01/25 11:52:13
前を使ってないからクイックウォッチってのがわからないけど、
文面からイミディエイトウインドウのような気がする。
?を最初につけてメソッドとか記述すれば結果がみれるし、フィールドに代入も出来る
初期状態では確かメニューにないから、ユーザー設定から追加。
511:デフォルトの名無しさん
08/01/25 11:56:44
式を評価するだけならウォッチ式でできるよ
2008では演算子の上にマウスカーソルを置くと評価した結果が表示されるようになってる
512:デフォルトの名無しさん
08/01/25 12:27:59
>>510
なるほど、イミディエイトウインドウで自作式を評価できるのか。
今まであんまり使ったこと無かったもんで知らなかった。
それならクイックウォッチいらないかもね。
>>511
それはソースに記述してある式の評価でしょ?
それは当然できる。
俺が言ってたのは、ソースに記述してない評価式のこと。
513:デフォルトの名無しさん
08/01/25 12:46:42
>>512
ウォッチウインドウにある空の行をダブルクリックして式を入力するだけ
514:デフォルトの名無しさん
08/01/25 13:14:35
.netだから出来るんだろうけど、
最初にイミディエイトウインドウを知ったときには感動した
ドキュメント見て、実際の動作確認をしたくなったら
参照さえしてあれば、そのままF10(ステップオーバー)だけ押せば
ソースコードに全くないクラスでもそのまま試せるし、IntelliSense効くし
ちょっとしたことなら確認用のプログラム書かなくてもいいんだよな
テストしたいクラスがあったときもイミディエイトウインドウから実行できるし
ブレイクポイント設定しておけばちゃんと止まるし
515:デフォルトの名無しさん
08/01/25 15:36:46
>>502
DirectoryInfoとFileInfoにして色々試してみました
大きなディレクトリを移動させる際の重さがなくなったのですが、移動スピード(?)というか処理にかかる時間が延びてしまったようです
まだ色々試している段階なのですが、これは良くも悪くも安定したということか・・
何はともあれ新しい可能性です、もう少し試行錯誤していこうと思います
ありがとうございました
516:デフォルトの名無しさん
08/01/25 16:32:16
DataGridView 内のセルにて
長い文字列を入力した時に折り返すようにしたいのですが
どのように設定すれば良いのでしょうか?
WrapMode を True に設定したら全角文字は上手く折り返されるんですが
スペースを含まない半角文字はセルから溢れてしまい、困ってます。
517:デフォルトの名無しさん
08/01/25 23:56:07
今データベースを使用するアプリケーションを書いているのですが、
SQL文が非常に長くて可読性が悪いので文を分割しようと考えてます。
この場合、
string query = "select hoge, fuga, hage from test"
+ " where hage = 1 ・・・";
見たいな書き方しますか?それともStringBuilderを使ってApendしていきますか?
どう書くのが一般的なんでしょうか?
518:デフォルトの名無しさん
08/01/26 00:28:05
多いのは単に+で連結じゃないかね?
俺は@でヒアドキュメントもどきが好きだが。
519:デフォルトの名無しさん
08/01/26 00:29:32
ループ等の中にないならstringで連結してもいいんじゃね
それか余所においとくかリソースにつっこむか
520:デフォルトの名無しさん
08/01/26 00:36:50
リテラルの+はコンパイル時に解決されるからStringBuilderなんて使うと余計に遅くなるよ。
521:デフォルトの名無しさん
08/01/26 00:44:27
C#のtry-catchの質問です
シリアル通信を用いたセンサのグラフを表示するプログラムを作っています。
UIのデザインForm1.csとセンサを扱うクラスSensorClass1.csにわけています。
で、シリアル通信の関連のエラー処理をしたいのですが、かきのどちらに
try-catchを施せばよいでしょうか。
Form1.cs
private void buttonWaaSens_Click(object sender, EventArgs e)
{
this.sensorClass.sens();
}
SensorClass1.cs
public void sens()
{
this.serialPort.DiscardInBuffer();
this.serialPort.WriteLine("sens +000001000 20 5 0");
System.Diagnostics.Debug.WriteLine("取得開始");
}
522:デフォルトの名無しさん
08/01/26 00:51:25
>>521
いや、日本語書けよw
君はエスパーかもしれんが、ここ読んでるキミ以外の人間はエスパーじゃないんだけど。
523:デフォルトの名無しさん
08/01/26 00:57:03
ぼくはエスパーです
どちらでも好きなほうにどうぞ
524:デフォルトの名無しさん
08/01/26 01:08:10
>>521
ベストアンサー
すべて
525:デフォルトの名無しさん
08/01/26 02:33:53
PropertyGridのような折り畳み・展開可能なGrid(複数カラム保持)を作成したいのですが、
参考になるURL・方法を知っている方教えていただけますか?
こんな感じを想定しています。
ColA |ColB |ColC
-NodeA | |
-NodeC| |
+NodeB | |
526:デフォルトの名無しさん
08/01/26 02:42:09
>>525
URLリンク(www.codeproject.com)
527:デフォルトの名無しさん
08/01/26 03:05:21
>>526
ありがとうございます。
コード参考にして作ります。
528:デフォルトの名無しさん
08/01/26 05:13:40
if(dir.Attributes == FileAttributes.ReadOnly)
{
dir.Attributes = dir.Attributes & ~FileAttributes.ReadOnly;
}
dirはDirectoryInfoです
これで読み取り属性なら読み取り属性を解除するということになっているでしょうか?
529:デフォルトの名無しさん
08/01/26 06:39:01
if ((dir.Attributes & FileAttributes.ReadOnly) != 0)
とでもしておかないと、読み取り専用以外の属性を併せ持つディレクトリを漏らす。
530:デフォルトの名無しさん
08/01/26 06:45:14
ディレクトリには必ずディレクトリ属性がついているから、>>528のやり方では絶対に条件が成り立たないな。
531:デフォルトの名無しさん
08/01/26 07:22:43
>>529
ありがとうございます
流石に単純すぎて自分のものはいぶかしんでいたんですが
読み取り専用なだけ、という場合しか考慮されていなかったんですね、助かりました
>>530
DirectoryAttributes的なものでもあるんでしょうか?
一応こちらの環境では(読み取り専用にチェック入れただけのディレクトリに対しては)できましたが
532:デフォルトの名無しさん
08/01/26 07:25:26
あれ>>529がいけそうになさそうな・・
533:デフォルトの名無しさん
08/01/26 07:35:47
状況によって消えたり消えなかったり、読み取り属性だけころっとかわったりorz
もうちょっと試行錯誤してきます、すみません
534:508
08/01/26 07:50:21
>>508
やっぱりどちらも無理なんでしょうか?
535:デフォルトの名無しさん
08/01/26 07:57:37
>>534
どっちも必要ないから無理じゃない?
536:デフォルトの名無しさん
08/01/26 09:32:29
>>534
メソッドの戻り値はreturnの部分にブレークポイント仕掛ければ分かるよ
537:デフォルトの名無しさん
08/01/26 11:43:12
>>518,519,520 さんありがとうございました。
>>518 @使ったヒアドキュメントもどき私も使っています。
>>520 コンパイル時に解決してくれんですね。安心して+で連結できます。
538:デフォルトの名無しさん
08/01/26 13:22:07
form1、form2、form3があり、
form1からボタンのイベントでダイアログ形式でform2を開き、そこに値(TextBox)を入力します
そのあと、okでform1に戻り、今度は別のボタンのイベントでform3を開き、そこでSaveFileDialogを開きます
このときSaveFileDialogのFileName先ほどのTextBoxの値を入れたいのですがどうしたらよいでしょう?
539:デフォルトの名無しさん
08/01/26 13:28:42
form2にそのテキストボックスの値を取得するプロパティを定義する
form2を表示して,okで戻った後にform1のコードからそのプロパティを通して値を取得して
form1のフィールドに入れとく
form3を開く前にプロパティとかコンストラクタとかでその値をform3に渡す
540:デフォルトの名無しさん
08/01/26 13:29:50
SaveFileDialogのヘルプ見れば一発でわかりそうなもんだが
一体なにがわからんの?
もしかしてform1からform3にファイル名を渡す方法?
そんなもん、form3を開く時にファイル名を渡すなりなんなり、自分で考えろ。
541:デフォルトの名無しさん
08/01/26 13:32:21
>>539
すみません
実際のコードで簡単に書いていただけないでしょうか?
542:デフォルトの名無しさん
08/01/26 13:40:58
>>540
お前初心者スレからでてったほうがいいと思うぞ
543:デフォルトの名無しさん
08/01/26 13:41:36
>>541
基礎からやり直せ
そのレスで確信したが全くわかってないだろ
544:デフォルトの名無しさん
08/01/26 13:43:43
>>540
具体的に言えばそうです
ただそのform3のsavefiledialogのFileNameプロパティに名前を設定するとき、
sfd.Filename = の後にどうやったらform2のテキストボックスの値を参照できるのかがしりたいです
545:デフォルトの名無しさん
08/01/26 13:44:07
class Form2 {
public string テキストボックスの値 { get { return this.textBox1.Text; } }
}
class Form3 {
private string fileName;
public string ファイル名 { get { return fileName; } set { this.fileName = value; } }
void SaveFileDialogを開くイベント() { //(略) saveFileDialog.FileName = fileName; }
}
class Form1 {
private string fileName;
void Form2を開くイベント() {
using (Form2 form2 = new Form2()) {
if (form2.ShowDialog() == DialogResult.OK)
this.fileName = form2.テキストボックスの値;
}
}
void Form3を開くイベント(){
Form3 form3 = new Form3();
form3.ファイル名 = this.fileName;
//form3を表示
}
546:デフォルトの名無しさん
08/01/26 13:44:30
>>544
クラスの基礎だけでいいからどっかの解説ページを読むんだ
ここで一時凌ぎすべきじゃない項目だぞ
547:デフォルトの名無しさん
08/01/26 14:09:30
>>545
型 'System.Windows.Forms.TextBox' を型 'string' に暗黙的に変換できません
AD_Adjust.textBox1' はアクセスできない保護レベルになっています。
ってエラーが出てしまいました
548:デフォルトの名無しさん
08/01/26 14:17:41
>>547
>>546
やる気あんのか屑
549:デフォルトの名無しさん
08/01/26 14:20:15
>>542
ロクにマニュアルも見ず、自分で試してみることもしないのは
初心者以前。
>>544
だから、
form2のテキストボックスの値を参照できるように、プロパティなり
メソッドの引数なりで自分で参照できるように作るんだよ。
550:デフォルトの名無しさん
08/01/26 14:21:24
↑ごめんなさい、解決です
551:719
08/01/26 14:29:25
>>719です。
もう一度起動してWINXPを起動したのですが今度は正常に読み込みました。
が・・・
起動しても何か処理が重い・・・(普段なら10秒もすれば起動して処理が終わるのに・・・)
それで色々作業中にまたまた急に電源が切れました。。
そう、719を書き込んだときとまったく同じ症状で
で、「これはウィルスだな。」と思い、そうと決まれば駆除しかない!
そう思って俺の計算では成功する予定でした。(←馬鹿
しかしその結果、ウィルスチェッカー中に電源が落ちてしまいます。
(ちなみにしばらく時間を置いてから起動すれば立ち上がるみたいなんです。)
で3回程度試したんですが・・・必ずチェック数が1万を越える前に電源が落ちます。
ウィルスチェックしていない間は落ちることがないのでまず電源アダプタとかでは無いはずなんですが・・・
ニコニコにウィルスでも混入したのかな・・・?(←先にチェックして来い
というわけでちょっとニコニコに何か手がかりみたいなの無いか見てきます。
552:デフォルトの名無しさん
08/01/26 18:09:08
(´・ω・`)知らんがな
553:デフォルトの名無しさん
08/01/26 18:48:10
>>719の頭ん中にもウィスル湧いてんじゃねw
554:デフォルトの名無しさん
08/01/26 19:20:38
Point[] p = new Point[4];
p[0] = new Point(0, 0);
p[1] = new Point(1, 1);
p[2] = new Point(2, 2);
p[3] = new Point(3, 3);
クラスの配列をnewするとき↑みたいに
1個ずつnewするのがめんどいんですが
スマートにやる方法教えてください
555:デフォルトの名無しさん
08/01/26 19:25:58
Point[] p = new Point[4];
for(int i = 0; i < 4; i++){
p[i] = new Point(i, i);
}
556:デフォルトの名無しさん
08/01/26 19:26:31
Point は構造体だから配列つくっちゃったら
要素ごとに new する必要なんてない
なので new は最初の1個だけでよい
557:デフォルトの名無しさん
08/01/26 19:28:33
Point[] p = { new Point(0, 0), new Point(1, 1), new Point(2, 2), new Point(3, 3) };
558:デフォルトの名無しさん
08/01/26 19:31:07
C#でさぁWindowsのAPIを利用するのは.netのコンセプトに反してるよね?
559:デフォルトの名無しさん
08/01/26 19:32:24
それがいやなら .net 側で API 用意してくれ!
560:554
08/01/26 19:33:30
>>555 (;´Д`)却下
>>556 (゚д゚)ハァ?
>>557 (´∀` )採用!!
561:デフォルトの名無しさん
08/01/26 19:34:50
構造体の概念を全く理解してないでよくPointクラスを使用できるね。
掛け算の概念を知らないで九九をひたすら暗記している家の息子みたいなもんだ。
562:デフォルトの名無しさん
08/01/26 19:36:01
for を却下して new を羅列してる方を採用って・・・
何がやりたいのか分からない。
563:デフォルトの名無しさん
08/01/26 19:37:38
>>560
Point[] p = Enumerable.Range(0, 4).Select(i => new Point(i, i)).ToArray();
564:デフォルトの名無しさん
08/01/26 19:38:05
>>561
565:デフォルトの名無しさん
08/01/26 20:33:37
今までC/C++やってたんですが
最近C#やることになって勉強中です。
ものすごく親切な仕様という印象です。
566:デフォルトの名無しさん
08/01/26 20:51:14
文字列のn番目の文字だけを別の文字に変えたいときはどうしたら良いでしょうか?
567:デフォルトの名無しさん
08/01/26 20:56:55
文字列.replace(a,b);
a→b
568:デフォルトの名無しさん
08/01/26 20:58:55
>>554
Point[] p = new Dictionary<int, int> { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 } }.Select(xy=>new Point(xy.Key, xy.Value)).ToArray();
569:デフォルトの名無しさん
08/01/26 21:15:55
一旦ToCharArray()で文字配列にしていじった後にnewし直す。とか
570:デフォルトの名無しさん
08/01/26 21:32:19
>>566
StringBuilderならインデクサ経由で変更できるよ。