ふらっとC#,C♯,C#(初心者用) Part41at TECH
ふらっとC#,C♯,C#(初心者用) Part41 - 暇つぶし2ch445:デフォルトの名無しさん
09/06/13 03:04:23
>>444
カンマじゃなくて、イコールでつないでご覧。

446:デフォルトの名無しさん
09/06/13 04:30:26
File.WriteAllText(@"C:\Test.txt", "テスト書込。", sjisEnc);
この、C\Test.textの前にある@マークは何の役割でしょうか?

447:デフォルトの名無しさん
09/06/13 04:31:37
@があると\でエスケープしない
"C:\\Test.txt"とすべきところを@"C:\Test.txt"で済ます

448:デフォルトの名無しさん
09/06/13 04:34:31
>>447
ありがとう

449:デフォルトの名無しさん
09/06/13 10:19:43
>>442
>どうしてoverrideという概念があるかというレベルに見えるが
に対しての見解なので

450:デフォルトの名無しさん
09/06/13 10:43:36
>>441
ん、んーん?


451:デフォルトの名無しさん
09/06/13 10:59:33
overrideがないと、関数名を考えるのが面倒じゃん
MyFunction( )
MyFunction_int(int n)
MyFunction_intint(int n, m)
MyFunction_intstr(int n, string t)
とか、どんどん増える

452:デフォルトの名無しさん
09/06/13 11:00:19
overloadと勘違いして奴がいる模様。

453:デフォルトの名無しさん
09/06/13 12:06:15
overloadと勘違いして奴がいる模様。

454:デフォルトの名無しさん
09/06/13 12:13:18
c#の入門用ページ、
どこもコンソールアプリケーションのことしか書いてないんだけど
WIndowsプログラムのこと書いたページで良いとこない?

455:デフォルトの名無しさん
09/06/13 12:16:23
>>454
言語自体の入門ページだと、そりゃそんなもんだろ。
Windows Forms とか WPF でググりなおした方がいいんでは。

あと、コンソールアプリで入門記事書いてるページでも、
1ページくらいは GUI に記事さいてないか?

456:デフォルトの名無しさん
09/06/13 12:18:02
そりゃ、C#の入門であって、.NETでGUIプログラミングをするための入門では
ないから、仕方ないのでは?
前者はもう充分だから、後者に移りたいというのが質問の趣旨?
それとも、前者も後者もいっしょくたにしたいという話?

いっしょくたはおすすめできないぞ。

457:デフォルトの名無しさん
09/06/13 12:29:13
GUIプログラミング=IDEの使い方だし、めんどくさいだろ?作るの。

458:デフォルトの名無しさん
09/06/13 12:38:46
俺はClass personから継承してtaroをつくるとかどうでもいいことじゃなくて
たとえばだが
Form1のx=200,y=300のドットの色を取得して
画面を塗りつぶすとか
そういうことやりたいんだが

コンソールアプリじゃそういうことわからん。
IDEつくるのめんどくさいのか;;

459:デフォルトの名無しさん
09/06/13 12:42:42
>>458
どうでもいいけど
> Class personから継承してtaroをつくる
これは気持ち悪い
taroっていう種族がいるのか…?

460:デフォルトの名無しさん
09/06/13 12:44:53
>>458
class Taro キモすww

それは置いといて、
そういう話の場合、「入門」じゃなくて「サンプル」でググって、
説明読むんじゃなくてコード読む方がオススメ。

461:デフォルトの名無しさん
09/06/13 12:46:01
別に居ても居なくてもどうでも良いな
3年を継承して山田を作るのに山田って組があるのか?とか
マジでどうでも良い

462:デフォルトの名無しさん
09/06/13 13:11:29
ちょっと力ぬけよ

463:デフォルトの名無しさん
09/06/13 15:40:08
メモリの解放のタイミングについて教えてください。

フォーム上にDataGridViewとComboBox(DropDownListとして利用)、
Buttonがあるとします。
ButtonをクリックするとComboBoxのSelectedIndexによってDataGridViewの
内容が変わります。DataGridViewはReadonlyです。

現在、初期化としてフォームのコンストラクタのInitializeComponent()の後で、
それぞれDataTableを取得して、ComboBoxとDataGridViewにバインドしています。

DataGridViewはReadonlyなので、
using(DataTable dt = …)
{
  // 処理
  dataGridView1.DataSource = dt;
}
と閉じてしまっても問題ありませんが、ComboBoxの方はusingで囲むと値が
表示されません。
その場合、comboBox1.DataSourceにセットしたDataTableはどこでDisposeすれば
良いのでしょうか?

464:デフォルトの名無しさん
09/06/13 16:01:14
Disposeはメモリの解放じゃない
DataSourceとして使用してる間にDisposeしちゃまずいだろDisposeの意味的に考えて
そのDataTableを使わなくなるタイミングだから、大体フォームが閉じるときでいいんじゃね

実用上はDataTableならDisposeする必要もないけどな

465:デフォルトの名無しさん
09/06/13 16:33:55
>>464
ぐぐって下記のページを見つけて読んできました。
URLリンク(www.atmarkit.co.jp)

大体理解できました(と思います)。
リンク先もさらに読んできます。

466:デフォルトの名無しさん
09/06/13 23:54:15
内容が等しいことを示すにはどうしたらいいでしょうか?

class test{
int a;
int b;
}

test x1=new test();
test x2=new test();

x1.a=10;
x2.a=10;
x1.b=20;
x2.b=20;

if(x1==x2)
//等しいと表示
else
//等しくないと表示

クラスは参照型なので等しくないって表示されちゃうことはわかるんだけど
クラスの内容自体を比較するのはどうやんの?

467:デフォルトの名無しさん
09/06/13 23:55:46
IComparer

468:デフォルトの名無しさん
09/06/14 01:16:18
>>466
==,!=オーバーライド

469:デフォルトの名無しさん
09/06/14 01:19:37
>>466
x1.a == x2.a && x1.b == x2.b
というかそれ、public ないから普通にコンパイルエラーにならんか?

そのクラスを値チックにしか使わないなら Equals とか GetHashCode とか
オーバーライドして operator ==/!= 定義する。IEquatable は・・・この場合は
まぁいいか

470:デフォルトの名無しさん
09/06/14 03:19:03
GetHashCodeはオーバーライドしとけ。


471:デフォルトの名無しさん
09/06/14 03:52:16
GetHashCodeってどんなときに呼ばれんの?

472:デフォルトの名無しさん
09/06/14 04:48:38
Hashtable
Dictionary

473:デフォルトの名無しさん
09/06/14 04:48:54
Dictionaryにキーとして放り込む時とか

474:デフォルトの名無しさん
09/06/14 13:10:04
列が100、行数が20というデータテーブルを作ってDataGridViewで表示してるんですが、
ボタンをクリックするとテーブルに対してColumns.Addで列数を増やすように作ったんだけど、
なぜか1列増やすごとに1秒ぐらいかかる。
ぐぐったら「Debugは遅い」って書いてあるのを見つけたんでReleaseに変えてみたけど、
それでも0.7秒ぐらいかかってるみたい。

ボタンをクリックしてから画面が更新されるまで、ちょっとタイムラグがあるのが気になるんだけど、
もっと高速に列数を増やす方法はないですか?
マシンはPen4/2.8GHzにメモリ2GBで、極端にマシンが遅いわけでもないと思うんですが。
OSはXP SP3に無料のC#2008 NET3.5です。

475:デフォルトの名無しさん
09/06/14 13:11:11
あ、データテーブルの中身はintです。

476:デフォルトの名無しさん
09/06/14 13:20:18
追加に時間がかかってるのか、再描画に時間がかかってるのか、
どっち?

477:デフォルトの名無しさん
09/06/14 13:59:15
どっちかわかりません。
追加すると自動的に再描画されてしまうと思うのですが、
どうやったら別々に調べることが出来ますか?

478:デフォルトの名無しさん
09/06/14 14:04:08
Stopwatchクラスで時間計ってみ

479:デフォルトの名無しさん
09/06/14 16:50:00
画像を縦30横30に切り取りたいのですがどうすればいいのでしょうか?><

480:デフォルトの名無しさん
09/06/14 16:54:05
>>479
「C# 画像 切り取り」で検索すればすぐに出てくるんだけど

481:デフォルトの名無しさん
09/06/14 16:55:14
縦30、横30でコピーすればOK

482:デフォルトの名無しさん
09/06/14 16:57:06
>>48 ありがとうです0

483:デフォルトの名無しさん
09/06/14 18:24:14
パネルに編集画面を描画(Direct3D)していて、
カメラ位置を移動させるためのスクロールバーを配置したいんだけど、
1発でばしっと縦横スロールバーがつけられるコントロールってありますか?

やっぱり
親パネルの右に垂直スクロールバー配置、アンカーを上下右に設定、
親パネルの下に水平スクロールバー配置、アンカーを左右下に設定、
残った領域にスクロール操作の対象になるパネルを配置、アンカーで上下左右を設定 
みたいにしないとダメ?


484:デフォルトの名無しさん
09/06/14 21:04:31
パネルってそもそも ScrollableControl 継承してなかったか?

485:デフォルトの名無しさん
09/06/14 21:45:46
そりゃ中に大きなコントロール入れたらスクロールバー出るけど483の用途には全く適さない

486:デフォルトの名無しさん
09/06/15 05:17:28
普通、インスタンス生成するときは

Class名 名前=new Class名();
で生成できるのに

Graphicsクラスのインスタンス生成する際
Graphics gr=new Graphics();
じゃ生成できないのはなんで?
Graphics gr=CreateGraphics();
なら生成できるみたい

487:デフォルトの名無しさん
09/06/15 06:30:50
newさせたくないから。幼稚園児に油性マジック渡すようなもの。

488:デフォルトの名無しさん
09/06/15 06:50:13
幼稚園児に油性マジック渡したら
キャップし忘れてすぐだめにしちゃうよね

489:デフォルトの名無しさん
09/06/15 08:19:14
CreateGraphics()はthis.CreateGraphics()だから。

490:デフォルトの名無しさん
09/06/15 08:40:29
つまり、大人の事情でそう決まってるからとしか言いようがない。

491:デフォルトの名無しさん
09/06/15 08:54:31
大人の事情っていうと、「仕方なくそうなってる」感じがするけど、
new Graphics() できないのは仕方なくじゃなくて、その方がいい設計だからだろ。


492:デフォルトの名無しさん
09/06/15 09:21:22
でもDispose()しないといけないのは何故

493:デフォルトの名無しさん
09/06/15 09:55:13
GDIの作法を知らない世代か。

494:デフォルトの名無しさん
09/06/15 12:01:20
newとDisposeは対になるものじゃないしね

495:デフォルトの名無しさん
09/06/15 12:33:09
Dispose()はC++からのクセだろ
別にしなくてもいいし

496:デフォルトの名無しさん
09/06/15 12:51:44
やんなくてもGCが回収してくれるけど、その間リソースを持ち続ける事になるからねぇ

ファイル開こうとしたらいつまでもロックされてる とかよくある。
Closeすればいい?それならDisposeしちゃえよ。

497:デフォルトの名無しさん
09/06/15 12:58:16
>>495
ドキュメントにDispose()しろってんだからしろよ<

498:デフォルトの名無しさん
09/06/15 13:16:50
> しろよ<
よろしくにみえた

499:デフォルトの名無しさん
09/06/15 14:16:34
private void Form1_Load(object sender, EventArgs e)
()内のobject sender, EventArgs eってなんですか?

500:デフォルトの名無しさん
09/06/15 14:20:21
イベントの発生元とイベントのパラメータ

501:デフォルトの名無しさん
09/06/15 14:22:47
Loadイベントに限っていえば意味はない
イベントハンドラの引数の形式を統一するためのダミー

502:デフォルトの名無しさん
09/06/15 14:32:36
Windowsアプリケーションを製作しております。
処理に必要なデータ(CSVファイル)を、利用者側から見られないようにしたいのですが
なにか策はありますでしょうか?ご教授下さい。

503:デフォルトの名無しさん
09/06/15 14:37:10
System.Security.Cryptographyでも使って暗号化すれば
気休めだけどね

504:デフォルトの名無しさん
09/06/15 14:38:30
>>502
PC内に保存するなら簡単に見られるだろ。
見にくくしたいなら暗号化かな。
簡単な暗号でいいならxor暗号で。

505:デフォルトの名無しさん
09/06/15 14:45:17
>>502
web上に配置してsslとか

506:デフォルトの名無しさん
09/06/15 14:47:43
>>502
エロゲのセーブデータか?

507:デフォルトの名無しさん
09/06/15 14:50:33
食いつき良いなお前ら。

508:502
09/06/15 14:52:46
>>503
ありがとうございます、調べてみます。

>>504
ありがとうございます。XOR暗号、調べてみます。

>>505
Web上への配置ですか、検討してみます。

>>502
いえ、そういうのではないのですが。
そのファイルを見られてしまうとプログラム内でなにをやっているかがわかってしまうのです。

509:デフォルトの名無しさん
09/06/15 15:05:58
ファイルなんか見なくても何してるか丸見えだけどな

510:デフォルトの名無しさん
09/06/15 15:21:35
ゲームとかでネタばれになるようなのは隠したいわな

511:502
09/06/15 15:25:55
Security.Cryptographyでやってみようと思います。
本当にありがとうございました。感謝します。

512:デフォルトの名無しさん
09/06/15 15:27:12
カジュアルハックを防ぐだけならそれでいいんじゃね。

513:デフォルトの名無しさん
09/06/15 15:54:28
2次元のHashtableはつくれますか?
hash["abc"]["def"]のような。

514:デフォルトの名無しさん
09/06/15 16:05:19
Hashtable<Hashtable<T>>

515:デフォルトの名無しさん
09/06/15 16:06:45
>>514
ただし2次元ではない

もしくはそういう感じのを作ればおk

516:デフォルトの名無しさん
09/06/15 16:16:41
>>513
hasu["abcdef"]という値をキーにすれば良い

517:デフォルトの名無しさん
09/06/15 16:17:56
商用なら間違いなく仕様バグで訴えられるな。

518:デフォルトの名無しさん
09/06/15 16:18:10
>>516
そうですね、ありがとうございました。

519:デフォルトの名無しさん
09/06/15 16:18:49
>>518
hash["a"]["bcdef"]との違いがわからなくね?

520:デフォルトの名無しさん
09/06/15 16:21:27
実際は

abc = 重複のない3桁の数字
def = 重複のある1~2桁の数字

なので、>>513さんの意見で大丈夫かなと思ったのですが。

521:デフォルトの名無しさん
09/06/15 16:22:45
すいません、>>513ではなく>>516でした

522:デフォルトの名無しさん
09/06/15 16:36:00
>>520
じゃあそれでいいんでね?

523:デフォルトの名無しさん
09/06/15 16:36:05
>>519
別に汎用でなくてもかまわない。
キーが取り得る値として辻褄が合うように適宜仕様変更すれば良いんだよ。

524:デフォルトの名無しさん
09/06/15 16:38:21
>>523
適宜仕様変更すると汎用になるんでないかい

525:デフォルトの名無しさん
09/06/15 16:38:51
てか、自分でハッシュ関数作ればいいじゃん

526:デフォルトの名無しさん
09/06/15 16:42:36
目的に最適化されたハッシュか、汎用のハッシュか、どっちが高速かと言えば前者だな

527:デフォルトの名無しさん
09/06/15 16:47:04
hash[new {Fst = "abc", Snd = "def"}]
ってできる?

528:デフォルトの名無しさん
09/06/15 16:49:45
>>527
試した?

529:デフォルトの名無しさん
09/06/15 16:50:14
>>528
試してない
だって俺C#の文法知らないもん

530:デフォルトの名無しさん
09/06/15 17:03:22
はっはっは こやつめ

531:デフォルトの名無しさん
09/06/15 17:13:00
new Dictionary {{"あ","A"},{"い","I"}}

532:デフォルトの名無しさん
09/06/15 17:15:30
<string,string>追加

533:デフォルトの名無しさん
09/06/15 17:22:05
うわぁ的なことをした人がいる
URLリンク(d.hatena.ne.jp)
var dict = Dictionary
(
    x => "foo",
    y => "bar",
    Hauhau => "gaogao"
);
C#3.5以降のはず

534:デフォルトの名無しさん
09/06/15 17:27:09
わざわざそんなキモいことしなくても531で正解なんだが

535:デフォルトの名無しさん
09/06/15 17:28:57
一番軽いのはどーれだ

536:デフォルトの名無しさん
09/06/15 17:41:11
>>534
実現方法の一つで正解ってわけじゃないけど
どうでもいいわ

537:デフォルトの名無しさん
09/06/15 18:00:02
言語に組み込むのは、手段を統一させるため
昔C#のコンセプトについてそんなコメントがあった気がする

538:デフォルトの名無しさん
09/06/15 19:48:35
VC#フォームデザイナでメニューを作ったとき、キャプションに
「上書き保存)(&S)」とか入力してからダブルクリックして
メニューの Click イベントを書こうとすると

private void 上書き保存SToolStripMenuItem_Click(object sender, EventArgs e)

ってなるのが気持ち悪くてしょうがないんだけど、
みんなちゃんと飲み込めてるの?


539:デフォルトの名無しさん
09/06/15 20:09:18
お好きなようにどうぞ
・実害はないので気にしない
・リネームする
・英語キャプションでハンドラを生成して、後から日本語に変更
・先にハンドラを用意する

540:デフォルトの名無しさん
09/06/15 20:35:12
>>513
public struct ComplexKey<X, Y> : IEquatable<ComplexKey<X, Y>>

を作ってみるのは俺だけか?


541:デフォルトの名無しさん
09/06/15 21:28:02
is演算子、 as演算子って多用すべきでない?

542:デフォルトの名無しさん
09/06/15 21:50:50
キャストと比べても、パフォーマンス的には殆ど同じだから安心して使うといい。

キャストに失敗する可能性がある場合には必ずas,isを使うべき
InvalidCastExceptionをtry-catchするような方法だと桁違いに遅い。

543:デフォルトの名無しさん
09/06/15 22:32:18
if (hoge is Foo)
{
Foo foo = (Foo)hoge;
// ...
}
個人的には、上よりは下の方がいいと思うとか、細かいことを挙げたらきりがないけどな。
Foo foo = hoge as Foo;
if (foo != null)
{
// ...
}

544:デフォルトの名無しさん
09/06/15 22:49:13
>>541
as演算子のほうがキャストより高速になる場合が多いらしい

545:デフォルトの名無しさん
09/06/15 22:55:46
まあそりゃチェックが2回になるからね。
でも、そんな差を気にしなければならないのはよほどタイトな処理の時くらいだし、
普通に書いた時変数のスコープが広がるというデメリットもあるから、
別にどっちでもいいレベルだと思うけどね。

なぜかやたらとここにこだわるやつがいて不思議。


546:デフォルトの名無しさん
09/06/15 22:55:48
上は無駄な事をしてる感じなのが気に入らない
下は変数のスコープが気に入らない

scalaのswitchが使えればいいんだけどなぁ

547:デフォルトの名無しさん
09/06/15 22:56:34
質問です。
次のような配列があったとして、HighPriceの最大値を求めたいのですが、簡潔に書くにはどう書けばいいのでしょうか?

hoge[0].HighPrice = 1000;
hoge[1].HighPrice = 780;
.(略)
hoge[99].HighPrice = 300;


環境はVisual C# 2008です。よろしくお願いします。

自分で考えたのは、
「int maxにまず初期値1000を設定、あとはforループでまわしてmaxをこえていれば新たにそれをmaxに設定する」
というものですが、もっとスッキリさせられないものかと思ってます。

ちなみに、hoge[0].HighPriceは本日(0日前)の高値、hoge[1].HighPriceは1日前の高値・・・
といった設定。100日間の高値の中で最大値を求めたいんです。

548:デフォルトの名無しさん
09/06/15 23:02:07
>>547
LINQ使って
int max = hoge.Max();

549:デフォルトの名無しさん
09/06/15 23:11:18
HighPrice メンバみたいだから
int max = hoge.Select((x) => x.HighPrice).Max();
だな

550:549
09/06/15 23:15:05
あ、Max にはセレクタ指定できるのかごめん

int max = hoge.Max((x) => x.HighPrice);

かな

551:デフォルトの名無しさん
09/06/15 23:15:35
hoge.Max(x => x.HighPrice)
みたいな?


552:デフォルトの名無しさん
09/06/15 23:16:33
あ、カッコいったか、普段あまり使わないから分からなくなるよ。


553:デフォルトの名無しさん
09/06/15 23:21:10
なくてもいいと思うよ。俺は見易さと統一性でいつもつけてる
だけ。けど好みの問題だろうな。


554:547
09/06/15 23:27:57
みなさんレスありがとうございます。
>>550さんので無事できました。

LINQだとだいぶ楽に書けていいですね。
手元のC#本は古いせいかLINQについては載ってないので新版を買ってくるとします。
ありがとうございました!

555:デフォルトの名無しさん
09/06/16 01:24:51
c#で
class Test{
}
という何もないTestクラスを作って
Test test=new Test();
ってやって、

Label1.Text=test.ToString();
ってやったら宣言してないはずのTostring()が実行されるんだけど
クラスって宣言しなくても勝手にObject型を継承するようになってんの?

556:デフォルトの名無しさん
09/06/16 01:25:46
URLリンク(msdn.microsoft.com)

557:デフォルトの名無しさん
09/06/16 01:42:47
>>556
くそ真面目に継承階層にずらずら並べてるのがちょっと微笑ましい

558:デフォルトの名無しさん
09/06/16 01:49:59
>>557
スクリプト切っててわからなかった
これはひどい

559:デフォルトの名無しさん
09/06/16 01:50:21
2,768個・・なぜ並べたww

560:デフォルトの名無しさん
09/06/16 01:50:58
>>555
クラスどころかC#ではありとあらゆる型がobject継承してる。

561:542
09/06/16 08:28:40
安心して使うことにする。
みんなありがとう

562:デフォルトの名無しさん
09/06/16 13:07:53
>>556
クソワロタ

563:デフォルトの名無しさん
09/06/16 15:27:42
なんでわざわざ
Program.csとForm.csに分割してるんだ

Program.csは
Main関数の中に
Application.Run(new Form1)
みたいな産業あるだけだし・・・
意味不明

564:デフォルトの名無しさん
09/06/16 15:30:27
意味などないんだよおおおおおおおおおおおお!!!
うふっ

565:デフォルトの名無しさん
09/06/16 15:31:25
なるべくpublicなクラスは分割した方が管理しやすいから
フォームみたいなのだとなおさらね

関係ないけどそれを追求した結果、Javaなんかは1ファイル1publicクラスみたいな潔癖な事になっている

566:デフォルトの名無しさん
09/06/16 15:33:29
意味不明ってまじかよ。冗談はよせ。

567:デフォルトの名無しさん
09/06/16 16:47:11
foreach(item in arraylist) {
 if (削除条件(item)) {
  arraylist.Remove(item);
 }
}

てやっても大丈夫? ちゃんとインデックス使って

for (int i=arraylist.Count; i>=0; --i) {
 if (削除条件(arraylist[i])) {
  arraylist.RemoveAt(i);
 }
}
ってやらなきゃだめ?

568:デフォルトの名無しさん
09/06/16 16:48:31
あ、arraylist の中身は重複しません

569:デフォルトの名無しさん
09/06/16 16:53:09
foreach中はコレクションを変更できない

570:デフォルトの名無しさん
09/06/16 17:08:36
RemoveAllで

571:デフォルトの名無しさん
09/06/16 18:53:50
1個なら消せるよね

572:デフォルトの名無しさん
09/06/16 19:59:54
CheckedListBoxって、項目を選んでからチェックボックスをクリックしないと チェックできませんよね。
どの項目を選んでいるか関係なく、クリックしたら即チェックできるようにするにはどうすればいいですか?


573:デフォルトの名無しさん
09/06/16 20:05:32
CheckOnClick

574:デフォルトの名無しさん
09/06/16 20:07:00
相談室の次スレ立てれんかったわ

575:デフォルトの名無しさん
09/06/16 20:10:16
立ててやるよ

576:デフォルトの名無しさん
09/06/16 20:11:04
>>567
RemoveAll が普通だろうけど、ArrayList ってことは 1.0 縛りとか
そういうの?


577:デフォルトの名無しさん
09/06/16 20:13:27
立てたよ

578:デフォルトの名無しさん
09/06/16 20:14:25
>>577
GJ

579:デフォルトの名無しさん
09/06/16 20:35:24
Visual C# 2008 Express Edition入れたんですけど、
ライセンス登録しないとどうなるんでしょうか?
あんまパスワードとか作りたくないので、
できれば登録したくないです。

あと、どんな感じで勉強してったらいいでしょうか?
javaを2年くらいやってます。あとC言語をちょびっとやってました。

くだらない質問と漠然とした質問ですみませんが
教えてもらえたらありがたいです。
お願いします。


580:デフォルトの名無しさん
09/06/16 20:42:13
30日で使えなくなる
それだけ

Javaやってたなら簡単だと思うよ
ここで聞くことも無いかもしれない

581:デフォルトの名無しさん
09/06/16 20:43:06
一ヶ月経ったら登録しないと起動しなくなる
javaできるなら勉強しなくてもいきなり使えるはず
使いながら随時細かい違いを調べていけば十分
それができないならjavaもできてないってことだ

582:デフォルトの名無しさん
09/06/16 20:45:57
...これだと項目を選択した瞬間にチェックがつけられてしまいますが、そうではなくて
チェックボックスをクリックした瞬間とはならないでしょうか。

ちょうどチェックボックス付きの ListViewのような動作です。
それならListViewをつかえといわれそうですが、リサイズした場合に一番右側のヘッダの
右端が常にコントロール右端に一致するようにするやり方がわからないのです。


583:デフォルトの名無しさん
09/06/16 20:47:03
>>579
登録しなくても問題無くずっと使える
前は登録するとアイコンセットもらえるキャンペーンとかやってたけど
リファレンスもユーザーサイトも充実してるしJavaとVB足したような言語だから
たぶん難しくないよ

584:デフォルトの名無しさん
09/06/16 20:50:24
堂々と嘘こいてんじゃねええええええええええええええええええええええ

585:デフォルトの名無しさん
09/06/16 20:52:49
嘘を付く時は堂々とするとバレにくいよおおおおお

586:デフォルトの名無しさん
09/06/16 20:53:16
DVDイメージ版は登録いらないんだっけ

587:デフォルトの名無しさん
09/06/16 20:53:40
登録はWebインストール版の話

588:デフォルトの名無しさん
09/06/16 20:54:59
URLリンク(www.microsoft.com)

Visual Studio 2008 Express Edition を Web インストールにて入手いただいたお客様は、ご使用に当たってライセンス認証が必要となります。
ライセンス認証キー発行の過程において Live ID によるユーザー登録をお願いしております。
無料のライセンス認証キーにより、Visual Studio 2008 Express Edition を、30 日間の期限を過ぎても使用できるようになります。

589:デフォルトの名無しさん
09/06/16 20:57:44
あほばっかりや

590:デフォルトの名無しさん
09/06/16 21:19:22
そもそもパスワードなんてあったか?

591:デフォルトの名無しさん
09/06/16 21:22:14
製品登録する用LiveID取得するためにパスワードが必要
LiveID持ってれば製品登録してメール送られてくるだけ

592:デフォルトの名無しさん
09/06/16 21:26:19
俺は登録した覚えないからなんのこっちゃと思いながらレス読んでたけど、
Webインストールだけなのね。DVDから入れたわ。

593:デフォルトの名無しさん
09/06/16 22:07:46
>>582
ならListViewでSizeChangedでColumnHeaderのWidthいじればいいんじゃね
ダブルクリックとかスペースキーでチェック状態変更するときはどうすんのかね

594:デフォルトの名無しさん
09/06/16 22:22:15
LiveIDくらいは作っといてもいいと思うぞ。
既に持ってる人も多いだろうし。


595:デフォルトの名無しさん
09/06/16 22:37:01
>>582
マウスイベントでマウスポインタの位置を取得して
ClickかSelectedIndexChangedあたりで選択されたインデックスの
チェックボックスの領域がクリックされたらItemCheckみたいな方法しか
ないんじゃないかね

596:デフォルトの名無しさん
09/06/16 22:45:33
static classって使い終わってもGCにコレクトされないの?

597:デフォルトの名無しさん
09/06/16 22:49:39
>>596
使い終わるってどういう状態のこと?

598:デフォルトの名無しさん
09/06/16 22:51:47
c#ってさ、スタドアロン(.Net Framework インストールしてなくても動くって意味で)な exe つくれる?
なんていうか、DLL全部EXEに組み込むみたいな。

599:デフォルトの名無しさん
09/06/16 23:01:36
MONOはネイティブコンパイルできたと思うよ

iPhoneでC#製プログラムを動かすだかって話の時に読んだ

600:デフォルトの名無しさん
09/06/16 23:13:20
>>599
aot オプション付けるだけみたい。

601:デフォルトの名無しさん
09/06/16 23:19:14
なんだ。じゃあ駄目だな

602:デフォルトの名無しさん
09/06/17 00:23:54
数字を入力してその数字に見合った数だけの文字を表示するためのプログラムを組んでいるのですが
二重ループがうまくいっていないらしく希望の結果になりません、修正点を教えてください

希望のプログラム
5(ここは任意の数字を入力)
*
**
***
****
*****

このように任意の数字を入力しそれまでの間1づつ増加した*を並べたいです

組んだプログラム
#include<stdio.h>
int man()
{
int a,b,c;
scanf("%d",&b);
a=0;
c=0;
while(a<b)
{
while(c<=a)
{
printf("*")
c++;
}
a++;
printf("\n");
}
}

603:デフォルトの名無しさん
09/06/17 00:24:44
上記のプログラムで走らせると
*
*
*
*
*

となってしまいます、
*
**
***
****
*****
とするにはどこを修正すればいいのでしょうか、よろしくお願いします

604:デフォルトの名無しさん
09/06/17 00:29:20
スレタイも読めないのか

605:デフォルトの名無しさん
09/06/17 00:31:51
誤爆しました

606:デフォルトの名無しさん
09/06/17 00:34:27
>>604
ただ叩くだけじゃなくてちゃんと誘導してやろうぜ、一応初心者スレなんだから
自分は他人に教えられる、えらい存在だなんて思ってるなら出て行ってくれ

>>603
それは違う言語だね、こっちのスレで質問したほうがいいと思います

スレリンク(tech板)

607:デフォルトの名無しさん
09/06/17 04:45:27
ちなみに、C#としての解決法なら、
その数値にToString()をかけた上でその文字列の長さを見るところだろうな。
C++なら桁数を求める数値計算をさせるだろう。

608:デフォルトの名無しさん
09/06/17 07:41:51
えっ

609:デフォルトの名無しさん
09/06/17 08:11:58
>>607
c=0の位置間違えてる限り、何やってもw


610:デフォルトの名無しさん
09/06/17 08:13:11
変数を初期化する場所が違うだけ

611:デフォルトの名無しさん
09/06/17 08:27:14
for(int a=1; a<=5; a++)
  Console.WriteLine(new String('*', a));

612:474
09/06/17 17:30:18
>>474です。遅い原因がわかりました。
昔 ColumnHeaderHeightSizeMode = AutoSize
今 ColumnHeaderHeightSizeMode = DisableResizing
プロパティ1つ変えたら10倍速くなりました。

613:デフォルトの名無しさん
09/06/17 19:48:37
へぇーすごいじゃん。

614:デフォルトの名無しさん
09/06/17 19:51:19
特許でガッポガッポ

615:デフォルトの名無しさん
09/06/17 22:59:12
Tagプロパティって無い方がよくね?

616:デフォルトの名無しさん
09/06/17 23:02:36
== と != をオーバーライドしてたんですが、
やっぱりオーバーライドをやめることにしました。
ついては、オーバーライド
してた演算子を全部検索して、
Equals に書き換える必要が生じたんですけど、
どこでオーバーライドされた演算子が使われているか検索する
方法はないでしょうか?




617:デフォルトの名無しさん
09/06/17 23:04:39
消してコンパイルしてみたら

618:デフォルトの名無しさん
09/06/17 23:07:08
参照型だと消してもコンパイル通るのか
右クリックで「すべての参照の検索」は?

619:デフォルトの名無しさん
09/06/17 23:11:36
プログラミング自体5ヶ月の経験の初心者です
javaを2ヶ月勉強した後に、仕事で3ヶ月前からC#触っています
いろいろな方から聞いたのですが、参照型の値の比較をするときはjavaの時はequalsを使うのは当たり前でしたが、
C#だと==で問題ないって方が多いのですが、これはどういうことなのでしょうか?
C#はそもそも参照型の概念がjavaとは違うのですか?
==を使うとき、C#だと値自体の比較がされるということなのでしょうか?

620:616
09/06/17 23:15:25
>>617
すべての参照の検索だと拾ってくれないんですよ。
困った。

621:デフォルトの名無しさん
09/06/17 23:19:09
>>619
== をオーバーロードして値比較にすること「も」できる String とかだな
作法として == をオーバーロードする場合は Equals もオーバーライドして == と同等の動きをするようにする
必ず参照を比較したい場合は Object.ReferenceEquals を使う

622:デフォルトの名無しさん
09/06/17 23:23:06
>>619
java知らんけど参照型の比較は言い換えれば参照情報の比較なんだから
==で問題無いかどうかって問題か?
例えばあaとbに1を入れて比較しても参照位置が違えばfalseになるってだけ

623:デフォルトの名無しさん
09/06/17 23:31:50
>>616
オーバライドしたままで例外を投げるようにして実行する
例外が出なくなったらオーバライドやめる

624:デフォルトの名無しさん
09/06/17 23:34:59
>>619
JavaもC#も==とequals/Equalsの根底は同じ:
==は参照が同じか比較する。equals/Equalsも基本そうだが、オーバーライドして値の等価比較にもできる。

ところが、C#の場合、==演算子を直接、多重定義できる。
特にStringなんかでは型安全ということで、==演算子が推奨されている。
URLリンク(sonic64.com)

しかし、そういう一部を除いてC#でも基本的にはEquals推奨だよ。
URLリンク(msdn.microsoft.com)
URLリンク(msdn.microsoft.com)

625:デフォルトの名無しさん
09/06/17 23:35:28
>>616
これがドンぴしゃだと思うけどどう?
URLリンク(msdn.microsoft.com)
コンパイル時警告になるはず。

626:デフォルトの名無しさん
09/06/17 23:38:16
>>619
Stringのように値を変更できない型に限り、参照型でも==をオーバーロードしてよい

627:デフォルトの名無しさん
09/06/17 23:40:01
演算子がオーバーロードできない言語は糞。

628:デフォルトの名無しさん
09/06/17 23:44:13
immutableなオブジェクトは、別々に代入されても、最適化によって
実体は同じになっている可能性が高い。Cの文字列リテラルがそもそも
そういう傾向だったし。
s1 = "abc"; s2 = "abc"; と書いたときに、s1 == s2が
真かどうか分からないんじゃ使い物にならないので、内容が同じなら
同一オブジェクトかどうかは問わず真にしよう、という趣旨だと思う。
ただし、単に思いついただけなので、根拠はない。

629:デフォルトの名無しさん
09/06/17 23:45:54
結構前にも同じような話したことあるようなないような

630:デフォルトの名無しさん
09/06/17 23:46:41
あってるよ
それを保証するために>>626のガイドラインがある

631:デフォルトの名無しさん
09/06/18 00:05:37
>>628
> immutableなオブジェクトは、別々に代入されても、最適化によって
> 実体は同じになっている可能性が高い。
ここに関してはimmutableなオブジェクトでなくリテラルの話だよね
動的に作られたimmutableなオブジェクトがそうなる可能性は高くないと思うよ
そんな最適化はむしろ効率が悪そうだ

632:デフォルトの名無しさん
09/06/18 03:00:46
まさかのflyweightパターン全否定
関係ないけどさ

633:デフォルトの名無しさん
09/06/18 04:01:30
関係なさ過ぎだろ

634:616
09/06/18 08:26:40
>>625
ビンゴ!Obsolateにこんな使い方があったとは。
勉強になりました。

ありがとう♥

635:デフォルトの名無しさん
09/06/18 09:36:53
>>623
ifとかcaseで滅多に実行されないレアケースがあるから
いつまでも削除できない

636:デフォルトの名無しさん
09/06/18 12:09:44
質問いいですか?
ウェブ上で画像をバイナリとしてデータベース上にアップして
そのバイナリファイル(JPG画像)を
response.binaryWrite(file.content)って呼び出してウェブ上(displayJPEG.aspx)に画像だけを
表示させたいんですけど、
どうやっても真っ白なバックグラウンドに、そのaspxファイルのURLしか表示されません。
しかもそのURLがJPG画像?みたいになってて、テキストじゃないんです。
何が何だか良く分からなくてお手上げ状態なんでアドバイスください・・・
画像のアップロードの仕方に問題があるのでしょうか?

637:デフォルトの名無しさん
09/06/18 13:02:30
file.contentはバイト配列?

638:デフォルトの名無しさん
09/06/18 13:06:35
いったんファイルに出してみて、それを直接URLで読んだらどうなる?
ヘッダとかだいじょうぶ?

639:デフォルトの名無しさん
09/06/18 13:13:53
>>637
バイト配列です。
>>638
いったんファイルに出して直接URLで読むっていうのはどういう意味でしょうか・・・?
初心者すぎてすみません・・・


コードはこんな感じです。

public partial class displayThumb : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

projectFilesTableAdapter filesTableAdapter =
new projectFilesTableAdapter();

ProjectDataSet.projectFilesDataTable files =
filesTableAdapter.GetProjectWithContentByFileID(37);

ProjectDataSet.projectFilesRow file = files[0];

Response.ContentType = "image/jpg";

Response.Write(file.projectContent);
}
}




640:デフォルトの名無しさん
09/06/18 13:17:59
Response.Write?

641:デフォルトの名無しさん
09/06/18 13:21:53
>>640
すみません、binaryWriteです。
でもbinaryWriteでも表示されませんでした・・・
これってもしかしてデータが壊れてるとかそういうのが原因でしょうか?
projectContentはデータタイプをbinary(7000)って設定したんですけど
2kb以上の画像をアップして表示させようとしてます。
これが原因だったりしますかね・・・

642:デフォルトの名無しさん
09/06/18 13:26:44
>>641
すみません訂正です。2kbー>20kb以上
なんかもうテンパっててすみません

643:デフォルトの名無しさん
09/06/18 13:44:07
すいません自己解決しました・・・

644:デフォルトの名無しさん
09/06/18 13:44:41
なんで7KB上限のに20KB入れようとするんだ

645:デフォルトの名無しさん
09/06/18 13:51:03
先生・・・デストラクタが恋しいです・・・
struct使うと簡単にDisposeの後処理できるのかなぁ

646:デフォルトの名無しさん
09/06/18 13:51:56
C# 2008 express edition をインストールしたのですが
ライセンス登録が出来なくて困っています
Windows Live ID を作成し、登録画面にサインインできるのですが
サインインした先で
画面が読み込み中(画面中央で点が丸く点滅)のまま止まっています
日付を変えて試みても結果は同じでした
解決方法があれば教えてください
よろしくお願いします

647:デフォルトの名無しさん
09/06/18 14:07:15
>>646
ISOイメージ落としてCDに焼いて、CDからインストールすれば登録不要。

648:デフォルトの名無しさん
09/06/18 14:12:46
火狐などの別ブラウザでやってみ

649:デフォルトの名無しさん
09/06/18 14:25:46
>>644
そこが狙いだったんでしょうね。
今回はまんまと引っかかっちゃったって感じです・・・

650:646
09/06/18 14:40:26
>>647
>>648 様 ありがとうございました
ブラウザにChromeを使っていたのが原因だったようです
I.Eで無事に登録することができました

651:デフォルトの名無しさん
09/06/18 14:47:15
Chromeじゃあ仕方ないな

652:デフォルトの名無しさん
09/06/18 14:55:45
そりゃそうだ ハッハッハッ

653:デフォルトの名無しさん
09/06/18 15:29:58
俺前やったときfirefoxでも止まったような気がする

654:デフォルトの名無しさん
09/06/18 15:30:28
Windows 7 DLしようとするとIEだと646のいう画面でリロード繰り返しの半無限ループ
になってDLできないが、FFでやるとすんなりDLできた。

655:デフォルトの名無しさん
09/06/18 15:48:03
そりゃそうだ ハッハッハッ

656:デフォルトの名無しさん
09/06/18 16:11:03
リストボックスにファイルをリストして、ファイル名のみを表示したとき、
listbox.SelectedItemからそのファイルのあるフォルダを探すには、
再度検索しないとだめでしょうか? フルパスは捨てられちゃう?

657:デフォルトの名無しさん
09/06/18 16:15:58
適当に作ったクラスにフルパスとプロパティ作って
そのリストとか配列をDataSourceにするといいよ あとDisplayMemeber

658:デフォルトの名無しさん
09/06/18 16:17:24
×フルパスとプロパティ
○フルパスと名前の2つのプロパティ

659:デフォルトの名無しさん
09/06/18 18:05:12
Visual Studioでプロジェクトのプロパティを開くとアイコンを登録できますが、
ここでは何ピクセル、何色のアイコンを用意するのがベターなのでしょう?

また、OSが勝手に縮小や減色するのを避けるために、あらかじめ小さく作った
複数のアイコンを埋め込む方法も教えてください。

660:デフォルトの名無しさん
09/06/18 18:41:28
アイコンを複数入れる方法はなんとなくわかりました。
エクスプローラーで表示される可能性のあるアイコンの種類の一覧って
どこかにありますか?

661:デフォルトの名無しさん
09/06/18 20:03:32
アプリケーションのメインフォームを取得する方法を教えていただきたい。

662:デフォルトの名無しさん
09/06/18 20:09:06
Application.Runする前に静的フィールドに保存しとけ、とか
ApplicationContext 作って管理しろ、とか
じゃない話?

663:デフォルトの名無しさん
09/06/18 20:26:16
ライブラリに組み込みたいのでRanに渡したフォームを簡単に
取得できるものがあればと思ったんですが、ApplicationContext
を調べてみます。
ありがとう

664:デフォルトの名無しさん
09/06/18 21:54:45
>>660
一つのアイコンファイルに複数の大きさの画像が格納されててエクスプローラが自動選択で表示してるだけだから、
VSでどうこうするんじゃなくてそういうアイコンを作れ

665:デフォルトの名無しさん
09/06/18 22:02:21
256x256,48x48,32x32,16x16が各8bit,32bitあれば事足りるらしい
事足りるっつーには多いが

666:デフォルトの名無しさん
09/06/18 22:33:46
>>645
struct使っても状況が良くなるとは思えないけど、
usingも慣れればそんなに悪くないよ。

667:デフォルトの名無しさん
09/06/18 23:27:18
>>664-665
わかりました。
アイコンが8個入ったファイルを作ることにします。

668:デフォルトの名無しさん
09/06/18 23:45:20
>>665
無い大きさで表示するときはどうなるの?

669:デフォルトの名無しさん
09/06/18 23:49:47
小さいのを拡大するなり大きいのを縮小するなりするんだろ
96表示時は256のを縮小するらしいぞ

670:デフォルトの名無しさん
09/06/18 23:57:25
というか 256x256 は PNG 形式である必要があるはずなんだけど
それ VS で作れたっけ?
駄目なら Vista 対応とか PNG 形式対応とかそんな感じのアイコン
エディタ使わないといけないでふよたぶん。

671:デフォルトの名無しさん
09/06/19 00:28:41
>>670
PNGならmspaintでいいんじゃないか?

672:デフォルトの名無しさん
09/06/19 00:50:10
PNGそのものじゃなくて、icoファイルの中にPNG形式のを突っ込むのな

673:デフォルトの名無しさん
09/06/19 02:09:28
>>657
サンクス。やっぱり自分で保存しないと捨てられちゃうのね。


674:デフォルトの名無しさん
09/06/19 03:39:28
一つのボタンをクリックするごとに同じ場所に重ねてあるラベルを順々に最前面に表示させる方法を教えてください。

説明文を作ろうとしていて、ボタンを押すごとに説明文が次のものに切り替わるようにしたいです。

675:デフォルトの名無しさん
09/06/19 03:42:13
ラベルのText変更すりゃいいような気がするけど
バインディングとか

BringToFront

676:デフォルトの名無しさん
09/06/19 04:12:17
>>675

ラベルを書き換えればいいんですね。
やってみます。

677:デフォルトの名無しさん
09/06/19 05:13:59
ソリューションエクスプローラで
Form1csにForm1.Designer.csが付いてるようになってるけど、
自分で追加したClass1.csに他のソースファイルを付けるにはどうすればいいの?
ドロップできないし、partialにしてもそうならないんですが

678:デフォルトの名無しさん
09/06/19 05:29:13
コンボボックス内のアイテムを選択すると、指定したラベルが表示されるようにするにはどうしたらいでしょうか?
コンボボックスはDropDownListで使います。

679:デフォルトの名無しさん
09/06/19 05:36:50
>>677
昔csprojファイルを直にいじったらできたような記憶がある
たしかこれと同じようにすればよかったと思う
<Compile Include="Form1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>

680:デフォルトの名無しさん
09/06/19 05:44:53
>>678
ラベルを配列かList<Label>にでも入れといて
SelectedIndexChangedイベントが発生したら
そのインデックスに対応するラベルを表示

681:デフォルトの名無しさん
09/06/19 05:58:23
>>679
<DependentUpon>で付けるみたいですね
ありがとうございました

682:デフォルトの名無しさん
09/06/19 09:06:55
VS2008 SP1です。

INotifyPropertyChanged を実装したクラス「Sample」を
ジェネリックの List<Sample> に2個ほど入れ、
DataGridView の DataSource に突っ込んだところ
みごとにバインドされました。

しかし、コードでSampleクラスの値を変えても
DataGridView のフォーカスのある行しか値が更新されません。
すべての行(この場合2行)が更新されるにはどうすればよろしいでしょうか?


683:デフォルトの名無しさん
09/06/19 09:08:12
>>682 のコードです。

class Sample : INotifyPropertyChanged
{
public Sample
{
}
private bool _count;
public bool Count
{
get { return _count; }
}
private DateTime _date;
public DateTime Date
{
get { return _date; }
}
public void Update()
{
_count++;
_date = DateTime.Now;

if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("Count"));
PropertyChanged(this, new PropertyChangedEventArgs("Date"));
}
}
#region INotifyPropertyChanged メンバ
public event PropertyChangedEventHandler PropertyChanged;
#endregion
}

684:デフォルトの名無しさん
09/06/19 09:09:44
>>682 の実行コードです。



// 2つほど入れる
List<Sample> sampleList = new List<Sample>{ new Sample(), new Sample };



dataGridView1.DataSource = sampleList;



// スレッドで定期的に更新する
foreach (var item in sampleList)
{
item.Update();
}

685:デフォルトの名無しさん
09/06/19 09:56:41
IBindingListが必要なんでList<T>の代わりにBindingList<T>を
あとスレッドでって言ってるけどInvoke/BeginInvokeは大丈夫か? データソースいじるときも同期が必要だぞ

686:デフォルトの名無しさん
09/06/19 10:35:28
>>685
BindingListに変更し、Invokeメソッドで実行してみましたが、

PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Count"));

GUI上では DataGridView の現在選択中の行しか値は更新されませんでした orz

687:デフォルトの名無しさん
09/06/19 10:39:49
>>685
いえ、全部の行が更新されています!
ありがとうございました!orz

688:デフォルトの名無しさん
09/06/19 10:42:53
どうでもいいがそのInvokeじゃないぞ
Control.Invokeの方

689:デフォルトの名無しさん
09/06/19 10:53:33
>>688
手順としては

1.Sample クラスでプロパティの変更を感知
2.?
3.DataGridView または DataGridView の所属する Form で
Control.Invoke(?) を呼び出す。

ということでしょうか?

690:デフォルトの名無しさん
09/06/19 11:01:42
Updateの呼び出しそのものをInvoke経由で
バインディングされてるオブジェクトは扱いも慎重にしないとダメよ

691:デフォルトの名無しさん
09/06/19 11:16:33
C#でのスレッド間同期制御について教えて欲しいんだけど、先にソースを。

//C#での実装(失敗、デッドロックする)
//※インデントに全角空白*2を使用
public class ThreadMain{
  private EventWaitHandle lockObj;
  public ThreadMain(EventWaitHandle lockObj){
    this.lockObj = lockObj;
  }
  public void run(){
    lock(lockObj){ //ここには入れない
      Console.WriteLine("sub in sync");
      lockObj.Set();
      Console.WriteLine("sub out sync");
    }
  }
}
public void test(){
  EventWaitHandle lockObj = new EventWaitHandle(false, EventResetMode.AutoReset);
  ThreadMain tm = new ThreadMain(lockObj);
  Thread t = new Thread(tm.run);
  lock(lockObj){
    t.Start();
    Console.WriteLine("main in sync");
    lockObj.WaitOne(); //ここで待機中の間だけlockObjを解放したい
    Console.WriteLine("main out sync");
  }
}

692:デフォルトの名無しさん
09/06/19 11:17:29
//javaでの実装(期待通りに動く)
//※インデントに全角空白*2を使用
public class Test{
  public static class ThreadMain implements Runnable{
    private Object lockObj;
    public ThreadMain(Object lockObj){
      this.lockObj = lockObj;
    }
    public void run(){
      synchronized(lockObj){
        System.out.println("sub in sync");
        lockObj.notifyAll();
        System.out.println("sub out sync");
      }
    }
  }
  public static void main(String args[]) throws InterruptedException{
    Object lockObj = new Object();
    ThreadMain tm = new ThreadMain(lockObj);
    Thread t = new Thread(tm);
    synchronized(lockObj){
      t.start();
      System.out.println("main in sync");
      lockObj.wait(); //待機中はlockObjのモニタは解放されている
      System.out.println("main out sync");
    }
  }
}

693:デフォルトの名無しさん
09/06/19 11:18:59
上(>>691)のプログラムで、
main in sync
sub in sync
sub out sync
main out sync
というシーケンスになるようにしたいんだけど、どうしたらいいだろう?

期待している動作は、メインスレッドがWaitOneに入るときlockObjのロックが解放されて、
サブスレッドがSet()して、さらにlock文から抜けた後、
mainがlockObjのロックを再獲得してWaitOneから復帰するようなイメージ。

Visual C# 2005 Express SP1 (.NET 2.0)

694:デフォルトの名無しさん
09/06/19 11:29:32
lockとEventWaitHandleは全然別物なんだからそりゃうまくいくわけないな
lockはMonitorの糖衣構文だから、Monitor.WaitとMonitor.Pulseを使えば

695:693
09/06/19 11:29:40
あ、待機はスピンロックでなければ、EventWaitHandle,lock以外でも良いです

696:デフォルトの名無しさん
09/06/19 11:30:38
>>694
レスサンクス
ちょっとやってみる

697:デフォルトの名無しさん
09/06/19 11:38:20
うほ出来た
Monitorクラスはlock文用のEnterとExitしか無いと思い込んでた^q^
>>694 ありがとう

(変更点)
//EventWaitHandle lockObj
Object lockObj

//lockObj.Set();
Monitor.Pulse(lockObj);

//lockObj.WaitOne();
Monitor.Wait(lockObj);

698:デフォルトの名無しさん
09/06/19 13:30:18
VC++のCTreeCtrl(MFC)
CTreeCtrl::GetEditControl
に相当する処理を、
C#のTreeView
で探しています(VS2005 .NET Framework 2)。
なんとかして、エディット コントロールのハンドルが欲しいんですが、
どうしたらいいか、わかる人おられませんか?


699:デフォルトの名無しさん
09/06/19 14:46:48
道路標識みたいなアイコンのついたダイアログってどうやって出すんでしょう?
フォームを自作しなくても、既製の部品があると読んだ覚えがあるんですが、
どうしても思い出せません。

こういうやつです。
URLリンク(f.hatena.ne.jp)

700:デフォルトの名無しさん
09/06/19 14:53:41
MessageBox.Show("text", "caption", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

701:デフォルトの名無しさん
09/06/19 14:54:07
MessageBoxIcon

702:699
09/06/19 15:03:01
ありがとうございます。助かりました。

703:デフォルトの名無しさん
09/06/19 16:10:51
INTもクラスなんだなー
int x=new int();
x=12;
ってやってもちゃんとできるね。

704:デフォルトの名無しさん
09/06/19 16:26:27
クラスじゃないです

705:デフォルトの名無しさん
09/06/19 16:58:00
とりあえずINTとIntとintは違う物なので
きちんと書き分けないと話が通じなかったりするぞ

706:デフォルトの名無しさん
09/06/19 17:00:17
object i = 3;

なんてこともできます。
実際はboxingでInt32に変換されてるだけですが。

707:デフォルトの名無しさん
09/06/19 17:04:58
Int32に変換? 「から」だろ?

708:デフォルトの名無しさん
09/06/19 17:11:03
class Program {
static void Main(string[] args) {
object i = 3;
Console.WriteLine(i.GetType().FullName);
}
}


709:デフォルトの名無しさん
09/06/19 17:12:57


namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void Func(ref int x){
x=10;
}

private void Form1_Load(object sender, EventArgs e)
{
int y;
this.Func(ref y);
}
}
}

これコンパイルできない
引数に10を代入する関数Func作ったが
this.Func(ref y)のyがグローバルとか意味輪からんことでてきてる
どうすればなおせる?

710:デフォルトの名無しさん
09/06/19 17:15:32
エラー CS0165: 未割り当てのローカル変数 'y' が使用されました。

711:デフォルトの名無しさん
09/06/19 17:16:04
refじゃなくてout使っとけ
それかyに初期値代入しとくか

つかエラーメッセージぐらいちゃんと書け

712:デフォルトの名無しさん
09/06/19 17:45:54
豆知識
ダイアログがアクティブな状態でCtrl+Cを押すと
エラーメッセージがクリップボードに入るぞ

713:デフォルトの名無しさん
09/06/19 19:10:26
常識だろjk

714:デフォルトの名無しさん
09/06/19 22:32:06
練習として、例のごとくテキストエディタを作っているのですが、「切り取り」「コピー」「削除」の表示について質問です。
テキストが選択されている間のみ上記のメニューを選択できるようにしたいのですが、上手く表示されません。

具体的には、
TextBox内のテキストを選択している状態で編集メニューを開いても上記のメニューは選択できる状態にはならず、
右クリックでメニューを表示してから編集メニューを開くと上記のメニューが選択できる状態になります。
右クリックをした瞬間に何かを呼び出しているんでしょうか?

ちょっとわかりにくいでしょうか・・
ご教授願います。

715:デフォルトの名無しさん
09/06/19 23:23:00
>>714
メニューを開かれるタイミングで調べるんじゃなくて、
TextBoxの選択が変わったときにメニューのプロパティを書き換えるんだ。

716:デフォルトの名無しさん
09/06/19 23:24:18
メニューってContextMenuStripなのかMenuStripなのか
どっちにしろOpendイベントで判定すればいいと思うけど

717:デフォルトの名無しさん
09/06/20 01:06:17
string[] line = text.Split('\n');
string[] cell = line.Split('\t');
と書いたとき、
for (int i = 0; i < line.Length; i++) {textBox[i].Text = lineView[i];}
みたいに行は書けるけど、[i]行目のcell[0]はなんて書けばいいのでしょうか?

718:デフォルトの名無しさん
09/06/20 01:08:21
>string[] line = text.Split('\n');
>string[] cell = line.Split('\t');

どうみてもエラーです

719:デフォルトの名無しさん
09/06/20 01:23:29
列数が固定(widthとする)なら

string[] cells = table.Split(new char[]{'\t','\n'},StringSplitOptions.None)

ここでx列y行はcells[x+y*width]

720:デフォルトの名無しさん
09/06/20 01:53:38
なるほど。
cells[0] | cells[1] | cells[2]
cells[3] | cells[4] | cells[5]
と左から順番に設定するんですね!
これはすごい。
サンクス!!!


721:デフォルトの名無しさん
09/06/20 01:58:09
あんまりアホなこと教えないであげてください

722:デフォルトの名無しさん
09/06/20 02:03:07
微笑ましいじゃないか。

723:714
09/06/20 02:57:30
>>715
できました!
ありがと~

Opendイベントとやらも調べてみます

724:デフォルトの名無しさん
09/06/20 02:59:17
どういたしまして

725:デフォルトの名無しさん
09/06/20 03:09:50
スレチな質問なんですがどこで聞いたら良いのか分からないので
ここで質問させてください。

Visual Studio 2008 StdのC#でGUIなアプリケーションを作成しているのですが、
ファイルを参照するボタンに画像を貼り付けたいと思います。

凝った画像ではなく、エクスプローラの「ファイルを開く」メニューに表示
されているようなアイコンで構わないのですが、どこかで配布されているの
でしょうか?

それとも皆さん毎回オリジナルの画像を作っているのですか?

726:デフォルトの名無しさん
09/06/20 03:18:13
初心者スレなのでアホな質問にも回答するが、スレ違いはお断り

727:デフォルトの名無しさん
09/06/20 03:27:21
>>725
MDI親フォームのリソースファイルの画像を使うとか。

728:デフォルトの名無しさん
09/06/20 03:29:33
シェルアイコンに微妙なセンスのアイコンがいっぱいある。

729:デフォルトの名無しさん
09/06/20 03:34:12
>>726
すまんです。

>>727-728
Windowsのシステムアイコンを抜き出して使うと言うことでしょうか?
アイコンの抜き出し方は知ってますが、やはりまずいですよね?


ここで聞けというスレがあれば誘導していただけるとありがたいです・・・

730:デフォルトの名無しさん
09/06/20 03:36:04
スレ違いだってわかってるなら汎用質問スレいけよカス

731:デフォルトの名無しさん
09/06/20 03:39:24
c#とVB両方インスコしちゃったら
ソリューションファイル開くときに
VisualC#とVBどっちで開くか聞いてきてうざい
VBけしたほうがいい?

732:デフォルトの名無しさん
09/06/20 03:45:03
>>731
>>726


733:デフォルトの名無しさん
09/06/20 03:57:11
>>725
インスコ先探せばVS2008ImageLibraryってのが多分どっかにある。無くても確かMSDNから落とせる。
>>731
.slnの関連付けを変えればいい。

まあ、無駄レス付けるくらいなら答え付けてもいいんじゃねってことで。
どこで聞いていいのか分らんなら汎用スレがある。次からこっち行ってね。

スレ立てるまでもない質問はここで
スレリンク(tech板)

734:727
09/06/20 04:13:29
>>729
ソリューションの新しい項目を追加でMDI親フォームを追加すると
アイコンついたボタンが最初からフォーム上にあるからその画像を使ったらって意味。
その画像の元はフォームのリソースファイルにある。

735:デフォルトの名無しさん
09/06/20 04:49:24
Visual Studio 2008 Part 17
スレリンク(tech板)

こっち行け

736:デフォルトの名無しさん
09/06/20 06:11:38
>>730
お前もいい加減スルーを覚えろよクズ

737:デフォルトの名無しさん
09/06/20 06:19:20
VS2003しか知らんが確かアイコン集が入っていたはず。
Common7フォルダだったかな?
最近は付いてないのかな?

738:デフォルトの名無しさん
09/06/20 06:34:03
あるスレッドで設定した変数を他のスレッドでも使うにはどうしたらいいでしょうか?
具体的にはBackgroudWorkerで設定した変数をstaticの変数に入れたいのです
別のスレッドではstaticが共有されないみたいなので行き詰ってしまいました。お願いします

739:デフォルトの名無しさん
09/06/20 06:45:42
silverlightでデータベース上に存在するバイナリファイルを呼び出してウェブ上で再生したいんですけど、どうすればいいのか分かりません。
誰かやり方or良いサイト知ってれば教えてください
英語でも構わないっす

740:デフォルトの名無しさん
09/06/20 08:07:50
>別のスレッドではstaticが共有されないみたい
そんなわけがない。
もしくは何か勘違いしてる。


741:デフォルトの名無しさん
09/06/20 08:24:41
>>740
なにか言葉足らずだったかもしれません、すいません
URLリンク(www.atmarkit.co.jp)
ここに共有されないと載っていたので
もう少しいろいろやってみます

742:デフォルトの名無しさん
09/06/20 09:24:56
C#初心者です。
ConvertとかString.Formatとか、特にnewで作成してないのに
使用できるクラスのメソッドがありますが、自分でもそんなクラスを作りたいのですが
どうすれば良いですか?

743:デフォルトの名無しさん
09/06/20 09:34:17
public int Method(int value){...}

public static int Method(int value){...}

744:デフォルトの名無しさん
09/06/20 09:36:22
>>741
お、おまえは何を言っているのだ??


745:デフォルトの名無しさん
09/06/20 09:42:21
742
クラスがpublicでなかったようです。解決しました。

746:デフォルトの名無しさん
09/06/20 09:45:00
>>743
ありがとうございます。メソッドをstaticにしてみます。

747:738
09/06/20 10:13:29
public class userData
{
static public int a;
static public string b;
}

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
userData.a = 10;
userData.b = "abc";
}

private void button1_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
MessageBox.Show("a : " + userData.a + ",b : " + userData.b);
}

わかりにくくてすいません
こんな感じでaとbを表示させたいのですが、どこがいけないのでしょうか

748:デフォルトの名無しさん
09/06/20 10:19:36
>>747
backgroundWorker1のRunWorkerCompleted イベントを作って、
その中で MessageBox.Show() を叩けば幸せになれるお。

749:デフォルトの名無しさん
09/06/20 10:25:41
>>748
ありがとうございます
表示できましたが、このaとbをBackgroundWorker以外でも使いたいのですが、これだとだめですよね?

750:デフォルトの名無しさん
09/06/20 10:34:29
>>749
俺はそういうことをしないようにしてるから、大正解の方法が分らんw
BackgroundWorkerの 「IsBusy プロパティが真の間は処理を待つ」とかかな?

751:デフォルトの名無しさん
09/06/20 10:35:57
>>750
そんなこと言ったらビジーループで待ってしまうじゃないか

752:デフォルトの名無しさん
09/06/20 10:39:25
>>750の補足

というか、BackgroundWorkerの処理完了後の動作はRunWorkerCompleted内に書けば全て解決。
button1は別スレッドを始動させるためだけのボタンと考えればいいんじゃないかな

>>751 本末転倒だなorzwww

753:デフォルトの名無しさん
09/06/20 10:55:32
そもそもバックグラウンドで処理するってのがどういうことか全然分かってないのかな?


754:デフォルトの名無しさん
09/06/20 11:06:57
順番に処理したいんなら普通に関数として呼ぶよな

755:デフォルトの名無しさん
09/06/20 11:07:11
一定時間ごとに前のBackgroundWorkerで設定したa,bを使ってまた処理させるみたいな感じなんですが、ちょっとやってみます

>>753
別スレッドで処理するってことくらいしかわかりません

756:デフォルトの名無しさん
09/06/20 11:11:18
>>754
結構時間がかかる処理なのでBackgroundWorkerでやってます

757:デフォルトの名無しさん
09/06/20 11:18:25
お前のレベルだとちょっと危ないな。
共有データの更新タイミングの同期とか、
何も考えてないってか気をつけなきゃならないって事も
何も分かってないだろ?


758:デフォルトの名無しさん
09/06/20 11:22:21
危ないだろうけど、でも必要ならやるしかない。
BackgroundWorkerの記事はネット上にあるはずだから、
自分で調べてどういうところに気をつければいいか勉強すればいいじゃない。

759:デフォルトの名無しさん
09/06/20 11:37:02
>>756
どんなに時間がかかろうと、結果が出るまで次に進めなくて、
ただ待ってるだけならバックグラウンドにする意味ナッシング。

760:デフォルトの名無しさん
09/06/20 11:50:14
>>747
public static volatile int a;
public static volatile int b;

a, b に volatile をつけると、あるスレッドで更新すれば別のスレッドに更新が伝わるようになる。

逆にvolatileのついていない変数では、あるスレッドで変更しても、その変更が別のスレッドにすぐに伝わるわけではない。


761:デフォルトの名無しさん
09/06/20 12:05:02
ここにあるはずのサンプルプログラムがほしいのですが、
ページの中に「ソースの表示」とか「ダウンロード」ボタンが見あたりません。
どうやって入手すればいいんでしょう?
URLリンク(msdn.microsoft.com)

762:デフォルトの名無しさん
09/06/20 12:23:23
>>759
進めなくても、キャンセルくらいはできて欲しい
あと、処理中に描画が止まる糞設計もやめて欲しい

763:デフォルトの名無しさん
09/06/20 12:34:14
>>760
適当なこと書くな。
だいたいこの場合だとvolatileとかいう問題じゃないだろ。


764:デフォルトの名無しさん
09/06/20 12:35:41
>>761
なんでここに質問するの?バカなの?死ぬの?

765:デフォルトの名無しさん
09/06/20 12:47:08
>>763
知らないならだまってればいいのに。

766:デフォルトの名無しさん
09/06/20 12:50:09
>>726
だまってろよw

767:デフォルトの名無しさん
09/06/20 12:50:42
単一のプロジェクト内で、特定の関数とかメソッドだけ
バックグラウンドにするメリットってあるの?
もちろん結果が出るまで待つ場合。

とりあえずバックグラウンドにするだけじゃ、
プロセスの優先順位は変わらないよね?

768:デフォルトの名無しさん
09/06/20 12:59:05
今回のはvolatileとかいう問題じゃなくて、
aとbを同時に更新(あたかも)する必要がないか、
更新タイミングの同期はどうするのかって方向であって、
この例でvolatile云々言うのは大抵的外れ。


769:デフォルトの名無しさん
09/06/20 13:05:28
だいたい、実質的にvolatileが要るのはもうちょっと状況が限られるよ。
必要な場合はあるけど、volatileつけないと別スレッドから見えないかっていうとそんなことはない。
まあ言い方に色々誤弊はあるけどね。


770:デフォルトの名無しさん
09/06/20 13:09:48
>>761
ローカルのヘルプからたどればいいのに・・・
それにそこのリンクからもダウンロードできるじゃないか

そこのリンク→方法 : サンプルを表示およびダウンロードする→Microsoft Download Center にアクセスします。

771:デフォルトの名無しさん
09/06/20 13:11:03
>>767
応答なしってタイトルバーに出たりするとユーザは不安になるもんだ
ちっとも経過を報告しないプログレスバーが行ったり来たりしてる方がマシ
キャンセルもできればなお良し

772:デフォルトの名無しさん
09/06/20 14:29:09
CLR2.0では暗黙に全ての書き込みがvolatile書き込みな件

773:デフォルトの名無しさん
09/06/20 14:44:36
double-checked lockingが使えるメモリモデルになってるって話か?

それ以上の意味なら、ソースが欲しい

774:デフォルトの名無しさん
09/06/20 14:46:03
初心者ネタじゃないからよそに行け

775:デフォルトの名無しさん
09/06/20 21:53:56
C#ではクラス名のあとに.をつけたら
いろいろ候補でるよね

Button1.って入力したら
ClickとかTopとかずらずらって。
あの候補のことなんていうんだっけ?

776:デフォルトの名無しさん
09/06/20 21:56:25
入力候補

インテリセンスの機能だな。

777:デフォルトの名無しさん
09/06/20 23:55:37
VS2008EEってセットアッププロジェクト作成機能ないの?

778:デフォルトの名無しさん
09/06/21 00:47:07
プロジェクトをすべて保存にしたら
フォルダが
binとobjにわかれていて
それぞれにdebug releaseの二つに分かれてて
全部で4つの同じexeがあるんだが
なんでこんなことしてんの?
20MBのexeを4つも作られたら容量圧迫してかなわん。

bin/obj
debug release
どのexeが正しいexeなの?

779:デフォルトの名無しさん
09/06/21 00:52:51
binが出力結果 objは中間ファイル置き場
DebugとReleaseは言わずもがな

780:デフォルトの名無しさん
09/06/21 01:53:10
20MBもいくほうがおかしい。
容量圧迫ってどんだけきつきつでやってんだよ。


781:デフォルトの名無しさん
09/06/21 03:25:53
exeが20MBって時点で、C#じゃなくてMFCアプリかなんかじゃね?

782:デフォルトの名無しさん
09/06/21 03:53:12
ベクタライズ最適化という言い方は中途半端だったかもしれない。
gccにおけるauto-vectorazationのことで、一般的には自動ベクトル化と訳されているようだ。
URLリンク(gcc.gnu.org)

本質的にはループを展開して並列実行させることだからSIMDが無くても
複数のレジスタに分ける方法だってあるわけだが、
SIMDに対応してるならそれに越したことは無いだろうな。

783:デフォルトの名無しさん
09/06/21 03:55:19
誤爆した。スマン。首吊ってくる。

784:デフォルトの名無しさん
09/06/21 09:27:29
WebBrowserコントロールのDocumentTextプロパティでWebページを表示させているのですが
読み込むときに鳴るカチッという音を消したい場合はどうしたらいいでしょうか

785:デフォルトの名無しさん
09/06/21 09:37:05
消せないっぽい。

786:デフォルトの名無しさん
09/06/21 10:30:38
まじか。どもです

787:デフォルトの名無しさん
09/06/21 10:55:02
OpenNew して、Document.Write すればいいらしい。
試してないからよくわからんが。

788:デフォルトの名無しさん
09/06/21 11:41:24
>>787
そうするとページのURLが存在しないから、そのページはよくても
ほかのページにジャンプするときはフルパスのリンクが必要だな。
で、そのときにカチッと音が出る。

789:デフォルトの名無しさん
09/06/21 11:58:52
>>787さんの方法でできました。ありがとうございました

790:デフォルトの名無しさん
09/06/21 15:12:23
stringの扱いが分りません。 

変更できないらしいことは分ったんですが、
文字列の受け方がよくわかりません。

こういう場合は、どうすればいいんですか ><

sting param;

if ( xxxx )
param = "THEN"
else
param = "ELSE"



791:デフォルトの名無しさん
09/06/21 15:13:45
それは変更してないじゃない。

792:デフォルトの名無しさん
09/06/21 15:17:06
それだけだと普通にコードとしても意図としても成立してるが

793:デフォルトの名無しさん
09/06/21 15:24:08
>>790
それでおk。
あとは
string param = (xxx) ? "THEN" : "ELSE";
とも書ける。

794:790
09/06/21 15:56:06
レスありがとう

よくわからないから、今度はこうしてみたんですけど、
whileの外で使うと値が入ってないんです。><

main(){

char [] param = null;

while( xxxx ){
if ( xxxx ) then
param = THENストリング.ToCharArray();
else
 param = ELSEストリング.ToCharArray();
}

Console.WriteLine("Paramの中身", param);
}

795:デフォルトの名無しさん
09/06/21 15:58:32
まずはデバッガの使い方覚えたほうがいい。

796:デフォルトの名無しさん
09/06/21 16:01:38
>>795に同意
794は多分ループ内に入ってないんだろうなぁ

797:デフォルトの名無しさん
09/06/21 16:03:20
中途半端に隠さずに貼るなら全部貼れ
そしてどういう結果を期待してるのか書け

798:デフォルトの名無しさん
09/06/21 17:24:23
> if ( xxxx ) then

thenって?

799:デフォルトの名無しさん
09/06/21 17:44:45
webbrowserのリンクをクリックしたらデフォルトのブラウザで開かせたいのですが
URLリンク(red-treasure.com)
上のサイトにあるようなややこしいことしないとできませんか?

800:デフォルトの名無しさん
09/06/21 17:48:55
この程度でややこしいってどんだけw

801:デフォルトの名無しさん
09/06/21 17:49:03
何がどうややこしいのやら

802:デフォルトの名無しさん
09/06/21 17:59:14
>>799
「デフォルトのブラウザーが何か」ってのはOS上のユーザー設定を参照しないといけないことだからなぁ。
そこのサイトのコードだけでできるってのは、十分シンプルだと思う。


803:デフォルトの名無しさん
09/06/21 20:36:32
BeforeNavigate とかではダメなんか?

804:デフォルトの名無しさん
09/06/21 20:43:30
すでに自分を起動していたら、古いほうのウィンドウを閉じて新しいウィンドウで処理する、というのはどう書くものですか?
Processで自分の名前を取得して終了メッセージを送ったら、(当然のように)自分も終了してしまいました…。
あたりまえか。
多重起動を禁止するのではなく、行いたいです。
アドバイスお願いします。


805:デフォルトの名無しさん
09/06/21 20:50:40
基本的な考え方は多重起動禁止と同じだけどね
Mutex の代わりに EventWaitHandle 使う
新しいプロセスはイベント通知するだけでその後は普通に進める
前のプロセスはイベントを受け取ったら終了処理

806:デフォルトの名無しさん
09/06/21 21:13:06
俺はMutex取得できた奴がサーバとしてSetPropでWHDLをプロパティ設定。
取得できなかった奴はクライアントとしてGetPropで見つけたWHDLに
WM_COPYDATAで起動パラメータの情報を送信して終了。
サーバはWM_COPYDATAで受け取った情報で処理。

って作ってた。1.1だったからなぁ。

807:806
09/06/21 21:17:10
あ、古いほうを終了か。間違えた。すまん。

808:デフォルトの名無しさん
09/06/21 21:17:33
古い方を閉じるならもう少し複雑になる。
同時に何個も起動したときにおかしなことにならないようにしないといけないから。

809:デフォルトの名無しさん
09/06/21 21:25:25
WHDL ってなんだよ・・・ せめて hwnd とかだろ

810:デフォルトの名無しさん
09/06/21 21:27:17
正直、古い方を閉じる理由ってなんなんだろ?

811:デフォルトの名無しさん
09/06/21 21:29:23
ごめん、変数名をなんでかそう書いてたんで、そのまま追いかけて読んで
書いちゃったw >>WHDL

・・・マジ、なんでWHDLとか書いてたんだ?自分。

812:デフォルトの名無しさん
09/06/21 21:42:07
古い方を閉じるなんてめちゃくちゃなUXだな

813:デフォルトの名無しさん
09/06/21 22:02:33
.NET や Java などでクラス複製のインターフェースの ICloneable がありますが
ICloneable に対するコピーの実装って
慣例的に シャロウコピー と ディープコピー のどっちなんでしょうか?
それとも特に決まってないのでしょうか?
よろしくお願いします

814:デフォルトの名無しさん
09/06/21 22:12:56
特に決まってないな。
どっちかっていうとシャロウコピーな感じもある。


815:デフォルトの名無しさん
09/06/21 22:16:13
てゆーかICloneableってまともに機能している場面って見たことねーんだが

816:デフォルトの名無しさん
09/06/21 22:22:20
>>813
Javaは知らんが.NETでは特に決まってない。
Cloneは同じ内容だけど別物として振る舞うようなクローンを返せば、なんでもいい。
別にメンバが同じ値であったりそのコピーである必要はない。

817:デフォルトの名無しさん
09/06/21 23:44:16
>>805
EventWaitHandleで、
URLリンク(dobon.net)
のページを見つけて、そっくりおなじように実装してみたのですが、古い方は閉じるんだけど、新しいウィンドウも開かない状況です。
う~む。なにがいけないんでしょう?
>>810
ビューアーのアプリケーションで、表示を自動/手動でリフレッシュしたいのです。外部から手動でリフレッシュするのには、新しいウィンドウを開くのがいちばん楽かと。
>>812
そ…そうかな…。
こういう場合って、どんなふうに実装します?
ところでUXってなに? User eXperience?


818:デフォルトの名無しさん
09/06/21 23:48:23
>>817
そのウィンドウに更新ボタンを付けるのが一番素直な実装だと思うんだが?

819:デフォルトの名無しさん
09/06/22 00:06:00
>>814-816
レスどうもです。
ICloneable について触れてるサイトを何度か見かけたのですが、
どれも MemberwiseClone をそのまま返却する実装をしてたので、
ちょいと気になってました。
ありがとうございました

820:デフォルトの名無しさん
09/06/22 00:32:00
自分も更新ボタンがいいと思う。更新(R)、最新の情報に更新(R)・・・と一般的。
二つ目のアプリ実行っていったら、普通はMDIにドキュメント追加とかタブ追加
だから選択ミス。
いつも使ってる(だろう)アプリ見たら分かりそうだけどなぁ。
秀丸、サクラエディタ、VS、IE、Firefox、WinMerge・・・

821:デフォルトの名無しさん
09/06/22 00:53:49
>>818、820
なるほど。更新ボタンですか…。
更新ボタンをつけたとして、外部のアプリケーションから手動で押す場合には、どういうメッセージを送ればよいんでしょう?
具体的にはコマンドラインから指示したいのです。
サーバー的なシステムで、アプリケーションの動いているマシンには、キーボードもポインティングデバイスもない(操作しにくい)ためです。
コマンドラインから開いているアプリケーションにメッセージを送ることってできるんですか?
これまでは、コマンドラインからおなじアプリケーションを実行してそれにメッセージを送信させようとしてはまってました。
「コマンドラインから」という条件は必須です。
メッセージを送るためのアプリケーションをもうひとつ作るのも考えたのですが、それならおなじアプリケーションで多重起動を監視するほうがよいかな、と考えて現在に至っています。


822:デフォルトの名無しさん
09/06/22 00:59:12
>>821
質問する時は条件を後出しするなよ…

823:デフォルトの名無しさん
09/06/22 01:00:12
>>821
まて、それでどうやって二番目のプロセスを起動しようとしている・・・?
どうやって コ マ ン ド ラ イ ン か ら 打 ち 込 む 気 だ。

ネット越しならポート開けて待ってて、誰かアクセスしてきたら更新しろ。

824:デフォルトの名無しさん
09/06/22 01:01:45
>>821
コントロールされる側も自作アプリなんだから、
外部(ネットやシリアルポートなど)から操作できるように作っとけばいいじゃん。
適当にポート開けとくとかして。

825:デフォルトの名無しさん
09/06/22 01:04:50
ボタン押すだけならハンドル取得してクリックイベントを送るだけ

826:デフォルトの名無しさん
09/06/22 01:08:15
相手がWindowsマシンなのにマウスも何もついてなくて、
端末がコマンドラインオンリーてのもずいぶん時代錯誤なシステムだな
両方ともWindowsにしてリモートデスクトップでも使えば一発で解決する問題のような
そもそもどうやってログインしてるんだ?
電源が落ちたらどうするんだ

827:デフォルトの名無しさん
09/06/22 01:51:47
>>826
っ MONO

828:デフォルトの名無しさん
09/06/22 02:09:48
>>822
すみません。
>>823、824
ポート開けるなんてのは初心者なもので、まだ書けません…。
もうすこし勉強します。
>>825
時代錯誤かどうかはさておき、現実にそういうシステムなので。

ちなみに、次のようにして解決しました。
コマンドラインから起動するときに、
taskkill /im Program.exe
Program.exe
としました。

EventWaitHandleの使い方を覚えられなかったのは残念…。


829:デフォルトの名無しさん
09/06/22 05:46:05
プログラムいくつか作っていくと、流用できるクラスが増えて
次のソフト作るの楽になるんだろうなと思ってやってきたけど
結局毎回一から全部作るんだよね
ファイル入出力関連何度作ったことか
やっぱ最初はこんなもの?

830:デフォルトの名無しさん
09/06/22 05:50:56
汎用性を持たせられてないからだな

831:デフォルトの名無しさん
09/06/22 06:09:35
汎用性ってすごく難しいよね
細かい機能使えるようにすると、元々あるクラス使えってことになるし
簡単に使えるクラスにすると、他のプログラムだと機能がたりなかったり
そもそも何をしているクラスなのかわからなかったりで

832:デフォルトの名無しさん
09/06/22 08:07:47
16進数 1FF は 10進数 511なわけですが
プログラムのバイナリデータではFF01という風に逆順に並んでいるんですが
こういうのを10進数511と変換するうまいやり方はないでしょうか?

833:デフォルトの名無しさん
09/06/22 08:10:02
char[]に変換して、foreachでstringに変換して連結。

834:デフォルトの名無しさん
09/06/22 08:37:32
byte[]に入れて、BitConverter.ToUInt16()

835:デフォルトの名無しさん
09/06/22 09:02:05
>>833
>>834
それだと逆順になったままなんですが

FF01を511にする方法が知りたいんです

836:デフォルトの名無しさん
09/06/22 09:12:59
良く分からんが、用意されてるメソッドで都合悪いなら自作すれば?

837:デフォルトの名無しさん
09/06/22 09:14:11
それがわからないから聞いているんだけど?

838:デフォルトの名無しさん
09/06/22 09:19:17
>>835
それ、普通に short で読み込んだら 511 にならない?
Mono か何かでビッグエンディアンな CPU 上で実行してたりする?

839:デフォルトの名無しさん
09/06/22 09:24:03
文字列の "FF01" とか?

840:デフォルトの名無しさん
09/06/22 09:32:04
>>835
普通逆順になるわけがないんだが、
お前いったいどんなプログラムで確認してる?


841:デフォルトの名無しさん
09/06/22 09:42:32
>>838
なるわけないし、ushortじゃないと範囲超える

842:デフォルトの名無しさん
09/06/22 09:46:43
>>840
どういう意味?

あるアプリをバイナリ編集したいんだけど
数値の部分だけがFF01と反転している
そのアプリのバイナリデータを取り込んで0x01FFつまり511とテキストボックスなんかに表示したいんだけど

843:デフォルトの名無しさん
09/06/22 09:47:01
>ushortじゃないと範囲超える
くわしく

844:デフォルトの名無しさん
09/06/22 09:50:14
>>843
short=0xFF01;
でやればわかる

845:デフォルトの名無しさん
09/06/22 09:53:40
で、同じようにDWORDの数値も本来の数値に変換したいんだけど
簡単な方法ありますか?

846:デフォルトの名無しさん
09/06/22 09:54:44
>>844
何言ってんだお前は。
今の値はそうじゃないだろw


847:デフォルトの名無しさん
09/06/22 09:55:38
>>842

byte[] data = {0xFF, 0x01};
Console.WriteLine(BitConverter.ToInt16(data, 0));

512って出るだろ?
出たならお前の読み込むプログラムの方がおかしいってこった。

848:デフォルトの名無しさん
09/06/22 09:57:40
ちがう511のまちがい。

>>845
これで分かるだろ。


849:デフォルトの名無しさん
09/06/22 10:04:45
>>847
おおおおおおおおおすげーーーー
なんで逆さまなのに511って出るんだ・・・

850:デフォルトの名無しさん
09/06/22 10:06:28
>>846
今の値がどうとかに関係なくWORDを読み込んで数値に変換するわけなんだからshortじゃだめでしょ

851:デフォルトの名無しさん
09/06/22 10:09:21
>>834
結局これだったわけねww
ありがとう

852:デフォルトの名無しさん
09/06/22 10:15:19
範囲外とか言い出すやつが何言っても無駄

853:デフォルトの名無しさん
09/06/22 10:17:55
>>850
そもそも今の会話からは符号付きかありかなんて読み取れないのに、
いきなり、>>841とかいいだすお前がおかしいわ。


854:デフォルトの名無しさん
09/06/22 10:20:37
こういうのは「バイトオーダー」とかのキーワードを知ってればすぐ答が見つかるんだよな
それを知らない時点で敗北決定

855:デフォルトの名無しさん
09/06/22 10:21:16
>>832
>プログラムのバイナリデータではFF01という風に逆順に並んでいるんですが
ここでちゃんとWORDデータを変換すると言っているんだから
できるひとは>>834がすぐ出るでしょ
WORDデータに対してshort持ってきちゃうなんて世間知らずもいいとこだ

856:デフォルトの名無しさん
09/06/22 10:22:42
なん…だと…


857:デフォルトの名無しさん
09/06/22 10:24:15
>ここでちゃんとWORDデータを変換すると言っているんだから
どこだよっ

>>832をどう見ても符号付きか否かは不明。


858:デフォルトの名無しさん
09/06/22 10:26:57
どうかな。

859:デフォルトの名無しさん
09/06/22 10:30:36
バイナリデータ2バイト(FF01)=WORD=ushort

860:デフォルトの名無しさん
09/06/22 10:32:04
そもそも0xFF01はshortに収まらない

論破

861:デフォルトの名無しさん
09/06/22 10:37:24
>>831
それはまだ蓄積や経験が足りない。わからなくなるのは管理が悪い。

名前の付け方に統一ルールを作り、長くなってもいいからわかりやすさを最優先に考える。
使い方をソースファイルの頭などにちゃんと書いておく。
過去の自分は他人。他人が見て使用法が理解できないソースは未来の自分にも理解できない。
「いちいち書くのがめんどくさい」「書かなくてもわかってる、覚えてる」は禁句。

まあ、35歳ぐらいになれば記憶力も衰えてくるし、10年以上の蓄積ができてるはずだから
身にしみてわかるようになるよ。
大多数の人間は経験から学ぶ愚者だからね。

862:デフォルトの名無しさん
09/06/22 10:42:49
>>860
君おもしろいね

863:デフォルトの名無しさん
09/06/22 10:43:18
大多数の回答者は本来のデータが0x01FFのリトルインディアンだと気づいているのに
見たまま0xFF01と解釈してるアホがいる
バイナリファイルをバイナリエディタで開いてみたことないんだろうな

864:デフォルトの名無しさん
09/06/22 10:49:20
>>863
リトルインディアン?アメリカの子供に聞かせる歌でそんなのあったな

バイナリから取り込むわけだから、元データがOxFFFFの場合もあるかもしれないと
想定して作らないとだめでしょ?何で符号無しと決め付けるわけ?
思い込みは危険だよ

865:デフォルトの名無しさん
09/06/22 10:52:01
リトルエンディアン 【little endian】
URLリンク(j-ken.com)

866:デフォルトの名無しさん
09/06/22 10:57:27
符号無しと決めつけてるのはushortじゃなきゃダメと主張してる人だな。
今の質問だとどっちか分からないから、shortではなくushortにしなきゃならない
ってのは正しいかどうか確証はない。
shortじゃなきゃならない可能性もあるんだから。

符号に気をつけろだけなら異論はないが。


867:デフォルトの名無しさん
09/06/22 11:03:21
>>859
その解釈が、件のデータが符号付きか符号なしかという問題に対して何か意味を持つとは思えないな。

868:デフォルトの名無しさん
09/06/22 11:05:12
何でそんなに符号に拘るの?そもそも符号って何よ・・・・
ushortじゃだめな理由なんてあるの?

869:デフォルトの名無しさん
09/06/22 11:16:18
今北産業

870:デフォルトの名無しさん
09/06/22 11:18:20
>>868
同じバイナリで表現される整数値の意味が変わるからだ。
知らないならC言語の初級からやりなおせ。

871:デフォルトの名無しさん
09/06/22 11:28:18
>>870
なるほどそういうことか、難しいな

872:デフォルトの名無しさん
09/06/22 11:29:40
C言語は関係ないよ。

873:デフォルトの名無しさん
09/06/22 11:37:59
>>872
アホ

874:デフォルトの名無しさん
09/06/22 11:46:45
>>869
符号がどうとか
聞かれてもいないことに答えようとしている
おせっかいがたくさん

875:デフォルトの名無しさん
09/06/22 11:51:34
なんでもこういう事言って満足してるアホがいるが、
普通に質問への答えに関わる事として重要なことだってのも分からんのか、
単に何か言いたいだけなのか、何なんだろうな。


876:デフォルトの名無しさん
09/06/22 11:55:46
ArrayListあるいは配列の中に入っているobjectを、
ToStringかけながらカンマ区切りで連結するのってどうやるんだろう?
できれば区切り文字はあとから変更できる形が望ましい。

.NET 3.5以降ならLinq付随のジェネリックテンプレートが使えるんだけど、
サポートOS(2000以降)の関係で.NET 2.0でお願いします。


877:デフォルトの名無しさん
09/06/22 11:58:59
String配列生成
forでそれぞれToStringしながら配列に入れていく
String.Join

878:デフォルトの名無しさん
09/06/22 12:01:56
ConvertAllだったかとString.Joinの組み合わせで。
あ、ConvertAllは配列にしてからじゃないとダメだったかな…

879:デフォルトの名無しさん
09/06/22 12:17:42
>>877
なるほど……。そんな感じでやってみようかと思ったらStringBuilderを見つけて、
そっちで書いてみたら簡単だったのでコード片を載せておく。

IronPython.Runtime.List python_result;

var builder = new StringBuilder();
foreach(var e in python_result)
{
builder.Append(","+ e.ToString());
}
Console.WriteLine(builder.ToString().Substring(1));

>>878
対象がIronPython.Runtime.ListなんでConvertAllは使えないっぽいね……。


880:デフォルトの名無しさん
09/06/22 12:47:10
パイソンは知らないんだが、ToArrayはないのかな?
ToArrayしてConvertAllしてJoinに渡す。

ってまあ別にベタで書いても全然構わないんだけど。

881:デフォルトの名無しさん
09/06/22 13:00:37
IEnumeratorは返してくれるんだけど、ToArrayは無いのよね。
枯れたライブラリならともかく、
こんなホットなもの相手に中のコードはいじりたくない。


C#は巨大な.NETクラスライブラリの関係で
同じことをやるのに方法がたくさんあるから、最適な方法を探すのが大変ですね。

882:デフォルトの名無しさん
09/06/22 13:05:47
Listって名前なのにIEnumerableのみかよwww

……XmlNodeListもそうなんだよな

883:デフォルトの名無しさん
09/06/22 15:31:14
提示された情報だけでは符号付きか符号無しか判断できないし
別に型が確定しなくても今回の質問には答えられる。
ちょっと注意書きを入れれば済むことだから両方書けばいいだけ。
BitConverter.ToUInt16()  符号無し
BitConverter.ToInt16()  符号あり

884:デフォルトの名無しさん
09/06/22 15:35:02
DataGridViewの一番左の項目に1,2,3と番号振りたいんだけどどうすればいいですか?
DataGridView.Rows[].Cells[0]のことではないです。

885:デフォルトの名無しさん
09/06/22 15:51:39
>>884
DataGridView.CellPaintingで

886:デフォルトの名無しさん
09/06/22 15:54:05
すいませんこれでいけました

DataGridView1.Rows[0].HeaderCell.Value

が、なぜか、マス目でいうと上から3つ目のところに表示されます
上から3つ目のマスが最初の行ということですか?
だとしたら、その上の行はなんなのか?あとインデックスって-1になるということ?
どうもよくわからない

887:デフォルトの名無しさん
09/06/22 16:00:27
ハァ?
コーディングミスだろ。

URLリンク(www.dotup.org)

888:デフォルトの名無しさん
09/06/22 16:08:24
dataGridView1.ColumnCount = 6;

this.dataGridView1.Rows[0].HeaderCell.Value = "0";

③this.dataGridView1.Rows.Add("1","2","3","4","5","6");

やってるのはこれだけなんですが、行のヘッダは3マス目に0が入り
③のデータはなぜか2マス目の行にデータが収まります
どうしてなんでしょうか?

889:デフォルトの名無しさん
09/06/22 16:24:38
試しに新規プロジェクト作ってDataGridView貼り付けて
そのコードだけを書いたやつ実行してみなよ。

890:デフォルトの名無しさん
09/06/22 16:25:07
>>888
人がわざわざ正しいやり方を示してくれているのに謝意も述べず、
自分勝手なやり方をしてそれがどういう結果をもたらすのか
自分で考えずに人に質問するような態度で、
答えを教えてもらえると思っているのか?

ちなみに887≠オレ

891:887
09/06/22 16:26:25
初心者スレの割にキビシイっすね

892:デフォルトの名無しさん
09/06/22 16:41:56
愛の鞭です

893:デフォルトの名無しさん
09/06/22 17:36:29
飴ちゃんちょうだい

894:デフォルトの名無しさん
09/06/22 21:19:42
バイトオーダー嫌って文字列で送った俺は勝ち組。

895:デフォルトの名無しさん
09/06/22 21:29:49
数が少なく整数のみならそれが勝ちだね

896:デフォルトの名無しさん
09/06/22 22:01:33
エンコードが違って文字化け

897:デフォルトの名無しさん
09/06/22 22:36:57
コード以外の文字列はBASE64ヽ(´▽`)ノ検索無くてよかったよかった。

898:デフォルトの名無しさん
09/06/23 00:45:53
そんな私はwebで公開

899:デフォルトの名無しさん
09/06/23 03:28:34
byte[]に格納したバイナリデータをascii文字列にするにはどうすればいいですか?

900:デフォルトの名無しさん
09/06/23 03:33:02
Convert.ToBase64Stringが手軽で鼻血が出る

901:デフォルトの名無しさん
09/06/23 03:33:06
どんなバイナリをどんな文字列にしたいのさ

902:デフォルトの名無しさん
09/06/23 03:38:03
31 30 30 25→100%
みたいな感じです

バイナリエディタのようなものを作ろうとしているので
stirlingは左バイナリデータで右側にShift-Jis, ASCIIなどを表示してますよね?
そういう感じのものを作りたい

903:デフォルトの名無しさん
09/06/23 03:48:11
charにキャスト

904:デフォルトの名無しさん
09/06/23 04:01:56
Encoding

905:デフォルトの名無しさん
09/06/23 04:04:34
>>899
URLリンク(dobon.net)


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