ふらっとC♯(初心者用) Part6

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
このスレッドは

「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。

ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。

少しずつC#プログラマを名乗るものが現れました。みなさん一緒に勉強しましょう。

前スレッドはこちら
http://pc8.2ch.net/test/read.cgi/tech/1065196964/l50 (Part5)
http://pc2.2ch.net/test/read.cgi/tech/1059028988/l50 (Part4)
http://pc2.2ch.net/tech/kako/1047/10472/1047210828.html (Part3)
http://pc2.2ch.net/tech/kako/1035/10358/1035895873.html (Part2)
http://pc2.2ch.net/tech/kako/1023/10237/1023766485.html

C♯相談室 Part24
http://pc8.2ch.net/test/read.cgi/tech/1117631000/l50
2デフォルトの名無しさん:2005/07/22(金) 12:05:38
C#Builder 1.0 Personal 日本語版 ダウンロード
http://www.borland.co.jp/csharpbuilder/personal/index.html
.NET Framework 1.1 製品ドキュメント
http://www.microsoft.com/japan/msdn/library/ja/netstart/html/sdkstart.asp

@IT Insider.NET
http://www.atmarkit.co.jp/fdotnet/index.html
Insider.NET 会議室 ディレクトリ
http://www.atmarkit.co.jp/fdotnet/index/bbs/index.html
GotDotNet Japan 掲示板
http://www.gdncom.jp/general/bbs/

宇宙仮面の C# プログラミング / C# Programming
http://ukamen.hp.infoseek.co.jp/
WisdomSoft C#入門
http://wisdom.sakura.ne.jp/programming/cs/index.html
WisdomSoft Microsoft .NET入門
http://black.sakura.ne.jp/~third/system/msnet/msnet.html
どっとねっとふぁん
http://dotnetfan.org/
緑のバイク 初めてのC# 〜 覚え書き 〜
http://homepage3.nifty.com/midori_no_bike/CS/
どぼん!の .NET Tips
http://dobon.net/vb/dotnet/
.NET のつぼ
http://park16.wakwak.com/~mimi/dotnet/top.html
3デフォルトの名無しさん:2005/07/22(金) 12:16:11
新スレ乙
4デフォルトの名無しさん:2005/07/22(金) 19:33:41
>>2のWisdomソフトの新URL
http://wisdom.sakura.ne.jp/
5デフォルトの名無しさん:2005/07/22(金) 23:34:43
そこは厨房サイトだから削っとこうぜ
6デフォルトの名無しさん:2005/07/23(土) 00:07:40
初学者の参考になるのは間違いない。使う単語はアレだが。
7デフォルトの名無しさん:2005/07/24(日) 14:46:14
Shockwave Flash Object」 (Flash.ocx)をつかって
C#にFLASH(SWFファイル)を読み込みました。
デスクトップウォッチみたいなものをつくりたいので
SWFの背景も透明にしたいと思うのですが上手くいきません。
これは実現可能なことでしょうか?
87:2005/07/24(日) 15:56:23
自己解決しました。
すみません
9デフォルトの名無しさん:2005/07/24(日) 16:36:56
解決方法書いとけよ
109:2005/08/01(月) 14:16:57
自己解決しました。
すみません
11デフォルトの名無しさん:2005/08/01(月) 15:49:52
ちょっと笑っちまったぜ
12デフォルトの名無しさん:2005/08/04(木) 23:02:32
趣味で C# いじってる者です
.C# に対応したおすすめのステップカウンタ
何か紹介してください

宜しくお願いします
1312:2005/08/04(木) 23:25:19
http://homepage2.nifty.com/fortissimo/
こんなの利用してみました

いいかどうかはともかく、数字が出るのでOKっす
ありがとうございました
14デフォルトの名無しさん:2005/08/05(金) 20:43:27
exeファイル内にビルドした時のファイルパスが入ってるんだけど
なんとかして消す方法ないですか
15デフォルトの名無しさん:2005/08/05(金) 20:45:20
>>14
Release
16デフォルトの名無しさん:2005/08/05(金) 21:09:45
Releaseビルドでも入ってるんだよー
C:\○○\obj\Release\HogeHoge.pdb って感じで
17デフォルトの名無しさん:2005/08/05(金) 21:12:28
デフォルトの設定なら、Release ビルドしたあと Release フォルダ内の exe を使え。
それでも入っているなら、デバッグ情報を生成するかどうかの設定がどこかにあるから必死こいて探せ。
18デフォルトの名無しさん:2005/08/05(金) 21:15:22
>>16
objフォルダは人に見せるものではない。
自分でさえまず見るものではない。
1917:2005/08/05(金) 21:23:06
ほんとだ。obj じゃなくて bin を見るべきだな。両方とも結果は同じだと思うけど。
20デフォルトの名無しさん:2005/08/05(金) 21:24:57
>>17
ビルドの設定は初期状態から弄ってないです

>>18
bin\Release\HogeHoge.exe に ...\obj\Release\... って文字列が入ってるんです
21デフォルトの名無しさん:2005/08/05(金) 21:30:53
pdb はデバッグ情報が入っているファイル
そのパスが exe 内にあるということは、デバッグ情報付きでビルドした証拠

……設定を、もう一度確認の事
22デフォルトの名無しさん:2005/08/05(金) 21:33:18
うちのファイルには入ってなかった。
23デフォルトの名無しさん:2005/08/05(金) 21:46:19
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
 <DebugType>pdbonly</DebugType>
 <Optimize>true</Optimize>
 <OutputPath>bin\Release\</OutputPath>
 <DefineConstants>TRACE</DefineConstants>
 <ErrorReport>prompt</ErrorReport>
 <WarningLevel>4</WarningLevel>
</PropertyGroup>

のうち <DebugType>pdbonly</DebugType> を消したら
.....\obj\Release\HogeHoge.pdb の文字列が消えました
IDEが手元にないんでIDEではどうするかは分からんです
でもこれが初期設定だったんだよー信じてくれー

ttp://winfx.msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_fxgenref/html/d8c19b36-f5ca-484b-afa6-8ff3b90e103a.asp
によると DebugType を消して EmitDebugInformation=true にすればいいっぽい?
24デフォルトの名無しさん:2005/08/08(月) 12:52:25
>>23 横レスすまんが まずお礼くらい言えよ。
25デフォルトの名無しさん:2005/08/09(火) 07:40:37
お礼
2624:2005/08/10(水) 10:27:01
>>25 Oh尿!
27デフォルトの名無しさん:2005/08/16(火) 16:18:36
ContainerControl.ActiveControl プロパティ ってヘルプを見ると
public virtual Control ActiveControl {get; set;}
となっているけど、本当にvirtualになってる?
28デフォルトの名無しさん:2005/08/16(火) 16:24:33
2002のヘルプじゃvirtualになってないな。

困ったときはildasmでアセンブリを確認。
29デフォルトの名無しさん:2005/08/16(火) 18:36:04
ildasm で get_ActiveControl をみると、

.method public hidebysig newslot specialname virtual final
    instance class System.Windows.Forms.Control
    get_ActiveControl() cil managed

この様になってました。final がついているということは
virtual ではないということでしょうか?

MSILがわからないので的外れなことをいっているかも。
30デフォルトの名無しさん:2005/08/16(火) 18:41:01
virtual メソッドはオーバーライドできるけど、final を付けると以降サブクラスでの上書きが出来なくなる
……筈

virtual かつ final なメソッドは在るよ
31デフォルトの名無しさん:2005/08/16(火) 18:54:51
なんか、すんごい初心者質問ですいません。。。

フォーム1のボタンを押すと、フォーム2を開く。
フォーム2のボタンを押すと、フォーム1に戻る。
ということがやりたいのですが、
フォーム2を開けずに困ってます。
2枚目のフォームをプロジェクトに追加して、インスタンスを作成すれば表示できるのですが、
なんか、いまいちな気がするのです。。。

スタンダードなやりかた教えて下さい。

なんか、すんごい初心者質問ですいません。。。
32デフォルトの名無しさん:2005/08/16(火) 18:58:13
>>29
そこまで調べたなら上出来だ。

ちょっと解説を付けとこう。

ヘルプのSystem.Reflection.MethodBaseクラスのIsVirtualプロパティにそこら辺の情報がある。
ちなみにこのプロパティはメソッドにvirtual属性がついてるかどうかを返すって単純なもの。
かいつまんで言うと、コンパイラはインターフェイスの実装メンバには必ずvirtual属性を付けなければならない。
その場合、クラスでその実装メンバがvirtualやabstractで修飾されていない場合はfinal属性を付けてオーバーライド禁止であることを示す。

何でこんな事をするかって言うと、
インターフェイスの明示的実装が内部でインターフェイスメンバのオーバーライドとして表現されるから、
内部的にはvirtualじゃないとまずいのね。


>>31
ごく真っ当な手法だと思うんだが、なにがどういまいちと感じるんだ?
33デフォルトの名無しさん:2005/08/16(火) 20:42:02
>>32
解説ありがとうございます。
IsVirtualプロパティも参考にしてみます。
34858:2005/08/16(火) 22:18:27
WIN32API板から誘導されてきました。

[C#バージョン]
VC# Express Beta2
Windows XP sp2

[目的]
IMEをONの状態にしておいて、
日本語による文字入力が「開始」されたことを検知する。
また、
日本語による文字入力がリターンキーなどにより確定したことを検知する。

[作ってみたソース]
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
protected override void WndProc(ref Message m)
{
Console.WriteLine(String.Format("{0,5:X}",m.Msg));
base.WndProc(ref m);
}
}
}
35デフォルトの名無しさん:2005/08/16(火) 22:23:08
[作ってみたソース(つづき]
フォームには、テキストボックスがひとつ置いてあるだけです。

[問題]
上記おソース如く、m.MSGを監視していても、
例えば、
WM_IME_STARTCOMPOSITION(0X010D)や、
WM_IME_ENDCOMPOSITION(0X010E)が、
飛んできません。

[今までのアドバイス]
・VC6++では、当然の如くうまくいくらしい。
 即ち、問題なく0x010D等が飛んでくるらしい。
・フィルタリングされているのではないか。
 http://www.google.com/search?num=50&hl=ja&q=%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0+Msg+WndProc&lr=lang_ja
 なお、m.MSGとして133や84、112などは問題なく飛んできます。
 ただ、文字入力開始時のみならず、文字を続けて確定することなく入力している最中は、
 一切、メッセージが飛んできません。
36デフォルトの名無しさん:2005/08/16(火) 22:26:12
37デフォルトの名無しさん:2005/08/16(火) 22:34:52
うんあのさ、メッセージを受け取るのは結局どのオブジェクトなのか、
言い換えればどのウィンドウなのか、考えれば分かるよな?
38858:2005/08/16(火) 22:55:04
ってことは、
WndProcを呼び出すときに、
自己のハンドルであるThis.Handleを引数として入れてあげないと
いけないってことですか??
(↑この文は、かなりわけもわからずに書いていますが・・・)
39858:2005/08/16(火) 23:12:47
九層・・・わかんないです・・・(T_T)
40デフォルトの名無しさん:2005/08/16(火) 23:54:34
だからさぁ、実際にキー入力されて文字出力されるのはFormじゃないでしょ?
それなのにFormのWndProcで受け取ろうとしても無駄でしょ?
受け取るWndProcはどのオブジェクトのものよ?
それをオーバーライドしなさいってこと。
41858:2005/08/17(水) 00:21:04
実際にキー入力されて文字出力されるのは、FOrmじゃなくて、
テキストボックスです・・・。
受け取るWndProcはテキストボックスクラスから作ったTextBox1のものです。
それをオーバーライドします。
ふむふむ・・・え、そうなの??(><
42858:2005/08/17(水) 00:38:37
public class TextEX : TextBox
{
protected override void WndProc(ref Message m)
{
Console.WriteLine(String.Format("{0,5:X}", m.Msg));
base.WndProc(ref m);
}
}
public partial class Form1 : Form
{
TextEX tx;

public Form1()
{
InitializeComponent();

tx = new TextEX();
tx.Name = "40さんありがとう";
tx.Left = 1;
tx.Top = 1;
tx.Width = 50;
this.Controls.Add(tx);
}

}
43858:2005/08/17(水) 00:54:36
public class TextEX : TextBox
{
protected override void WndProc(ref Message m)
{
switch(m.Msg){
case 0x010D:
this.Parent.Text="start";
break;
case 0x010E:
this.Parent.Text="end";
break;
default:
break;
}
base.WndProc(ref m);
}
}
public partial class Form1 : Form
{
TextEX tx;
public Form1()
{
InitializeComponent();
tx = new TextEX();
this.Controls.Add(tx);
}
}

板汚してすみません。
テキストボックスから派生クラスを作らなくてもすむ方法って
ないでしょうか・・・。
44デフォルトの名無しさん:2005/08/17(水) 23:11:59
下記のような動作をするプログラムを書きたいのですが、教えてください。
フォーム内のTextBoxに何か文字を入力
  ↓
登録を押す
  ↓
指定されたWeb上のTextBoxに文字を入力し、スクリプトを起動させる(?)
うぅ、説明がひどすぎる・・・
(例) 2chの専用ブラウザ
  →フォーム内のTextBoxに書き込み、「書き込み」ボタンを押すと2chに書き込むことが出来る

すみません、日本語が下手すぎますね。
申し訳ありませんがご教授願います。
45デフォルトの名無しさん:2005/08/17(水) 23:24:54
>>44
専ブラの2ch投稿と一般的な入力補助ソフト(懸賞支援みたいなのとか)じゃ全然動きが違うが……

>>43
何で派生クラスが嫌なのさ
オブジェクト指向が嫌ならWin32APIにどっぷりつかってSetWindowLongでWndProc書き換えれば
4644:2005/08/17(水) 23:36:54
>>45
とあるWebページに文字を何箇所か入力して登録をする作業があるのですが、
入力する場所がかなり離れていていちいちスクロールバーを上下させるのが
面倒なため、入力が必要な部分だけ抜き出して登録を行いたい、というのが
目的です。
47デフォルトの名無しさん:2005/08/17(水) 23:40:18
IEのアドレスバーにスクリプト書くだけでいいような希ガス
WebBrowser クラスの URL プロパティだったかに
javascript:hogehogehgoe とか代入しても動いていたような気もする
48858:2005/08/18(木) 00:24:08
>>45
すみませんでした。
派生でがんばります。おっしゃるとおりです。
49デフォルトの名無しさん:2005/08/18(木) 00:39:21
IEでいいならautomationで。
よくあるなこの質問。
50デフォルトの名無しさん:2005/08/18(木) 04:29:37
>>44
http://pc8.2ch.net/test/read.cgi/tech/1121600038/191

もしくは

HttpWebRequest、HttpUtility.UrlEncode
5144:2005/08/19(金) 12:23:49
>>47 >>49 >>50
どうもありがとうございます。
仕事の効率化とC#の勉強もかねて作ってみようかと思ったのですが、
結構難しくて挫折しそうです…。サンプルのソースもかなり探したのですが
見当りませんでした。
52デフォルトの名無しさん:2005/08/24(水) 07:41:34
質問です
floatの変数を書式指定してstring型に変更するためにC言語のsprint()のような関数を探しているのですが見つかりません
同じような動作をする関数はありますか?
53デフォルトの名無しさん:2005/08/24(水) 08:25:40
ToString
関数じゃなくてfloat(System.Single)のインスタンスメソッドだけどな。
54デフォルトの名無しさん:2005/08/24(水) 08:30:03
ありがとうございます
foo.ToString("F2")
みたいにやるといいんですね
助かりました
55デフォルトの名無しさん:2005/08/24(水) 22:15:57
System.Void って何に使うの?
56デフォルトの名無しさん:2005/08/24(水) 22:17:33
リフレクションとかに
57858:2005/08/25(木) 00:10:41
>>52
String.Format("{0,5:F}←書式設定",hensuu_float);
58デフォルトの名無しさん:2005/08/25(木) 20:21:34
***.txtから***.cに変えて保存するときに、できるPCとできないPCがあります。
新しいパソコンを買おうと思っているのですが、もちろんできる奴がほしいのですが
変更できない奴買うと困るので教えてもらおうと思って書き込みました。

あと、何故できないのかも教えていただけたら幸いです。宜しくお願いします。
59デフォルトの名無しさん:2005/08/25(木) 20:53:20
俺にはわからんから他のスレで聞いてね
60デフォルトの名無しさん:2005/08/25(木) 21:37:10
>>58
基本的に総べてできる。
できないPCを見たことが無い。
61デフォルトの名無しさん:2005/08/25(木) 22:03:45
>58
まさか拡張子を表示しない設定にしてるとかないよな
6258:2005/08/25(木) 22:11:28
弟の使ってるパソコンではできました。確かXPです
自分のは98でして、OSとかもちろん関係ありませんよね
拡張子を表示しない設定というとすべてのファイルにしてないってことですか?

状況をかくと***.cに変えるとき、例えば test.cって名前で保存すると
そのままの名前でテキストになってます、もちろんすべてのファイルにしてあります
弟のPCを使うと普通にCファイル?にできるんですけど
63デフォルトの名無しさん:2005/08/25(木) 22:19:33
PC初心者板へ
64デフォルトの名無しさん:2005/08/25(木) 22:19:46
>>58
使ってるソフトの設定だろう。  (なに使ってるかしらんが。
使い方の問題でPCのせいではない。
65デフォルトの名無しさん:2005/08/25(木) 22:25:42
お騒がせしました、初心者板へいってきます。

66デフォルトの名無しさん:2005/08/25(木) 23:32:34
buttonコントロールを貼り付けて
その中の表示text部分の文字を寝かせる事は可能か
67デフォルトの名無しさん:2005/08/25(木) 23:37:18
>>66
寝かせる?Italic の事?
ならばフォント指定でそうすれば良い。
68デフォルトの名無しさん:2005/08/25(木) 23:39:59
TabControlをオーナードローすると見た目がダサくなっちゃうから
XPのビジュアルスタイルを保ちつつオーナードローする方法ってない?
69デフォルトの名無しさん:2005/08/25(木) 23:42:47
いや文字を左又は右90°回転できるかということ
70デフォルトの名無しさん:2005/08/25(木) 23:46:50
>>69
そう言う風にフォントを作ればできる。
Fontクラスのコンストラクタじゃ不可能なのでFont.FromLogFontで。
LOGFONT構造体については頑張ってしれべれ。
71デフォルトの名無しさん:2005/08/25(木) 23:53:45
そうか
分かった
7253:2005/08/26(金) 00:22:50
超初心者ですいません、コンパイルするさいに
エラーE2209 インクルードファイルをオープンできない、といわれました
borland c++ 5.5 ってコンパイラーを使ってます。

誰かたすけてもらえませんか?
73デフォルトの名無しさん:2005/08/26(金) 00:26:28
スレ違い
7453:2005/08/26(金) 00:31:35
なんでやねん、自分で調べろとか、煽られたりするならまだわかるけど
すれ違いってwそりゃないぜ
75デフォルトの名無しさん:2005/08/26(金) 00:34:38
C# != C++
7653:2005/08/26(金) 00:36:23
失礼しました
77858:2005/08/26(金) 01:51:18
>>76
素直だな。
78デフォルトの名無しさん:2005/08/26(金) 03:32:03
C++ != C++
79デフォルトの名無しさん:2005/08/26(金) 05:47:57
++C == C++
80デフォルトの名無しさん:2005/08/26(金) 13:46:41
  +
  +
++C++
  +
  +
81デフォルトの名無しさん:2005/08/26(金) 15:28:10
++C++ == D
82デフォルトの名無しさん:2005/08/26(金) 15:46:39
>>81
Dは無駄な機能だらけといいたいのか貴様!
83デフォルトの名無しさん:2005/08/27(土) 00:21:59
タブブラウザを見様見真似で作っている最中だが
ブラウザ起動直後に自動的にタブページが
1つ開いている状態にするにはどうしたらいいか
ヒントくれ
84デフォルトの名無しさん:2005/08/27(土) 00:23:48
そう言う風に書く



何が分からないのかが分からないよ
85デフォルトの名無しさん:2005/08/27(土) 00:44:05
>>83
about:blank
86デフォルトの名無しさん:2005/08/27(土) 05:28:40
質問してよいですか。
下のような構造のコードなんですが、
rnd が初期化される前に rnd.Next() が呼ばれるため
エラーになってしまいます。
これはどうやって回避すればよいのでしょうか。
要はベースクラスのコンストラクタよりに先にコードを実行したいんですが

  class Hoge
  {
    static void Main(string[] args)
    {
      DerivedClass cls = new DerivedClass();
    }
  }

  class BaseClass
  {
    public BaseClass()
    {
      VirtualMethod();
    }

    protected virtual void VirtualMethod() { }
  }
(つづく)
87デフォルトの名無しさん:2005/08/27(土) 05:29:11
(つづき)
  class DerivedClass : BaseClass
  {
    private Random rnd;
    public DerivedClass()
    {
      rnd = new Random();
    }

    protected override void VirtualMethod()

    {

      int n = rnd.Next();

      Console.WriteLine(n);

    }
  }
88デフォルトの名無しさん:2005/08/27(土) 05:45:33
単にVirtualMethod内でnewすればいいだけの話では。

if (rnd == null)
{
  rnd = new Random();
}

int n = rnd.Next();
...
8986:2005/08/27(土) 06:14:34
>>88
レスどうもありがとうございます。
その方法がありましたね・・思いつきませんでした。

自分の場合は解決したのでいいのですが、
コンストラクタでの初期化はできないんですかね。
rnd の使用箇所が多いと結構面倒な気がしますが
90デフォルトの名無しさん:2005/08/27(土) 06:26:26
class DerivedClass : BaseClass
{
Random rnd = new Random();
protected override void VirtualMethod()
{
int n = rnd.Next();
Console.WriteLine(n);
}
}
こんな風に書けたと思う。
9186:2005/08/27(土) 07:06:05
>>90
ああ、なるほど・・
そんな書き方ができたんですねえ。
それが答えっぽいですね。
コンストラクタの初期化は全部そうしたほうがいいのかな・・?

ともあれ、どうもありがとうございました。
92デフォルトの名無しさん:2005/08/27(土) 11:37:33
>>91,96
>コンストラクタの初期化は全部そうしたほうがいいのかな・・?
その考え方を続けると立ち上がりが異常に遅いソフトが出来るぞ。
漏れは、Initialize()メソッドを作って、まずは最短で画面表示をして。
初期化を必要な場所に分散している。 (まあ、好みの問題だがな。
これにより、何をしているかを表示するユザーフレンドリーなソフトにしている。
93デフォルトの名無しさん:2005/08/27(土) 11:59:14
立ち上がりが遅すぎて実際の使用に支障を来すことがわかってから修正してもいいんじゃね

初めからそれをやるのは早すぎる最適化
94デフォルトの名無しさん:2005/08/27(土) 16:37:18
>>90みたいに書いてDerivedClassのオブジェクトをnewすると、
先にフィールドのrndに中身が入って、その後
BaseClassのコンストラクタ -> DerivedClassのコンストラクタが呼ばれる流れになるんでしょうか?
95デフォルトの名無しさん:2005/08/27(土) 16:43:56
>>94
そうだよ。
ildasmで派生クラスのコンストラクタを見てみると流れがよく分かる。
96デフォルトの名無しさん:2005/08/27(土) 16:56:06
>>95
ありがとう。
ちなみにこの考え方続けると>>92さんの言うように初期化が遅いソフトになるってのは分かるんですが、
今回の>>90の場合は、rndはstaticメンバじゃないから、
DerivedClassのオブジェクトが作られるまで中身入りませんよね?
97デフォルトの名無しさん:2005/08/27(土) 17:04:01
そうだね。
98デフォルトの名無しさん:2005/08/27(土) 17:04:29
>>96
クラス単独で見ればそうだね、全体を見たら、起動時のコンストラクタに
入っていたと言うのは良くある話。
99デフォルトの名無しさん:2005/08/29(月) 01:46:28
漢字入力を始めたときに飛んでくるWM_IME_STARTCOMPOSITIONなどを
監視して、以下のようなソフトを作りたいと思っています。
@ワード文書内において、
AIME入力、言い換えれば漢字入力を開始すると、
B入力された文字が確定されるまで、
C背景を薄いブルーにする、
というものです。

すでに私は、
ソリューションダイアログでWord.ObjectLibraryを参照するように設定することで、
@ワード文書に例えば文字列をinsertしたり、選択範囲を変更したりできるようになりました。
また、
自分のフォームに、テキストボックスから派生させたMyテキストボックスを
貼り付けて、そのMyテキストボックスに文字が入力されはじめたことを
ウィンドウメッセージとして取得できるようになりました。
具体的には、派生させたクラス(Myテキストボックス)のWndProcをOverrideして
m.MsgがWM_IME_STARTCOMPOSITIONかどうかを判定する機能を追加しました。

【質問】
しかしながら、Myテキストボックスでは「文字が入力されはじめたことを検知」する
機能を搭載することに成功したのですが、
ワード文書ではうまくいきません。とうかどうやるのかよくわかりません。
テキストボックスから、上記の機能を搭載したクラスを派生させるように、
例えば、Word.ApplicationやWord.Documentから派生クラスを用意して適宜同じように
WndProcをoverrideすればうまくいくでしょうか。
もっとも、Word.Applicationは、インターフェース型(?)ですが。

【質問2】
思いっきりすれ違いな予感もしますが、当方VisualC#2.0 beta2 , WindowsXPsp2,Word2000です。
よろしくお願いします。
100デフォルトの名無しさん:2005/08/29(月) 17:39:47
>>99
できません
101デフォルトの名無しさん:2005/08/29(月) 18:49:40
Win32APIのWaitMessage()に対応するメソッドを探しているのですが、見つかりません。
どなたかご存知の方いらっしゃいましたら教えていただけないでしょうか
102デフォルトの名無しさん:2005/08/29(月) 19:14:40
>>101
なぜWaitMessageを使いたいのか知らないが、どうしても使いたいならDllImportして使えば?
103101:2005/08/29(月) 19:46:22
ありがとうございます。
ウィンドウを最小化している間、無限ループを一時止めるために使おうと思ってます。
今は一応DllImportして使ってますが、他に.netでの一般的な方法が無いかと思い質問させていただきました。
104デフォルトの名無しさん:2005/08/29(月) 20:51:01
ASP.NETを使ってサーバーからクライアントのプログラムを実行させる方法を探しています。
やりたいことは、他クライアントのUSB機器をサーバーを介して動かすというものです。
USB機器を動かすというプログラムは別途作成しました。
ただ動かすという実験だけなので、はたから見るとサーバーを介しているように見えるだけでもかまいません。

開発環境はVC#2003で動作PCはサーバー、クライアント共にWinXP Pro(ローカルネットワークで接続)です。
色々と切り捨てるため、セキュリティ、機種依存などは問題としないことにしています。

何かよい方法はないでしょうか。
105デフォルトの名無しさん:2005/08/29(月) 20:59:09
ASP.NETでやるならActiveXを使うしかないな。
C/S型ならまあ好きにやればいい。
106104:2005/08/29(月) 22:10:38
ありがとうございます。

調べてみたら次のようなものが検索結果として出てきたので、参考にしてやってみます。
ttp://www.microsoft.com/japan/msdn/netframework/technical/articles/windows/analystreports/smartclient.asp
ただ、ページに書いてある日本語がよく分からないので、本当に使えるかどうかが微妙で・・・orz
10799:2005/08/31(水) 19:33:42
再度質問です。
前回の質問がちょっと無謀だったので変更します。

Wordで未確定の文字があるのを検知することはできませんでしょうか・・。
108デフォルトの名無しさん:2005/08/31(水) 20:15:20
できるよ。spy++ みたいなもんを作れば。
10999:2005/08/31(水) 21:05:13
SPY++では、WORDに照準をあてて(?)やってみても、
WM_IME_STARTCOMPOSITION出てきませんよ。
ワードにくわれるみたい。
110デフォルトの名無しさん:2005/08/31(水) 21:07:39
それってC#とはあまり関係ないんじゃ
マルチポスト良くない
111デフォルトの名無しさん:2005/08/31(水) 21:22:01
>>109
たしかワード自体ではなくて、その中の実際に文字を入力する部分がウィンドウになっていて、
そこにでないとWM_IME_STARTCOMPOSITIONとかは出てこないはず。
11299:2005/08/31(水) 21:28:57
開発言語がVC#2.0beta2なんです。申し訳ないです。
ここの掲示板の方はひょっとすると、VC++を専ら使用されてるかとも
思ったんです…。

>>110
すみません。ふらっとC#へは今後この件に関して投稿しないことにします。

>>111
なるほど、そうだったのですか。
ところで、VBAには、「今現在は、何らかの文字が未確定にあります」っていう
ことを検知できる方法、何かないでしょうか。
僕は、Word.ApplicationClassとか、Word.DocumentClassとかを
継承させて自ら作ったMyApplicationClass等内で
private override void WndProc(Message m){

}
と、書けないかなと思ったのですが、
テキストボックスから派生するかのようには
簡単にはいきませんでした。
11399:2005/08/31(水) 21:30:20
間違えました。
すみません。ふらっとC#へは今後この件に関して投稿しないことにします。
ではなく、
すみません。WINAPIへは今後この件に関して投稿しないことにします。
と修正させていただきます。あぁはずかしい…。
114デフォルトの名無しさん:2005/08/31(水) 23:28:10
いや修正しなくていいから
11599:2005/08/31(水) 23:53:27
>>114
そんなことゆわんといて(>><
116デフォルトの名無しさん:2005/09/01(木) 00:14:54
C#ってC++にとってかわる可能性はあるんですか?
海外の書籍が少なので不人気なのかとちょっと疑問がわいた。
117デフォルトの名無しさん:2005/09/01(木) 00:17:46
少ないって、歴史を考えろよ

まあ少なくとも向こう5年はそうかわらんだろ
WindowsがWinFXで動くようになればWindowsの開発では主流になるかもしれん。
しかしLinuxやらでメインになることはあんまり考えられんな。
118デフォルトの名無しさん:2005/09/01(木) 00:27:06
>>117
Effective C#がない時点で少しがっかりしたのです・・・
VB.Net関係の書籍は結構でてるのにね
119デフォルトの名無しさん:2005/09/01(木) 01:06:29
確かにC++のバイブルと言われてるけど、EffectiveC++ってそんなにいい本だったかな…?
どうしようもないC++をそれでも使うための指針、がまとめられた本という印象を受けたんだけど
C#はそこのところキチンと作られてて自動的に解決されちゃうからそういう本は需要少ないんじゃないかな
120デフォルトの名無しさん:2005/09/01(木) 01:07:43
121デフォルトの名無しさん:2005/09/01(木) 01:15:51
C#は言語仕様そのものはあっさりしてるからねぇ。
2.0でGenericsが加わったとは言えテンプレートほど傍若無人なものでもないし。
どっちかってとC#よりも.NETの修得の方に時間がかかる。

あとVB.NETの本っつっても大半が入門書じゃね? 偏見に基づく先入観?
122デフォルトの名無しさん:2005/09/01(木) 01:57:53
くだスレc#の
落ちたばかりの最新のスレのアドレス知ってる方居ましたら誰か教えてください。
123デフォルトの名無しさん:2005/09/01(木) 02:03:14
つ にくちゃんねる

……くだスレ?
124デフォルトの名無しさん:2005/09/01(木) 04:40:42
>>123
昔あった、ここと似たような初心者用C#スレ。
125デフォルトの名無しさん:2005/09/01(木) 05:05:03
>>119
Effective C++は、C++使い始めの頃に読んだんだけど
なかなかヨカッタっすよ。C++の不便なところも見えたし。

>>120
海外の翻訳書が少ないって意味ですた。
あっ本当だ。でも洋書(´・ω・`)ショボーン
翻訳されるまで待つ。
とりあえず本屋に逝って目次だけ見てみる。


あと、C#版のJ2EEパターン・J2EEデザインパターンや
JAVAの鉄則みたいな書籍があると助かるのだけど・・・
MSDNのサンプルとかは役に立つのかな。
126デフォルトの名無しさん:2005/09/01(木) 05:41:32
127デフォルトの名無しさん:2005/09/01(木) 09:23:58
質問してもよいですか
vc#でボタンの名前を変更してもイベントハンドラの名前が変わりません。
button1のままです。
イベントハンドらの名前を変えるとビルドエラーになります。
これは仕様ですか?
128デフォルトの名無しさん:2005/09/01(木) 09:27:46
AというフォームがBというフォームを継承しているか調べるにはどうすればいいのですか?
129デフォルトの名無しさん:2005/09/01(木) 09:31:02
>>127
仕様。
変えたいのならハンドラのメソッド名を書き換えた上で雷マークからイベント選び直せ。

>>128
そのインスタンスが型変換できるかどうか、ならisやas演算。
typeofとかで取得したTypeがどうか、ならType.IsSubclassOfメソッド。
130デフォルトの名無しさん:2005/09/01(木) 09:39:29
128です。
ありがとうございました。
131デフォルトの名無しさん:2005/09/01(木) 21:50:47
普通のテキストは改行コードが\r\nなんですけど
Webページをローカルに保存したHtmlファイルを秀丸で確認すると
改行コードは\nだけのようです。
その\nだけのHtmlファイルをReadToEnd()で読み込んで
TextBoxに表示すると改行は入りません。
string s = "";
s = s + ReadLine() + "\r\n"
と一行ずつ読み込むしかないのでしょうか?
132デフォルトの名無しさん:2005/09/01(木) 22:05:53
Replaceすればいいんじゃね?
133デフォルトの名無しさん:2005/09/01(木) 22:07:51
>>131
Windowsでは改行コードが\r\nで、そうでないところが\nを使っている。

TextBoxはWindowsのコントロール

よって\nでは改行しない
134デフォルトの名無しさん:2005/09/01(木) 22:17:25
>>132
どんなファイルを開くか分からないことを考えると
Replaceだと行末が\rの場合、\nの場合、\r\nの場合の3パターン
処理を書かないといけないんじゃないかと思うんですけど・・・。
だとすると131で書いたようにReadLine()を使った方が良いのかなと思ったんです。

ReadLine()で\nだけの場合も改行と認識してくれるなら
一発で\r\nに置換できる方法があったも良いのになー
135デフォルトの名無しさん:2005/09/01(木) 22:34:24
改行コードが不明なのならRegex.Replace使えばよろし
136デフォルトの名無しさん:2005/09/02(金) 00:57:45
>>135
書き方がよく分からないのですが
131で書いたように3パターン書くのでしょうか
137デフォルトの名無しさん:2005/09/02(金) 11:57:16
\r、\n、\r\n全てに対応するような
正規表現は無いような・・・
\r\nがやっかいで重複してしますんですよね・・・
138デフォルトの名無しさん:2005/09/02(金) 12:16:21
\r\n|\r|\n
139デフォルトの名無しさん:2005/09/02(金) 12:31:25
すいません。
ずっと[\r\n|\r|\n]とか[ ]を付けていました・・・。
ホントすいません。
そしてありがとうございました。
140デフォルトの名無しさん:2005/09/02(金) 18:19:48
継承フォームを使ってるのだけど、MainMenuに親クラスで追加されてるMenuitem以外に
独自にMenuitemを追加しようとするとデザイナではじかれてしまいます。
何か方法はないでしょうか?
141デフォルトの名無しさん:2005/09/02(金) 22:39:01
コードで書く
メニューをContextMenuとか作ってそこに記述して、コードで連結する。とか

VisualStudio2003で ツール>Webページのビルドコメント を使ってヘルプページを作ると
プロジェクトのリストまでは出るんですけど、プロジェクトをクリックしてもページが真っ白なんですが
(個々のクラスに対するヘルプはできている模様)
どなたか解決方法ご存じないですか

コードエラーページでは
operator ==などをオーバーライドしてるところでエラーでてるってでます。
コンパイルは通るのに・・
142デフォルトの名無しさん:2005/09/02(金) 23:38:27
小さなアプリでも起動すると、
メモリ使用量が仮想メモリもあわせて20MB以上になるんですが、
こんなもんですか?

もっと小さくするテクニックとかあるんでしょうか?
143デフォルトの名無しさん:2005/09/02(金) 23:43:23
一度最小化する
ぶっちゃけ気にする必要はないよ
144デフォルトの名無しさん:2005/09/03(土) 00:16:52
コーディングレベルで、アプリの起動時間を速くするにはどうするべきでしょうか。
145デフォルトの名無しさん:2005/09/03(土) 00:46:18
起動時の処理でスグに必要じゃないものは、後回しにする。
14699:2005/09/03(土) 01:14:06
放置しないでください・・・。
147デフォルトの名無しさん:2005/09/03(土) 01:16:10
>>146
IMEを0から書けばいいよ
14899:2005/09/04(日) 12:22:22
>>147
おしえてくりすます。
14999:2005/09/04(日) 15:06:41
自己解決しますた
150デフォルトの名無しさん:2005/09/04(日) 17:33:01
SharpDevelopでAxWebBrowserとかブラウザーコントロールを使う事って出来ないのでしょうか?
151デフォルトの名無しさん:2005/09/04(日) 23:54:55
>>150
ttp://www.divakk.co.jp/aoyagi/csharp_tips_wbzone.html
ここが参考に・・・ならないね。スマソ

話は変わるけど、デジカメの2〜3MBくらいのjpgを連続で縮小してListBoxに
突っ込むプログラムを作ってるんだけど、「GetThumbnailImage」が
かなり遅くて使い物にならない。
C#ではこれが限界ですかね?

C++で速そうなソース見つけたけど、こんなのがC#用のライブラリになって
ませんか?
ttp://www.geocities.jp/i96815/mm/mm02.html
152デフォルトの名無しさん:2005/09/04(日) 23:57:43
頑張れー。

てかGDI+使ってるのならベタ移植も可能じゃん
大したコード量でも無し
153デフォルトの名無しさん:2005/09/05(月) 03:45:25
>>150
ふつうにshdocvw.dllをtlbimp
154デフォルトの名無しさん:2005/09/05(月) 18:54:13
>>151
こんな感じ

Image srcImage = //元になる画像
Size destSize = //縮小するサイズ
Bitmap destImage = new Bitmap(destSize.Width, destSize.Height); //縮小されたイメージ
Rectangle srcRect = new Rectangle(new Point(0, 0), srcImage.Size);
Rectangle destRect = new Rectangle(new Point(0, 0), destSize);
using (Graphics g = Graphics.FromImage(destImage)) {
  g.InterpolationMode = //縮小補完モード
  g.DrawImage(srcImage, destRect, srcRect, GraphicsUnit.Pixel);
}

//必要に応じて
//srcImage.Dispose();
//destImage.Dispose();

でもあんまり速くならないと思う
15599:2005/09/05(月) 20:12:14
放つ+置く=放して置く=放置。
156デフォルトの名無しさん:2005/09/05(月) 20:18:42
放す≠離す
157デフォルトの名無しさん:2005/09/06(火) 13:23:11
ArrayList list = new ArrayList();
string[] ss = {"タイトル", "内容"};
list.Add(ss);
listBox.Items.Add((string)list[0][0]);
textBox.Text = (string)list[0][1];

としてリストボックスにタイトル、テキストボックスに内容を表示しようとすると
「角かっこ [] 付きインデックスを 'object' 型の式に適用することはできません。」
と出てビルドできません。
何がいけないのでしょうか?

AddやRemoveを使いたいのでArrayListを使いたいのですがムリなんですかね?
158デフォルトの名無しさん:2005/09/06(火) 13:28:55
>>157
OKまずは分解だ。

ArrayList list = new ArrayList();
string[] ss = {"タイトル", "内容"};
list.Add(ss);
object o1 = list[0];
listBox.Items.Add((string)o1[0]);
object o2 = list[0];
textBox.Text = (string)o2[1];

ばらしてやるとこういうコードになるわけだが、さて不自然な点はどこかな?
159157:2005/09/06(火) 13:30:39
RemoveではなくRemoveATですね
160デフォルトの名無しさん:2005/09/06(火) 15:00:03
list[0]はstring[] ではなくobject。
ArrayListについてのリファレンス読むべし。
だからlist[0][0]はそのエラーが出る。

インデックスでアクセスしたいならstring[]にキャストする
((string[])list[0])[0]
161デフォルトの名無しさん:2005/09/06(火) 15:45:16
>>159-160
レスありがとうございます。
検索しながらあれこれやってみて
listBox.Items.Add((string)((Ilist)list[0])[0])
とIListにキャストすると出来ました。
意味はよく分かっていないのですが・・・。
string[]でも出来るのですね。確認しました。
> ArrayListについてのリファレンス読むべし
確かに奥が深いですね。勉強し直します。
ありがとうございました。
162デフォルトの名無しさん:2005/09/06(火) 17:12:15
string[] に素直にキャストすればいいのに
なぜ IList にキャストするんだろう
163151:2005/09/06(火) 20:56:52
>>154
トンクスです。
やっぱり速度を求める場合はC++の方がいいと再認識。
とりあえず、マルチスレッドでやってますが、いずれC++に移行する予定。
C#いろいろ楽でいいんだけどな〜
164デフォルトの名無しさん:2005/09/06(火) 20:59:26
この場合責任はGDI+にあると思ふ
C#で速度が欲しいならDllImportでGDI関数を直接扱ってみたら?
165151:2005/09/06(火) 21:09:09
>>164
なるほど、GDIのサンプルなら結構ありそうなので
それを利用してやってみます。
たぶん、ボトルネックは画像の読み込みかも。
166デフォルトの名無しさん:2005/09/07(水) 19:13:18
おしえてください

データベースを弄くるものを作りたいなと思っています。
フォームに名前や住所などを入力するテキストボックスを作って、
そこから入力されたものをレコードとして追加したいのですが、
詰まってしまいましたorz

string name = textBox1.Text;
string tel = textBox2.Text;

string sqlStr = "INSERT INTO 顧客 (名前, 電話番号)"
+ "VALUES (name, tel)";

みたいなことをしたいのです・・・
"VALUES (name, tel)";
じゃだめに決まってますよねorz

初心者杉でごめんなさい
よろしくおねがいしまs
167166:2005/09/07(水) 19:17:26
うあああすみません

自己解決しましたorzz
168デフォルトの名無しさん:2005/09/07(水) 19:17:38
"VALUES (name, tel)";

だと name も tel も変数ではなくて文字列として処理される。

文字列と変数の違いを理解しましょう。
169デフォルトの名無しさん:2005/09/07(水) 19:18:37
やられた…。
170デフォルトの名無しさん:2005/09/07(水) 22:52:23
たびたびごめんなさい

テキストボックスが空欄になっていないことを条件にしたいのですが、
どのように書いたらよいでしょうか?

string a = textBox1.Text;

if(a =! null)

ではまずいでしょうか?

171デフォルトの名無しさん:2005/09/07(水) 22:53:15
普通コントロールのTextプロパティはnullにはならないよ。
空欄の場合は空文字列。""かString.Emptyか。
172デフォルトの名無しさん:2005/09/07(水) 22:53:35
不味いね。

if(a != null && a != String.Empty)
173デフォルトの名無しさん:2005/09/07(水) 22:54:57
おおお即レスありがとう!!

やっぱりstringがnullはおかしいですよねorz
たすかりましたー
174デフォルトの名無しさん:2005/09/07(水) 22:58:42
いやstringはクラスであって構造体ではないのだから、当然nullにはなりうる。
ただコントロールのTextプロパティはnullには普通ならないってだけ。
//多分決してならない、だと思う。nullを代入しても代わりに空文字列が入るしね。
175デフォルトの名無しさん:2005/09/07(水) 23:12:01
>>174
解説ありがとうございます
なるほど意味が分かりました!
テキストボックスだからだめだったんですね
ありがとうです!
176デフォルトの名無しさん:2005/09/08(木) 00:27:04
>>172
素直に string.IsNullOrEmpty を使えよ
177デフォルトの名無しさん:2005/09/08(木) 00:31:54
2.0になったらな
178デフォルトの名無しさん:2005/09/08(木) 00:32:34
>>176
それ2005だろ
179デフォルトの名無しさん:2005/09/08(木) 00:44:38
すまんかった

Version Information

.NET Framework
Supported in: 2.0
.NET Compact Framework
Supported in: 2.0
180デフォルトの名無しさん:2005/09/08(木) 00:57:26
思わずSDKドキュメント開いちまったよ。
181デフォルトの名無しさん:2005/09/08(木) 03:02:25
ずらーとmenuitemとかの初期化と定義をする場合、
ベタに書くのとforでまわして配列で定義するのって
実行時はどっちが効率的なんですか?

書くの面倒くさいけどベタに書いた方が
コンパイラが上手くやってくれるんでしょうか?
182デフォルトの名無しさん:2005/09/08(木) 03:04:25
有意の差はない
183デフォルトの名無しさん:2005/09/08(木) 03:10:54
>>182
そうですよね。よく考えたら
それくらいで差がある方がおかしいですよね。
失礼しました。
184デフォルトの名無しさん:2005/09/08(木) 18:55:13
vc#でdllを作りたいのですが、何か易しい参考書はありませんか?
185デフォルトの名無しさん:2005/09/08(木) 18:58:14
参考書?
プロジェクトのプロパティで出力の種類をライブラリにするだけだろ?
186デフォルトの名無しさん:2005/09/10(土) 02:19:33
色目ちゃんってツールみたいにクリックした場所の色を取得するにはどうしたらいいのでしょうか?

http://www2.lint.ne.jp/~lrc/de_mouse.htm
本家サイトはなくなったみたいです
187デフォルトの名無しさん:2005/09/10(土) 09:52:04
Win32APIを使うしかないな。
CreateDCでディスプレイのデバイスコンテキスト作って、それを元にGetPixel使うとか。
18899:2005/09/10(土) 22:38:20
6+4=10 ではありません。無視です。
189デフォルトの名無しさん:2005/09/12(月) 22:16:37
>>187
レスありがとうございます
手探りですが調べて以下のようにやれば出来そうなのですが、
「Bitmap b」をどのようにして実体化すればいいのかで行き詰まっています・・・。
というか、こんな感じで良いのでしょうか?

[DllImport("Gdi32.dll",EntryPoint="CreateDC")]
private static extern IntPtr CreateDC(string Display,string c, object b, object a);

//マウスを押したとき
private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e){
//動作の判定
if (checkBox1.Checked){
 Graphics g = Graphics.FromHdc(CreateDC("DISPLAY", null, null, null));
 Bitmap b = ;
 Color c = b.GetPixel(e.X, e.Y);
 MessageBox.Show(c.Name, this.Text);
 }
}
190デフォルトの名無しさん:2005/09/12(月) 22:47:29
GetPixelもWin32API。
色目ちゃんとやらの仕様を知らないので、ディスプレイの任意の位置の色の取得という手法を考えているんだが合ってる?
191デフォルトの名無しさん:2005/09/12(月) 22:52:55
>>190
Microsoft Win32 と Microsoft .NET Framework API との対応
http://www.microsoft.com/japan/msdn/net/general/win32map.asp
ここを読んでSystem.Drawing.Bitmap.GetPixelで良いのかと思ってました。
またもやWin32APIですか・・・。もうちょっと調べてみます。

> ディスプレイの任意の位置の色の取得という手法を考えているんだが合ってる?
はい、クリックした位置の色を調べたいのです。
192デフォルトの名無しさん:2005/09/12(月) 23:13:11
APIのGetPixelはデバイスコンテキストにあるものの色を取得できるから。
GDI+ではその辺が整理されてGDIとは関係がいささかねじれてしまってるから、単純に置き換えは難しい。
193デフォルトの名無しさん:2005/09/13(火) 01:20:58
Microsoft.Windows.Forms ではなく System.Windows.Forms なのはなぜ
194デフォルトの名無しさん:2005/09/13(火) 01:31:43
Windowsは別にMicrosoftの商標としてのWindowsではなくウィンドウシステムとしてのWindowsだからさ
195デフォルトの名無しさん:2005/09/13(火) 07:08:10
>>190
[DllImport("Gdi32.dll",EntryPoint="CreateDC")]
private static extern IntPtr CreateDC(string Display,string c, object b, object a);

[DllImport("Gdi32.dll", EntryPoint="GetPixel")]
private static extern Color GetPixel(IntPtr hWnd, int x, int y);

int x = Cursor.Position.X;
int y = Cursor.Position.Y;
Color c = GetPixel(CreateDC("DISPLAY", null, null, null), x, y);
MessageBox.Show(c.Name, this.Text);

こんな感じかなと思うのですが、
テストとしてForm1のMouseDownイベントハンドラに実装すると
Color c = の所で
---
'System.NullReferenceException' のハンドルされていない例外が WindowsApplication5.exe で発生しました。

追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。
---
と出ます。何がいけないかさっぱりです。
196デフォルトの名無しさん:2005/09/13(火) 08:15:50
ん〜と。
・CreateDCしたデバイスコンテキストは、使い終わったらDeleteDCしなければならない
・GetPixelが返すCOLORREFは.NETのColor構造体とは無関係の32ビット値。
 Color構造体に変換するにはSystem.Drawing.ColorTranslator.FromWin32メソッドなどを使用する
197デフォルトの名無しさん:2005/09/13(火) 17:39:26
CreateDC("DISPLAY", null, null, null)がいつも無効なパラメーターが出るのを発見。
GetDC(GetDesktopWindow())の値でGetPixelをやってみたら常に-1が返ってくる。
途方に暮れている時、GetWindowDCじゃないとダメとのHPを見つけ、
GetWindowDC(GetDesktopWindow())とやってみたら見事上手いこと出来ました。
>>187,>>190,>>192,>>196さん、ありがとうございました。
198デフォルトの名無しさん:2005/09/13(火) 18:02:18
>>197
GetWindowDC(null)でたぶん平気だよ。
最後にGetDC/GetWindowDCの返すハンドルはReleaseDCへ。
199デフォルトの名無しさん:2005/09/13(火) 21:48:21
>>198
レスありがとうございます。
ReleaseDCでしたか。意味も分からずDeleteDCとしてました。
ReleaseDCはWebで調べた限りでは、
---
[DllImport("user32.dll")]
public static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDc);
---
とパラメータが2つ必要みたいなので
> GetWindowDC(null)
はムリっぽいと思い無難にWebを参考に
IntPtr hwnd = GetDesktopWindow();
IntPtr hdc = GetWindowDC(hwnd);
ReleaseDC(hwnd, hdc);
としました。
多分これで問題ないと思うのですが・・。
200デフォルトの名無しさん:2005/09/13(火) 21:58:45
NULLで取得したものはNULLで解放すればいいのさ
まあ>199でも問題ないけどね
ちなみに NULL == IntPtr.Zero てのはOKね?
201デフォルトの名無しさん:2005/09/13(火) 22:10:49
VC# Express Beta2 と店に売ってるvc#は、
機能としてはどのような違いがあるのですか?
beta版は使えるコントロールが少ないとかそんな程度ですか
202デフォルトの名無しさん:2005/09/13(火) 22:12:52
>>200
> ちなみに NULL == IntPtr.Zero てのはOKね?
これが分からず、「nullからIntPtrに変換できません」と出てよく分からなくなっていました。
IntPtr hdc = GetWindowDC(IntPtr.Zero);
ReleaseDC(IntPtr.Zero, hdc);
で動くことを確認しました。m(_._)m
203デフォルトの名無しさん:2005/09/13(火) 22:17:14
>>201
ベータテストって知らないの?
204デフォルトの名無しさん:2005/09/13(火) 22:18:53
>>201
Beta版とは要するに試作品。
205デフォルトの名無しさん:2005/09/13(火) 22:34:21
>>201
>VC# Express Beta2
VC#2005のベータ版、その中でもExpressはもっとも安い
>店に売ってるvc#
VC#2003、何種類か出てる

3つの点で違います

まずVC#2003とVC#2005の違い
・IDEが便利になった
・ライブラリが新しくなった
・言語仕様が新しくなった
新しいほうが色々と便利な機能が増えています
今までのが変わったというより色々追加された印象

ベータ版とは
・無保証
・バグあり
・使用期限あり
ベータ版は発売する前に試してもらうという意味合いが大きいので実際の商売には使いません
MSでは使った人の声をフィードバックして販売するものをもっと良くしたり、宣伝のためだったり
学習するのに使って欲しいみたいです

最後にExpressとそれ以外の違い
ExpressはVC#2005ではもっとも安く5000円程度で販売される予定です
高価なものは業務向けシステムを組むのに便利なコンポーネントなどが追加されています

ぶっちゃけた話、今のbetaって販売されるものとほとんど変わらんと思うよ
VC#2003向けの入門書が使えるのか?っていう話なら、細かい所は違うから読み替える自信があるなら大丈夫
206201:2005/09/14(水) 09:51:57
>>205
そうなんですか。有難うございます。
新しくでる2005を買うことにします。
207デフォルトの名無しさん:2005/09/16(金) 10:46:29
ちょっとわからなくて困ってます。
数値をバイナリ形式でファイルに保存することを考えてるんですけど、
エクセルマクロでバイナリファイルを作った場合、
出来上がったファイルをメモ帳で開くと読めない文字
(wordファイルをメモ帳で開いたときみたい)になっているのですが、
C#で作成した場合、下の例ではHelloと文字になってしまします。
数値をバイナリ形式で保存したい場合、
どのようにコードを書けばいいんでしょうか?

private void button1_Click(object sender,System.EventArgs e)
{
int [] mydata = {72,101,108,108,111}
FileStream hoge = new FileStream(@"C:\testbin.txt",FileMode.OpenOrCreate,FileAccess.Write);
foreach (byte mybin in mydata)
{
hoge.WriteByte(mybin);
}
hoge.Close();
}
208デフォルトの名無しさん:2005/09/16(金) 10:53:29
誰か翻訳
209デフォルトの名無しさん:2005/09/16(金) 11:06:29
そいつは難しい話だ。

207が何したいのか良くわからん。
0x48 0x65 0x6C 0x6C 0x6F という並びがあるとして、
これをそのままバイトデータとして書き込みたい?
書き込んだらメモ帳で開いたときに文字コード的にHelloになるのは当然だし。
バイナリ形式って何?
どういう形になるのがお望みなの?
バイナリエディタで開いたときにどう見えるのが希望の形?
210デフォルトの名無しさん:2005/09/16(金) 11:22:10
>>207
とりあえずint配列をforeachでbyteで取り出すのはやめれ。
BitConverter.GetBytes()で得たbyte[]をStream.Write()に書け。
211207:2005/09/16(金) 14:20:33
int配列のデータをバイナリファイルに保存したいだけなんです。
212デフォルトの名無しさん:2005/09/16(金) 14:26:15
つ[ttp://www.atmarkit.co.jp/fdotnet/dotnettips/045getbytes/getbytes.html]

でも、>>207 もちゃんと「int配列のデータをバイナリファイルに保存」してるんだよなぁ……
213デフォルトの名無しさん:2005/09/16(金) 14:58:11
いっそSystem.Runtime.Serialization.Formatters.Binary.BinaryFormatterでシリアライズというのはどうよ。
何も考えずに「int配列のデータをバイナリファイルに保存」できるぜ。
214デフォルトの名無しさん:2005/09/16(金) 15:47:13
>>213
こういうことですか?↓

public static void SaveToBinaryFile(object obj, string path)
{
FileStream fs = new FileStream(path,FileMode.Create,FileAccess.Write);
BinaryFormatter bf = new BinaryFormatter();
//シリアル化して書き込む
bf.Serialize(fs, obj);
fs.Close();
}
}
215デフォルトの名無しさん:2005/09/16(金) 21:19:25
C#で自作の関数を宣言するには、
private static voidを使うというのを見たんですが、
private static void scan()
{
string path = textBox1.Text;
string currentdirectory = System.IO.Directory.GetCurrentDirectory() + "\\setting.ini";
string pattern = textBox2.Text;
//以下略
}
のように、private static voidの中でtextBoxの内容をstringに突っ込むにはどうしたらよいのでしょうか?
上の例でやったらエラーになります。
216デフォルトの名無しさん:2005/09/16(金) 21:24:28
private static void scan(System.Windows.Forms.TextBox textBox1,System.Windows.Forms.TextBox textBox2)
{
string path = textBox1.Text;
string currentdirectory = System.IO.Directory.GetCurrentDirectory() + "\\setting.ini";
string pattern = textBox2.Text;
//以下略
}
217デフォルトの名無しさん:2005/09/16(金) 21:25:12
staticにする必要があるのか? ないだろな。

> C#で自作の関数を宣言するには、
> private static voidを使うというのを見たんですが、
どこで見たんだそんな馬鹿なこと
……いや215の読み間違いかもしれんか
218215:2005/09/16(金) 21:36:50
よく見たらグローバル関数っぽいものを作るのに使うんだった・・・orz
見たところはここ→ttp://homepage3.nifty.com/midori_no_bike/CS/
しかもstaticの位置違ってるし・・・OTL

>>216
thx
219デフォルトの名無しさん:2005/09/16(金) 21:37:36
そもそも、システム設(ry
220デフォルトの名無しさん:2005/09/16(金) 21:45:04
>>218
static の位置は間違って無いよ。アクセサは順不同。俺もその順で書くし。
221デフォルトの名無しさん:2005/09/16(金) 22:28:51
private static   て言うのがなかなかにレアな指定だが。  無くは無いかも・・
222デフォルトの名無しさん:2005/09/16(金) 22:30:41
>>221
そのあとにexternがついてうえにDllImportがつくのは良く見かける。
223デフォルトの名無しさん:2005/09/16(金) 22:34:12
フィールドは public static よりも private static の方がおおいお
224デフォルトの名無しさん:2005/09/19(月) 23:03:43
完全にカスタムメイドなTextBoxを作ろうとControlから派生しているのですが
実際にテキストを入力するUIはどうやってつくるのですか?
225デフォルトの名無しさん:2005/09/19(月) 23:28:33
自分で描画するしかないんじゃね
226デフォルトの名無しさん:2005/09/19(月) 23:36:31
private void hoge()
ってのと
private static void hoge()
って動作速度とかメモリ消費量に差が出ますか?
hogeは確実にプログラム内でコールされるって過程でおながいします。
227デフォルトの名無しさん:2005/09/19(月) 23:39:26
差は微々たるもん。千万回以上コールしないと違いなんてわかんないよ
228226:2005/09/19(月) 23:45:55
そうなんですか…

素人プログラマなんでstaticなぞ使ったことないのですよ。
229デフォルトの名無しさん:2005/09/19(月) 23:47:49
hoge メソッドがインスタンスから意味的に独立しているのならば、static を使えばよろし
ちなみに static の方が若干早いはず
230226:2005/09/19(月) 23:52:05
ご丁寧にありがとうございます。
意味的に独立している〜って判断が難しそうですが、
ほとんどの場合クラス自体Form1で終わってしまうので
中々C#の使いこなせてない感じです。
231デフォルトの名無しさん:2005/09/20(火) 03:03:51
>>224
キーが押されたらTextを更新してInvalidateを呼ぶ。
で、OnPaintをオーバーライドしてTextを基にして描画。
みたいな感じかな
232デフォルトの名無しさん:2005/09/20(火) 11:54:01
カレット操作も必要だな。
233デフォルトの名無しさん:2005/09/20(火) 23:16:38
>>231
Controlから派生するとわかるけど、
そのTextを更新するところがないんですけど・・・
234デフォルトの名無しさん:2005/09/20(火) 23:18:31
Text = (更新後のテキスト);
Invalidate();

これが何か?
235デフォルトの名無しさん:2005/09/20(火) 23:26:15
だから、更新後のテキストをどこに入力するの?
テキストが入力できるところってキャレットがフリッカしてんじゃん
そのキャレットがフリッカしているところがない
236デフォルトの名無しさん:2005/09/20(火) 23:26:54
それを自分で書くって話じゃないのかよw
237デフォルトの名無しさん:2005/09/20(火) 23:33:00
Control にはキャレット自体が無いじゃん
Control を継承したのなら、自分でキャレットを作らないといけないし、作りたくなかったら Control の継承を止める
238デフォルトの名無しさん:2005/09/20(火) 23:37:09
だからそれをどうやって書くんだよ
まじ頭わりーな
239デフォルトの名無しさん:2005/09/20(火) 23:42:46
テキストが入力できないのか、キャレットが作れないのか、どっちか選んでくれないか?
あたま悪くて俺はわかんね
240デフォルトの名無しさん:2005/09/20(火) 23:43:04
OnPaintで描画するんだからPaintEventArgsにGraphicsがあるでしょー? わかるかなー?
241デフォルトの名無しさん:2005/09/20(火) 23:46:20
これはもうだめかもわからんね
242デフォルトの名無しさん:2005/09/21(水) 00:16:17
TextBoxで描画されたこと(無効領域の発生)をどうすればわかりますか?

TextBoxだとPaintイベントが発生しないんですが
243デフォルトの名無しさん:2005/09/21(水) 00:35:05
こいつは何をしたいんだろう
244デフォルトの名無しさん:2005/09/21(水) 00:56:35
TextBoxをつくりてーつってんじゃん
245デフォルトの名無しさん:2005/09/21(水) 01:02:16
四角く白で塗って
縦棒点滅させとけ
246デフォルトの名無しさん:2005/09/21(水) 01:29:26
とりあえず、C# から java に転向して、java.awt.Canvas を継承して作れ。
それから C# に戻ってきて作った方が早い。
247デフォルトの名無しさん:2005/09/21(水) 01:34:01
なんのためにテキストボックスを
> 完全にカスタムメイド
で作る必要があるんだ
248デフォルトの名無しさん:2005/09/21(水) 05:05:10
キーワードの色分けやルーラーとかを完全自作でやる気か
249デフォルトの名無しさん:2005/09/21(水) 09:05:01
ホームページでウエブアプリとか簡単に作れるのかな?
閲覧者のパソコンに、.NETフレームワークが入ってて、
自分がウエブアプリを作っておけば、ホームページにアップすれば、
それだけで、良いの?
それとも他に特殊な何かが必要なのですか?
昔、ちらっと,net用のサーバーが必要だとか聞いた気もするのですが。
250デフォルトの名無しさん:2005/09/21(水) 09:11:16
ってことは、
.NET用のサーバーを探してこなきゃ、駄目とか?
251デフォルトの名無しさん:2005/09/21(水) 09:33:40
ASP.NETを動かすには、IISを使うかmonoプロジェクトの成果物を使うか。
自前でサーバを用意するんでない限り後者はまず無理。
IIS/ASP.NETを使用できるレンタルサーバならMicrosoftに紹介がある。
なおWebアプリってのは処理をサーバ側が行うので、クライアントはWebブラウザさえあればいい。

ちょっと掲示板プログラム書いてみて公開したいってのには向かないね。
252デフォルトの名無しさん:2005/09/21(水) 10:19:23
なるほど。ありがとうございます。
javaスクリプトみたいなことは今のところ、c#ではできないってことですね。
>なおWebアプリってのは処理をサーバ側が行うので、クライアントはWebブラウザさえあればいい。
これについては、もちろん、クライアントは.NETフレームワークが必要ですよね。
253デフォルトの名無しさん:2005/09/21(水) 10:32:36
いらんよ。
ていうかなに、JavaScriptみたいなのを想定してたの?
それはWebアプリとは言わない。
.NET Frameworkではそういうのはサポートしていないな。

ノータッチデプロイメントという手法はある。
サーバに実行ファイルを用意しておいて、クライアントがIEから直接それをダウンロード&実行するというものだ。
インターネット越しの場合、普通はかなり強固にセキュリティに縛られるけどな。

ttp://www.gotdotnet.com/japan/team/windowsforms/iesourcing.aspx
こういうのもあるけどユーザにセキュリティをゆるめて貰う必要がある。

何をしたいのか分からないことにはこれ以上言いようもないな。
254デフォルトの名無しさん:2005/09/21(水) 11:08:07
なるほど。
ありがとうございました。
255デフォルトの名無しさん:2005/09/21(水) 13:58:58
こんにちは。
独自のコンテキストメニューのようなものを作成したいと考えています。
Formをベースに作成しようと思ったのですが、普通にやるとフォーカスが
ShowしたFormに来て、親ウインドウがアクティブではなくなってしまいます。
これをコンテキストメニューや、コンボボックスのように、親ウインドウ
がアクティブなまま操作できるポップアップコントロールを作成したいの
ですが、ベースとなるコントロールがそもそもFormで可能なのかもよく
わかりません。
よろしければどのようなコントロールをベースにすればよいのか、
もしくはフォームを設定すればよいのか、アドバイスを頂けないでしょうか。
よろしくお願いいたします。
256デフォルトの名無しさん:2005/09/21(水) 14:05:19
MenuItemをオーナードローした方が手っ取り早そうな予感
257デフォルトの名無しさん:2005/09/21(水) 14:53:36
ちょっと説明不足でした。
一番近いのはVisualStudioのエディタのパラメータの
入力時に出るオーバーロードの一覧ToolTipみたいな感じ
( [▲] 1/5 [▼] ・・・←こんなの)で、ちょっと独自の
操作系を実装したいと考えています。
MenuItemはあまり挙動を弄れそうにないのです・・
258デフォルトの名無しさん:2005/09/21(水) 16:58:37
>>251
Apacheのmod_aspdotnetでも可能
259デフォルトの名無しさん:2005/09/21(水) 21:57:41
>>255
じきにdat落ちするから早く見とけ

http://pc8.2ch.net/test/read.cgi/tech/1122352650/662-664
260三咲:2005/09/23(金) 12:07:07
ちょっとわからなくて困ってます。
ボタンを押したらサブルーチンを呼び出し、計算結果をラベルに表示することを考えてます。
それで以下のように書いたのですが、エラーになってしまいます。
計算結果をメッセージボックスに表示する場合はちゃんと動くのですが、フォームのラベルには表示できません。
static関数の中でラベルへの表示はできないんでしょうか?

namespace test0921{
public class Form1 : System.Windows.Forms.Form{
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Button button1;
//中略

private void button1_Click(object sender, System.EventArgs e){
double a=2,b=4;
subroutine1(a,b);
}
static void subroutine1(double x,double y){
double MYsub;
MYsub=Math.Pow (x,2)+Math.Pow (y,1/2D)+10;
test0921.Form1.label1.Text=MYsub.ToString();
}
261デフォルトの名無しさん:2005/09/23(金) 12:11:47
死ね
262デフォルトの名無しさん:2005/09/23(金) 12:22:39
ああサブルーチンって懐かしい響き。ここ数年聞いたこと無かったや。

ところで、なんでsoubroutine1内で書き込みまでさせるの?
普通サブルーチンって言えば計算させて結果をよこすとかそう言うもんじゃない?
そもそもなんでsoubroutine1をstaticにしようと思ったの?

まずオブジェクト指向の基礎からやらなくちゃいけないが、さて。
ttp://www-ise2.ist.osaka-u.ac.jp/~iwanaga/study/csharp/index.html
この辺からか。
263三咲:2005/09/23(金) 13:04:00
>>262
ここ↓のサンプルを見ていてConsole.Writeで結果を出していたので、labelでできないかと思ってやってみたんです。
http://www-ise2.ise.eng.osaka-u.ac.jp/~iwanaga/study/csharp/st_function.html#EN
サブルーチンの中で書込みさせる理由は、座標の計算をして結果とかグラフを描こうと思ったためです。
264デフォルトの名無しさん:2005/09/23(金) 13:06:24
その程度の知識じゃ遠い道のりですねw
外注にでも作ってもらったら?
265三咲:2005/09/23(金) 14:24:11
プログラミングしか能がないくせに偉そうで最低ですね。
266三咲:2005/09/23(金) 14:40:24
>>264
お試しC#で勉強している身なんで、外注はできません。

>>265
三咲を名乗るのはやめて下さい。
267デフォルトの名無しさん:2005/09/23(金) 14:43:34
楕円を描くときって
g.DrawEllipse(Pens.Black,rec);
で描けますが、
逆にrecを与えたら座標リスト(point[])として楕円を返すようなメソッドってないでしょうか?
268デフォルトの名無しさん:2005/09/23(金) 14:44:16
だからさ、サブルーチンでは計算だけさせて結果をどうするのかは呼出側が考えるようにしろと。

あと素直にオブジェクト指向について学んでこい。
269デフォルトの名無しさん:2005/09/23(金) 15:04:35
>>267
GraphicsPathにAddEllipseして、FlattenしてからPathPointsプロパティかな。
PointF[]だけど。
270267:2005/09/23(金) 15:24:07
うわっどれもはじめて聞く単語だ…

早速調べてみます。
ありがとうございました。
271デフォルトの名無しさん:2005/09/23(金) 15:25:57
>>260
まあなんだ、static外したら
272デフォルトの名無しさん:2005/09/23(金) 16:16:42
>>267
そんなもん高校数学の知識があればすぐできんじゃん
273デフォルトの名無しさん:2005/09/23(金) 19:30:03
>>272
ネタはいいから
274デフォルトの名無しさん:2005/09/24(土) 03:10:02
>>273
ネタですか?
275デフォルトの名無しさん:2005/09/24(土) 17:30:16
教えてください。
ネットワーク上のコンピュータ(\\○○\)の共有フォルダ一覧を取得したいのですが、
どのようにすればよいのでしょうか。
System.IO.Directory.GetDirectories
では取得できませんでした。
よろしくお願いいたします。
276デフォルトの名無しさん:2005/09/25(日) 01:55:38
277デフォルトの名無しさん:2005/09/25(日) 03:11:37
>276
むほっ。一筋縄ではいかなそうですね。
明日詳細に追って見ます。
ありがとうございます。
278デフォルトの名無しさん:2005/09/26(月) 21:38:59
ここレスか?
初心者をいびるスレというのは。
279デフォルトの名無しさん:2005/09/26(月) 21:42:24
愛の鞭です
基本サドなので
280デフォルトの名無しさん:2005/09/27(火) 17:59:58
自作の関数を作りたいんですが、javaなどのfunctionにあたるのってないんですかね?

voidとか何かの組み合わせでグローバル関数モドキは作れるってどっかに書いてあったんで試したんですが、引数0個指定出来ないとかなんとかって怒られてうまくいかないんですが
281デフォルトの名無しさん:2005/09/27(火) 18:02:03
function なんてキーワードあるのは Java じゃなくて J(ava)Script だろ
282デフォルトの名無しさん:2005/09/27(火) 18:28:00
この前から、何故か関数にこだわる奴がいるんだ。
メソッドで駄目な理由を説明しろ。
283デフォルトの名無しさん:2005/09/27(火) 18:30:21
予想:だってどこからでも呼べるんじゃないと不便じゃないですか
284デフォルトの名無しさん:2005/09/27(火) 18:34:31
>>280
クラスを1つだけにして総べてその中に書け。

class all
{
  int a,b,c;
  string str1;

  void sub1()
  {
  }
      :
      :
      :
  void subXXX1()
  {
  }

  void main(void)
  {
  }
}
285デフォルトの名無しさん:2005/09/27(火) 18:40:32
ヒント: public static
286デフォルトの名無しさん:2005/09/27(火) 18:44:49
>>285
そりは、前に 「オブジェクトのデータがアクセスできません!何で!!」
の質問がきてたぞ。w
287デフォルトの名無しさん:2005/09/27(火) 22:33:13 ID:0
>>286
仕様です。
288デフォルトの名無しさん:2005/09/27(火) 23:14:33
mainについてないよ、ということでは
289デフォルトの名無しさん:2005/09/27(火) 23:43:19
Main関数からインスタンスメソッド呼べないよとか言ってくるじゃん
290デフォルトの名無しさん:2005/09/28(水) 02:01:17
「インスタンス」とか知っててそれはありえないから
291デフォルトの名無しさん:2005/09/28(水) 19:51:02
>>282
vbからやって来たのが多いからじゃないのかな。
vb.netにするならc#って感じで。
292デフォルトの名無しさん:2005/09/28(水) 19:59:34
staticを理解するには何を読めばいいでしょうか?
初心者用のバイブル本をおしえてくださるとありがたいです。
きたみあきこの「かんたんプログラミング」から始めたのが間違いだった。
あれではオブジェクト指向なんてまったく理解できない。
293デフォルトの名無しさん:2005/09/28(水) 20:23:07
static を使わないことを先ず覚えろ
294デフォルトの名無しさん:2005/09/28(水) 20:33:26
単に自分の選書ミスが原因なだけじゃん
295デフォルトの名無しさん:2005/09/28(水) 20:40:53
本を読んだだけで理解できたら苦労しないよ
296デフォルトの名無しさん:2005/09/28(水) 21:46:11
Point A //(10,10)
Point B //(20,30)
から
Point C = B-A //(10,20)
のような結果を得るため "-"に相当する演算を行いたいのですが、
どうすればいいのでしょうか?
+,-がPointに対し定義されているらしいのですが
どう使えばいいのかわかりません。
297デフォルトの名無しさん:2005/09/28(水) 21:51:47
定義されてるらしいんなら Point C = B - A;
298デフォルトの名無しさん:2005/09/28(水) 21:52:09
>>296
リファレンスでPoint構造体の演算子と型変換を見てみるとどういう型同士の演算ができるのか分かると思うよ
299296:2005/09/28(水) 21:53:43
演算子 '-' を 'System.Drawing.Point' と 'System.Drawing.Point' 型のオペランドに適用することはできません。
というエラーになります。

ttp://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_008/cs2_008_03.html
によると
System.Drawing.Point構造体には、「+」や「-」の演算子が存在する。
とあるのですが…
さっぱりわかりません。
300デフォルトの名無しさん:2005/09/28(水) 21:54:27
Size sA = new Size(A);
Point C = B - sA;
301296:2005/09/28(水) 21:58:42
>>300!さん
ありがとうございました。
それで行けました。
Point - Pointは出来ないのに
Point - Sizeなら行けるのですね…ややこしい
302デフォルトの名無しさん:2005/09/28(水) 22:02:09
>>301
むしろ
Point C = B - (Size)A;
303296:2005/09/28(水) 22:05:10
うほっいいキャスト。
PointからSizeにキャストできるんですね。
ますますすっきりしそうです。
ありがとうございました。
304デフォルトの名無しさん:2005/09/28(水) 22:05:40
だからさーちょっとはリファレンスを見ろよー
305デフォルトの名無しさん:2005/09/28(水) 22:12:28
明示的キャストだろうと new だろうとコストは変わらんと思う
306デフォルトの名無しさん:2005/09/29(木) 10:54:40
SizeからPointにキャストすることって、newなみのコストかかるの?
307デフォルトの名無しさん:2005/09/29(木) 10:59:02
そりゃ結局新しいインスタンスを作るんだから全くかわらんよ。
ildasmでSystem.Drawing.dllをあけて
Point構造体のop_ExplicitメソッドとかSize構造体の.ctor(コンストラクタメソッド)とかみればすぐ分かる。

ま、いずれにせよ構造体をnewするコストなど考慮する必要も無し。
308デフォルトの名無しさん:2005/09/29(木) 12:36:49
ウホッ op_Explicitの中で、newやってる。 キャストの方が高コストってわけなのかorz
309デフォルトの名無しさん:2005/09/30(金) 18:40:33
>>292
staticはクラスのインスタンスが共通して使うけれども、インスタンスの内容に依存しないメンバーにつける。
例えば文字列をMSゴシックで描画するDrawMSGothicTextクラスを作る場合、
MSゴシックフォントはnew Font("MS ゴシック", 12)で作るわけだが、
すべてのインスタンスでFontクラスを生成してたら時間とメモリの無駄だろ?
だからあらかじめ
protected static Font _msgothic = new Font("MS ゴシック", 12)
みたいにstaticをつける。
こうすればFontクラスが生成されるのはDrawMSGothicTextクラスが初めて使われるときだけ。

以下のような使い方をされた場合、staticがついてるとFontクラスが生成されるのは@のときだけ。
staticがついてないとAのときもFontクラスを生成してしまってその分メモリと時間が無駄になる。

dw1 = new DrawMSGothicText("テスト1"); ←@
dw1.Draw();
dw2 = new DrawMSGothicText("テスト2"); ←A
dw2.Draw();
まぁいろいろ試して体で覚えるしかないけどな。


オブジェクト指向を実践的に覚えたいならこれ↓
ttp://www.amazon.co.jp/exec/obidos/ASIN/4894712288/
プログラムには手続き型で書くべき場合とオブジェクト指向で書いた方がいい場合があるわけだが、
むりやり手続き型で書かれてしまったコードをオブジェクト指向に書き直す手順が丁寧に解説されている。
自分のコードを上の本に従ってオブジェクト指向コードに直してみれば覚えられると思うよ。
310デフォルトの名無しさん:2005/09/30(金) 18:48:39
>>309
親切な方有難うございます。
このスレにもあなたような方がいらっしゃるのですね。
いつも質問者はいびられてばかりで、そんな私もしょぼーんとしてしまいます。
早速買って勉強しますです。
311デフォルトの名無しさん:2005/09/30(金) 19:50:10
>>310
サンプルコードがJavaだから気をつけて。(構文はほとんど同じだから問題ないとは思うが)
あと、この本はオブジェクト指向プログラマーのバイブルだけども
初心者のバイブルになるとは限らないから一応本屋で確認してね。
312デフォルトの名無しさん:2005/09/30(金) 20:23:36
MenuItem.RadioCheck のようなものって ToolStripMenuItem にないですかね
313デフォルトの名無しさん:2005/09/30(金) 22:14:19
ToolStrip〜〜 はどれも糞
314デフォルトの名無しさん:2005/10/01(土) 23:50:52
なんか前からStrip系のアンチが一人いるな
315デフォルトの名無しさん:2005/10/02(日) 00:18:41
テキストボックスのMouseHoverで
ToolTip tt = new ToolTip();
tt.SetToolTip(textBox1, textBox1.Text);
テキストボックスの内容を変更
再びtooltipを表示

とすると上手く反映されず前のままの内容が表示されたりするときがあるね
316デフォルトの名無しさん:2005/10/03(月) 22:34:50
動的にメソッドを追加可能なオブジェクトって作れます?
317デフォルトの名無しさん:2005/10/03(月) 23:03:44
動的にメソッドを追加可能なオブジェクト?
JScriptのprototypeみたいなの?
Rubyの特異メソッド(だったっけ)?
318デフォルトの名無しさん:2005/10/03(月) 23:11:02
そそ。C# だとクラスがあるから、オブジェクトのクラスを後から変更できたかなって思って。
出来なければデリゲート格納する Hashtable 使うだけなんだけど。
319デフォルトの名無しさん:2005/10/03(月) 23:14:15
そう言う仕様はないね。
C# 3.0で静的メソッドをインスタンスメソッドかのように呼び出す文法は追加されるようだけど、所詮シンタックスシュガーだし。
320デフォルトの名無しさん:2005/10/03(月) 23:14:58
>>316
無理。
それやりだすと、開発規模が大きくなるにつれ、
どこでどのメソッド追加したかわけ分からなくなるし。

C# 3.0 で、拡張メソッドって機能が追加されて、
クラス定義とは別の場所で後からメソッドを追加する
(したかのような)ことができるようになるけど、
やっぱり動的(実行時)にってのは無理。
(そもそも実行時にメソッドを作る手段がないけど。)

あと、この拡張メソッドも、他に代替手段がない場合以外、
極力使わない方がいい非推奨機能と仕様書に明言されてる。
321デフォルトの名無しさん:2005/10/03(月) 23:20:02
動的に作成ならともかく、動的に変更だとやっぱ辛いか。ありがとうございました。
322デフォルトの名無しさん:2005/10/03(月) 23:24:05
>>321
っつーか、デリゲートでは駄目なん?<動的に変更。
323デフォルトの名無しさん:2005/10/03(月) 23:35:30
>>320
CodeDomで動的にプロクシクラスを生成すればあたかもメソッドが
追加されたように振る舞う事はできるよ。
ただこれだけでは実用性がないから、呼び出し側はインターフェイ
スにアクセスする様にして、呼び出される側はDIコンテナによって
生成される様にするといった工夫が必要。
324デフォルトの名無しさん:2005/10/04(火) 01:51:39
.netの仕組み等があまりよく分かっていないのですごく馬鹿な質問かもしれませんが、
C#でdllを作って、普通のC言語からそれを読み込んで使う、というようなことは出来るのでしょうか?
325デフォルトの名無しさん:2005/10/04(火) 02:05:13
C#のDLLをCから読むのは難しい。
DLLをCOMに公開してそれを利用すると言うことになる。
326デフォルトの名無しさん:2005/10/04(火) 02:21:45
COMって、正直よく分からないんですが、参考になるサイトとかご存じでしたら教えていただけますか?
「com」でググってもamazon.comとかが出てきて、まともに調べられないのです…
何でググれば良いのでしょうか
327デフォルトの名無しさん:2005/10/04(火) 02:42:44
IUnknown
328デフォルトの名無しさん:2005/10/04(火) 03:38:25
ありがとうございます

http://www5.plala.or.jp/atata/com/
このサイトとか、良さそうですね。
明日読んでみます。
329デフォルトの名無しさん:2005/10/04(火) 11:34:55
AxSHDocVw.AxWebBrowser を使用してデータを Post する方法がわかりません。

例えば、画面にテキストボックスと、ボタンと、AxSHDocVw.AxWebBrowserが
あるとします。ここで、テキストボックスに何か入力し、ボタンをクリック
すると、AxSHDocVw.AxWebBrowserのブラウザ画面には、テキストボックスに
入力された文字列をキーワードとして google で検索した結果の画面を
表示させたい。

のように、特定 URL のフォームにプログラムから値を代入し、
submit した結果を表示させたいのですが。。

アドバイスお願いします。
330デフォルトの名無しさん:2005/10/04(火) 11:41:48
Navigateメソッドの第4パラメータがPOSTするデータなので、
そこにポストデータを文字列で書き込めばOKだったはず。

でもGoogle検索はPOSTじゃなくてGETでやってるぞ。
331デフォルトの名無しさん:2005/10/04(火) 12:03:33
あ、念のために確認したらstringじゃなくてbyte[]を書き込む必要があるみたい。
System.Text.Encoding.GetBytesを。
UrlEncodeは、多分WebBrowserコントロールが勝手にやってくれるはず……?
332329:2005/10/04(火) 12:55:07
>>330-331
ありがとうございます。
POST する事ができました。postData は byte[] を渡す必要があることと、
URL は POST 先の URL を指定しなければならない事にはまっていました。
(From.html から to.html を POST する場合、URL には to.html を
渡さなければならなかったのに、ずっと From.html を…...)

Google は私の例がよろしくなかったですね、すみません。
333デフォルトの名無しさん:2005/10/04(火) 17:14:29
あるフォーム(A)から別のフォーム(B)の処理を実行し
A は B の中で処理が完了するのを待ちます。
B の処理終了は delegete で通知がきます。
B は Windows.Forms ですがフォームを show せずに、
B にかかれている public なメソッドのみを実行します。

ここまでは組めましたが、B の処理を行なっている間、
A では処理中である事をあらわす何らかの処理(画像をくるくるさせたり)
したいと思っています。

FormB f = new FormB();
f.ActionComplete += new FormB.ActionCompleteEventHandler(f_ActionComplete);
f.DoAction();

のように B の処理を実行すると A では処理がかたまってしまいます。
B の処理を実行中 A でも処理を行なうにはどのようにすればよいでしょうか?
334デフォルトの名無しさん:2005/10/04(火) 17:54:23
その処理はFormBに書かれる必然性があるのでない限り(FormBの何かのコントロールを使用するとか)、
FormBには書かない方が良いよ。

さて、重い処理を行う場合はスレッドだ。
ttp://www.atmarkit.co.jp/fdotnet/mthread/index/index.html
ただしWinFormでスレッドを操作するには注意が必要だ。
ttp://www.atmarkit.co.jp/fdotnet/dotnettips/312ctrlinvoke/ctrlinvoke.html
335デフォルトの名無しさん:2005/10/04(火) 19:18:49
vbaからc#で作ったDLLを呼び出すには、
COMやGACなどのめんどくさいことしないと駄目みたいですけど、
今後もこういうのが続くんでしょうか?
336デフォルトの名無しさん:2005/10/04(火) 19:23:33
そもそもVBAからC#のDLLを呼び出す(事|人)自体がそんな多いとも思えないから良いんじゃない?
337デフォルトの名無しさん:2005/10/04(火) 19:44:01
プログラムを今から勉強しようと思うのですが、基礎から始めようと思ってます。
一番最初にプログラムとは?を知りたいんですが、ここは、まだ俺の来れる所じゃないので
超初心者が見るようなサイト、教えて貰えませんか?
プログラムとは?でぐぐっても、出てこなかったので・・・。
本気で勉強したいと思うので、宜しくお願いします。
338デフォルトの名無しさん:2005/10/04(火) 19:48:32
本気で勉強したいと思ったら、ちゃんとした本を買ったほうが良いよ
339デフォルトの名無しさん:2005/10/04(火) 19:50:22
>>338
分かりました。
今から本屋に急行します。
有難う御座いました。
340デフォルトの名無しさん:2005/10/04(火) 19:53:47
>>338
どこかのスレにもありますが、独習シリーズはお勧めですか?
341デフォルトの名無しさん:2005/10/04(火) 20:27:36
とりあえずぴゅう太から始めよう
342デフォルトの名無しさん:2005/10/04(火) 20:52:41
System.Windows.Forms.Timer
System.Timers.Timer

これってどうやって使い分けるの
343デフォルトの名無しさん:2005/10/04(火) 21:07:52
System.Windows.Forms.TimerはTickイベントでControl.Invokeする必要がないのでWinFormで扱いやすい。
ただし精度に多少難がある。9x系だと最悪で50ミリ秒程度だったかな?
System.Timers.Timerはちょうどその逆。
344デフォルトの名無しさん:2005/10/05(水) 10:21:22
質問です。
Console.ReadLine()でコンソール画面からone+twoと言う入力を受けた時に、
+だけを取り出したい時はどうすれば良いんでしょうか?
Splitを使って取りだそうとしているのですが、煮詰まってしまってます。
345デフォルトの名無しさん:2005/10/05(水) 10:29:00
いささか理解するには条件が足りないが、一般的にはSystem.Text.RegularExpressions.Regexクラス。
つまり正規表現。
346デフォルトの名無しさん:2005/10/05(水) 10:34:49
>>345
ありがとうございます!
リファレンスと熟読します。
347 ◆bs6TfbkPw. :2005/10/05(水) 11:51:38
test
348デフォルトの名無しさん:2005/10/05(水) 13:13:51
VisualStudioの問題なのかもしれませんが・・・
Windowsアプリケーションを作成して、一個ボタンを置いただけのフォームを作成したあと
コンパイルしようとしたところ
リソースを準備しています...
C:ソースファイルの場所\プロジェクト名.resx: リソース ファイルへの書き込み中にエラーが発生しました。 指定されたパスが見つかりません。
といったエラーが出てコンパイルすることができません

今まで普通につかえてたのですが、急にこのエラーが出るようになりました・・・
何か情報もってる方いませんか?
349デフォルトの名無しさん:2005/10/05(水) 17:20:13
引数付きのプロパティを追加したいのですが、
C#では無理のようです。

こんなの↓
public int data(int index1, int index2) {
get {
return m_data[index1,index2];
}
set{
m_data[index1,index2] = value;
}
}

Set〜,Get〜とかのメソッドを書くよりないのでしょうか

350デフォルトの名無しさん:2005/10/05(水) 17:23:12
そうだね
でもそれならコレクションクラスをgetアクセサで返すプロパティにした方が自然じゃない?
351デフォルトの名無しさん:2005/10/05(水) 18:13:05
c#を勉強していこうと思うだけど、
やっぱりコンソールからやっていくのが、
遠いようで近道なの?
352デフォルトの名無しさん:2005/10/05(水) 18:23:28
実行時に、デバッグモードだと平気なんだけど、リリースモードだと落ちるっていう現象わかりますか?
353デフォルトの名無しさん:2005/10/05(水) 18:25:07
>>352
その逆は結構あることだけど
354デフォルトの名無しさん:2005/10/05(水) 19:08:05
今日からC言語の授業が始まったのですが分からないので質問します
宿題で「画面にクラス・番号を表示して次の行に名前を表示するプログラムを作れ」というのがでました
まったく分からないので教えてくれませんか?
355デフォルトの名無しさん:2005/10/05(水) 19:13:05
C言語はスレ違いです
356デフォルトの名無しさん:2005/10/05(水) 19:15:18
>>351
いきなりWinFormをいじりだしても、デリゲートとかで躓くだろうから……。
やっぱりコンソールから始めるのを薦める。
357デフォルトの名無しさん:2005/10/05(水) 19:17:37
>>355
あれ?
違うのですか?
すみません
358デフォルトの名無しさん:2005/10/05(水) 20:49:57
>>357
授業ちゃんと聞いとけよ
359デフォルトの名無しさん:2005/10/07(金) 17:45:48
C#を使うと、どの程度のプログラムなら作成できますか?
360デフォルトの名無しさん:2005/10/07(金) 18:04:24
NASA World Windくらい。
361デフォルトの名無しさん:2005/10/07(金) 20:44:22
むしろ昨今の言語であればどれを選んでもたいていのことはできるだろう。
もし、できないことがあるとしたらそれは言語ではなく自分の能力を疑ったほうがいい。
362デフォルトの名無しさん:2005/10/07(金) 23:02:21
VB.NETとC#って結局、コードの可読性が違うだけなのか?
363デフォルトの名無しさん:2005/10/07(金) 23:05:05
まあそんなとこでしょう
364デフォルトの名無しさん:2005/10/07(金) 23:25:44
VBに足引っ張られて汚くなっていくC#が不憫だ
365デフォルトの名無しさん:2005/10/08(土) 03:19:20
文字列の空白を代入するときは
xxxx = ????
????のところになんと書けばよろしいのでしょうか?
宜しくお願いいたします
366デフォルトの名無しさん:2005/10/08(土) 03:20:40
String.Empty
367デフォルトの名無しさん:2005/10/08(土) 03:51:03
>>366
お早い回答感謝いたします。
ありがとうございました。
368デフォルトの名無しさん:2005/10/08(土) 12:27:12
インデクサとプロパティ、
インターフェイスと抽象クラス。

それぞれ、どのように使い分けるかを教えてちょんまげ。

ちなみにC#勉強してから、10日目。
@ITのC#入門は全部読んだ。
わたしに、わかりやすくよろしこ。
369デフォルトの名無しさん:2005/10/08(土) 12:35:29
インデクサとプロパティは直ぐに判別できるだろうと思う。
C# ならインターフェイスを使う機会はあまり無い。単一継承で噛ませられない場合の補助だと思いねぇ。
370デフォルトの名無しさん:2005/10/08(土) 14:22:52
>>368
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/Vbcon/html/vbconabstractclassesversusinterfaces.asp
インターフェイスと抽象クラスで迷ったら、ここは目を通しておく価値があると思う。

>>369
>C# ならインターフェイスを使う機会はあまり無い。
C#なら、というよりは小規模のプロジェクトでは、じゃまいか。
371デフォルトの名無しさん:2005/10/08(土) 14:30:39
>>370 下段
はい。だから 「単一継承で〜」 って書いたんです。
372デフォルトの名無しさん:2005/10/08(土) 14:31:25
delegateがあるからjavaと比べると使う機会が少ない。しかし使わないわけではない、といったところか。
373デフォルトの名無しさん:2005/10/08(土) 15:05:17
インターフェイスはライブラリを作ったり、他人の作ったライブラリを使ったりするときに使う機会が多い。
374デフォルトの名無しさん:2005/10/08(土) 17:43:01
初めまして。
ダイアログボタンが押されたかチェックする場合は
どういう記述で行えばよろしいのでしょうか?
if(?????????.Checked)
という記述でやってみたのですがビルドは通るものの
実行したときに別のところでエラーがでてしまいます・・・。
どなたか助言お願いいたします。
375デフォルトの名無しさん:2005/10/08(土) 17:47:21
どんなエラーが出るのか書けば?
376デフォルトの名無しさん:2005/10/08(土) 17:47:55
まずはその「ダイアログボタン」とはなにか、ということからだな。
RadioButtonやCheckBoxのことならCheckedでいいはずだが。

とりあえずそのエラーメッセージを書いてみようか。
377デフォルトの名無しさん:2005/10/08(土) 17:52:42
NullRefrenceExceptionと予測。
378デフォルトの名無しさん:2005/10/08(土) 17:57:06
ぬるり
379374:2005/10/08(土) 18:48:29
メニュー部分のチェックなのですが
『System.ArgumentException' のハンドルされていない例外が mscorlib.dll で発生しました』
とでてしまいます。
チェックする記述を入れなければ問題なく動くのですが・・・
380デフォルトの名無しさん:2005/10/08(土) 18:56:54
そのまま引数がおかしいんだろうね
まず別の場所がどこでどういうコードなのか書いてもらえないと何もいえない
381デフォルトの名無しさん:2005/10/08(土) 22:47:21
C#が発表されてから3年程度経つが未だに
実用的なアプリケーションはVC+++MFCってところ
のようだ。
C#に未来はあるのか???
382デフォルトの名無しさん:2005/10/08(土) 22:56:55
>>381
業務でC#は結構使われてる。
つか、俺の会社で今、C#でプロジェクトやってる。
383デフォルトの名無しさん:2005/10/08(土) 22:59:46
>>382
それはASP.NETでは?
もし、そうでなければ禿げしく疑問
C#がVC+++MFCより優位に立てる点があるのか?
384デフォルトの名無しさん:2005/10/08(土) 23:02:30
383の理論ではVBはもっての他ってことかな?
早くて安く作らなければならんこともあるのだというのに
385デフォルトの名無しさん:2005/10/08(土) 23:02:47
.NETの名前通りもともとWEBアプリ主眼だろ?
386382:2005/10/08(土) 23:24:27
>>383
いや違う。
>>384の言うとおり、早く安く作れて
恒例のポインタ周りのバグや、
スレッド管理に余計な手間をかけずに済むから。
387デフォルトの名無しさん:2005/10/08(土) 23:28:29
すいません。
一度に2度の質問失礼します。

1、XPスタイルにするときに、FlatStyleをSystemにしますが、
FlatStyleがPopupのときにでもXPのような形状にしたい。

2、Buttonが押されたときに、沈み込んだ状態にしたい。
ボタンは押されたらすぐに戻ってしまいますが、沈み込んだ状態のまま保つ、というやり方がわからなくて・・。

いいやり方を知っていましたらお教え願いませんでしょうか?

よろしくお願いします。
388デフォルトの名無しさん:2005/10/08(土) 23:31:20
>>387
1.無理。OSの問題だから。
2.CheckBoxクラスのAppearanceプロパティをButtonに変えてみたらどうよ。
389デフォルトの名無しさん:2005/10/08(土) 23:31:37
>>387
> 1、XPスタイルにするときに、FlatStyleをSystemにしますが、
> FlatStyleがPopupのときにでもXPのような形状にしたい。
諦めろ。

> 2、Buttonが押されたときに、沈み込んだ状態にしたい。
> ボタンは押されたらすぐに戻ってしまいますが、沈み込んだ状態のまま保つ、というやり方がわからなくて・・。
ButtonじゃなくてCheckBoxを使用する。
AppearanceプロパティをAppeareance.Buttonに。
390389:2005/10/08(土) 23:32:21
丸被りか……orz
391デフォルトの名無しさん:2005/10/08(土) 23:58:37
すごく早いレスありがとうございます。

こんなやり方があったとは・・・。
押すものはButton!!と決め付けてしまっていたようです。

絶対笑われますが、押した瞬間にThread.Sleepでも使うの?って思ってました・・。

ありがとうございました。
392デフォルトの名無しさん:2005/10/09(日) 00:04:58
C,C++,C#とかれこれ6,7年程度やっているが
未だにネットで公開しても恥ずかしくないようなアプリがかけません?

どのように勉強していけばネットで有名なアプリがかけるようになるの?
393デフォルトの名無しさん:2005/10/09(日) 00:08:21
才能がないからじゃない?
何を作るか、というところができてないとみた
394デフォルトの名無しさん:2005/10/09(日) 00:13:29
有名なアプリを探してとことん真似する
そのアプリの掲示板をみて要望を先に反映
あとは2ちゃんねるのレスをうまく取捨選択できれば安泰
反応がなくなれば新しいアプリを探して真似すればいい
395デフォルトの名無しさん:2005/10/09(日) 00:17:12
>>394
>そのアプリの掲示板をみて要望を先に反映
ってソースがないとダメでは?
396デフォルトの名無しさん:2005/10/09(日) 00:17:30
仕事じゃないなら自分で使う欲しいものを作ってりゃできんじゃね。
397デフォルトの名無しさん:2005/10/09(日) 00:20:27
>>393
才能のあるあなたはどのようなものを作られているのでしょうか?
398デフォルトの名無しさん:2005/10/09(日) 00:30:03
私も才能なんてないよ。
丁度>>396の人がいったとおり、自分で使う欲しいものを作ってるだけ。
399デフォルトの名無しさん:2005/10/09(日) 00:52:02
>>395
同じようなものを作れないなら実力が足りない
新規で作るのに比べて労力はずっと少ない
400デフォルトの名無しさん:2005/10/09(日) 00:52:46
>>392
おそらく誰もが知ってるような、例えば秀丸などのソフトのことをいってるのであれば
それは無理。
誰でも作れないから、シェアウェアとして公開されているのです。
401デフォルトの名無しさん:2005/10/09(日) 00:54:54
自分も欲しいのを自分で作るために勉強してんだけど、
何時も思いつきで作っていくので可読性が低いです。
で、最近フローチャートってのを知りました。
プログラムの本をよんでてもあまり出てこないですよね。
402デフォルトの名無しさん:2005/10/09(日) 00:55:00
プログラミングはある程度できるのに、他人が作ったアプリを全然使ったことがない奴増えすぎ
403デフォルトの名無しさん:2005/10/09(日) 00:55:32
今はUMLだからな
404デフォルトの名無しさん:2005/10/09(日) 01:00:21
フローチャートとはまた懐かしい
オブジェクト指向の言語にはあまり向かない手法だな
405デフォルトの名無しさん:2005/10/09(日) 01:16:12
◆こんなソフトウェアつくってください!〜Part6〜◆
http://pc7.2ch.net/test/read.cgi/software/1123630518/
406デフォルトの名無しさん:2005/10/09(日) 01:29:11
>>392
見せるの恥ずかしいとか言ってるから進歩しねーんじゃねーの。
とりあえず公開してみろ。
ありがたいご指摘受けれるかもしれないし、
人に見せてると言う意識を持つことで、スキルがあがるかもしれない。
407デフォルトの名無しさん:2005/10/09(日) 02:15:29
魚心あれば水心
408デフォルトの名無しさん:2005/10/09(日) 16:08:00
>>404
仕様とか大まかな流れを決めるのに良いかと思ったのですが、
フローチャートは向かないのですか・・・
409デフォルトの名無しさん:2005/10/09(日) 16:12:16
フローチャートは内部仕様の最後のほうに使うもんじゃね
410デフォルトの名無しさん:2005/10/09(日) 16:41:52
>>408
ソースを見た時に処理の流れが追えない様なメソッドは、処理内容を
メソッド抽出して処理の流れと分離して細分化すべき。
411デフォルトの名無しさん:2005/10/10(月) 01:30:17
ttp://www.objectclub.jp/community/codingstandard/
↑のサイトのC#のコーディング規約についての文書、どう思うよ。
412デフォルトの名無しさん:2005/10/10(月) 21:47:02
イベントハンドラという単語の意味がよく分からないのですが
http://wisdom.sakura.ne.jp/programming/cs/cs56.html のコードで言うと
public void StartEvent() がイベントハンドラに当たるのでしょうか・・・?
413デフォルトの名無しさん:2005/10/10(月) 21:55:00
イベントを処理するモノがイベントハンドラ。
414デフォルトの名無しさん:2005/10/10(月) 22:01:11
イベントハンドラってdelegateとdelegateに委譲したメソッド本体どっちを指すと取るのが妥当だろう……?
415デフォルトの名無しさん:2005/10/10(月) 22:06:49
メソッド本体だしょ
416デフォルトの名無しさん:2005/10/10(月) 22:10:11
>>413
返信ありがとうございます
>>412は×ということですね
.netのコーディング命名規約のイベントの辺りを読んでいたら頭が混乱してしまったもので…
417デフォルトの名無しさん:2005/10/10(月) 22:21:28
ハッキリ言ってdelegateの使い方が分かりません
418デフォルトの名無しさん:2005/10/10(月) 22:37:28
んじゃ 3.0 のラムダ式まで待っててください
419デフォルトの名無しさん:2005/10/10(月) 22:45:25
>>417
使い方を知らない人が知っても・・・
420デフォルトの名無しさん:2005/10/10(月) 22:55:40
>>419
最初は誰でも初心者ですよ・・・
つか、僕も今まで使ったことないし
よく分かっていないけど・・・
421デフォルトの名無しさん:2005/10/10(月) 23:03:56
初心者の次元が違う
その程度の質問する初心者は5年、ソフトウェアで金をもらうことは
ない。
422デフォルトの名無しさん:2005/10/10(月) 23:10:07
>>417
http://www.atmarkit.co.jp/fdotnet/onepoint/onepoint03/onepoint03_01.html

ここ読んでふ〜んって程度に理解して、用意されてるイベントが使えればOK。
細かいことは気にすんな。
423デフォルトの名無しさん:2005/10/10(月) 23:11:10
サンプロ
キタ━━━━━━(゚∀゚)━━━━━━ !!
424デフォルトの名無しさん:2005/10/11(火) 03:47:35
質問です。
現在C#でドット絵(ピクセル画)を表示するプログラムを作っています。
それに拡大表示機能をつけたのですが補間モードが働いてドットがぼやけてしまいます。

e.Graphics.InterpolationModeの設定で補間モードを変更できると知り、
近い物は見つけましたが望む形にはなりませんでした。
>>
e.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
e.Graphics.ScaleTransform(Zoom,Zoom);
e.Graphics.DrawImageUnscaled(imgBase,0,0);
<<

この補間モードをOffにして、
単純(均等)倍表示のようなことはできないでしょうか。
よろしくお願いします。

わかりにくかったらすみません。
425デフォルトの名無しさん:2005/10/11(火) 04:33:50
補間が問題以外に、拡大のほうにも問題があったようです。
3x3の画像を下のように描画したところ
>>
e.Graphics.DrawImage(imgBase,0,0,6,6);
<<
なぜか5x5の画像になってしまいました。
GraphicsUnit.Pixel指定でも変わりませんでした。
なにかほかにも設定が必要なのでしょうか?
426デフォルトの名無しさん:2005/10/11(火) 04:46:31
自己解決しました。
PixelOffsetModeの設定も必要なようです。
3レス消費してしまい申し訳ありません。
427デフォルトの名無しさん:2005/10/11(火) 08:08:37
ソフトの設定を変更した時に、それを反映するために
自動で自分の再起動させたいのですが、どうすればいい
でしょうか?

手持ちの本をあさって見ましたが方法等は一切乗って
ませんでした。
428デフォルトの名無しさん:2005/10/11(火) 22:40:36
自分を起動する別プログラムを立ち上げて再起動したら自殺する?
429デフォルトの名無しさん:2005/10/12(水) 04:49:47
Process.Start("my_app.exe");
Environment.Exit(0);
430427:2005/10/12(水) 08:01:21
>>429
ありがとうございます
早速試してみます
431デフォルトの名無しさん:2005/10/12(水) 08:23:40
えー
そんな適当な奴でよかったのか
432デフォルトの名無しさん:2005/10/12(水) 18:40:41
インデクサを勉強していて思ったのですが、
このテクニックが実際にどのようなところに使えるものなのか全く創造もできません。
インデクサじゃないと難しい処理ってあるの?
433デフォルトの名無しさん:2005/10/12(水) 18:47:36
別にないけど、コレクションにインデクサでアクセスできなかったらイヤだろ?
arrayList.SetItem(4, arrayList.GetItem(3));
とか書きたくない。
arrayList[4] = arrayList[3]
の方がよほど直感的。
434デフォルトの名無しさん:2005/10/12(水) 23:38:24
>>429
多重起動禁止にしてる場合でも、それで上手くいく?
435デフォルトの名無しさん:2005/10/12(水) 23:44:41
駄目だろうね
436デフォルトの名無しさん:2005/10/12(水) 23:45:23
Mutexで禁止してるんだったら、Process.Startする前にそれをCloseしてやればいいんじゃね?
437デフォルトの名無しさん:2005/10/12(水) 23:54:02
なるほど
438デフォルトの名無しさん:2005/10/13(木) 08:57:32
>>433
そーなんすか
ありがとう
よし、がんばるぞ
439デフォルトの名無しさん:2005/10/13(木) 19:37:33
ある数字の範囲をランダムに並びかえるのによい方法はないでしょうか?

例えば、1 から 10 の範囲で並びをバラバラにしたいのですが、
その結果を配列に保持するような事がしたいです。

private int [] valOrder = new int [10];

で、valOrder[0] から valOrder[9] には、それぞれ
1 から 10までがランダムに入っている(重複はなしで)
という事がやりたいです。

アドバイスを頂けると幸いです。よろしくお願いします。
440デフォルトの名無しさん:2005/10/13(木) 19:40:59
0から9までそれぞれランダムな位置の要素と交換すればいいんじゃね
441デフォルトの名無しさん:2005/10/13(木) 19:57:51
0 .. N-1 の整数でランダムな順列を O(N) のコストで作り
正当性と計算量の証明をしろってのを学生実験でやったことがあるぞ
442デフォルトの名無しさん:2005/10/14(金) 11:00:18
AssemblyVersion について教えてください。

Visual Studio で、デフォルトでは、
[assembly: AssemblyVersion("1.0.*")]

と定義されています。バージョン番号の内訳は、
メジャー.マイナー.ビルド.リビジョンだと思います。

で、A.EXE と B.DLL があり A.EXE は B.DLL を参照している場合、
B.DLL にバグがあり修正を行なってビルドした場合、
メジャー、マイナー、ビルドが上がる為、B.DLL を参照している
A.EXE もリビルドしないと動きませんよね?
(その時修正したのは B.DLL だけなのに、A.EXE もリビルドしなければ
ならなくなる。)

なので、バージョン番号は

[assembly: AssemblyVersion("1.0.0.*")]
のように、ビルド番号まで固定しておかないと、すごく不便じゃないかと
思っているのですが、このあたり、みなさんはどうされていますか?

よろしくお願いします。
443デフォルトの名無しさん:2005/10/15(土) 23:28:35
質問です。

データ検索のプログラムを作っています。
DataRow型というのがありますが、

DataRow r
のように宣言してもうまく行きません。
これはどのように使うものなんでしょか?

よろしくおねがいします
444デフォルトの名無しさん:2005/10/15(土) 23:31:44
>>442
a.exe はコンパイルしなおさんでもいいでしょ

>>443
System.Data は参照に追加してあるか?
445デフォルトの名無しさん:2005/10/15(土) 23:33:09
DataTableの列を表す。

で、何をしたいのかさっぱりわからん。
DataTableというかADO.NETは基本的にデータベースとの相互運用のためのライブラリだが。
別に単独で使っちゃいけない訳じゃないが。
446デフォルトの名無しさん:2005/10/15(土) 23:37:05
>>444-445

ありがとうございます。
あれです、
>System.Data は参照に追加してあるか?
まさにこれでありました。まじ変な質問して時間とらせてすみませんですた。
ありがとうでしたー。
447デフォルトの名無しさん:2005/10/16(日) 01:21:41
>445
列じゃなくて行では?
列は DataColumn。
448デフォルトの名無しさん:2005/10/17(月) 00:22:24
質問失礼します。
ただいまC#を勉強しているものです。

ファイルを同時にダウンロード、アップロードできるソフトを作ろうと思いまして、
同時に処理するためにマルチスレッドを使おうと考えました。

そこで思ったのですが、マルチスレッドは限界はあるのでしょうか?
何個までしか作ってはいけない、などの規約というかルールがあるのかなと思いまして
質問しました。

何かおかしいこと言っていればご指摘くださいますようお願いします。
449448:2005/10/17(月) 00:29:29
ttp://www.atmarkit.co.jp/fdotnet/mthread/mthread02/mthread02_03.htm

すいません。ここにそれらしいことが書いてありました。
探し方が悪かったみたいです。すいません。。
450デフォルトの名無しさん:2005/10/17(月) 00:48:00
なんか404の予感
451448:2005/10/17(月) 07:05:28
すいません。。。
ttp://www.stackasterisk.jp/tech/dotNet/csharp07_02.jsp
ここですね
452デフォルトの名無しさん:2005/10/17(月) 12:50:45
ふむ、jspか・・・・・・
453デフォルトの名無しさん:2005/10/19(水) 15:29:14
質問です。
単純にテキストファイルを読み込んでConsole.WriteLineで出力したいのですが
MSDNのガイドの例題通りにプログラムを書いて、ファイルの指定の部分を自分で
用意したTest.txtと指定してプログラムを実行すると指定されたファイルが見つかりません
と出ます。
読みだしたいファイルの指定はどのようにすれば良いのでしょうか?
また、文字コードや保存場所の指定にルールはあるんでしょうか?
454デフォルトの名無しさん:2005/10/19(水) 16:29:25
MSDNと同じに書いてできないならtest.txtが同じディレクトリにないとか。
文字コードはStreamReaderコンストラクタのオーバーロード参照
455453:2005/10/19(水) 17:51:17
>>454
回答ありがとうございます。
ディレクトリに存在しないという事なのでcatchでエラーを拾うと
《ファイル "C:………\bin\debug\Test.txt"が見つかりませんでした》
と出てくるのでこの\debugのフォルダの中に、Test.txtを移動するとファイルを
読み込む事が出来ました。
ディレクトリに対する理解はこれであってるんでしょうか?
色々HPを探すんですがC#に関連づけたHPが見つからず不安です
456デフォルトの名無しさん:2005/10/19(水) 17:58:48
>>455
フルパスでファイルを指定しない場合、ファイルは現在のフォルダからの相対パスで探索される。
んで、実行時には \bin\debug が現在のフォルダになってたんで、\bin\debug\test.txt を探しにいったという仕掛け。

ちなみに、VS から実行したときに何処を現在のフォルダにするかは、プロジェクトのプロパティで指定できる。
VS2003 なら、構成プロパティのデバック→作業ディレクトリの筈。
457453:2005/10/19(水) 18:12:33
>>455
丁寧な解説、ありがとうございます。
色々分からない単語もあるんで調べながらかみ砕きます。
本当にありがとうございます。
458デフォルトの名無しさん:2005/10/21(金) 14:11:09
defとかlibとかがついていないDLLをVS2005b2から使うことはできるでしょうか?
459デフォルトの名無しさん:2005/10/21(金) 17:09:39
なんのDLLよ?
.NETのDLLなら元々そんなのないし、ネイティブC++のDLLはどのみちextern "C"されてないとC#からは使えないし。
460デフォルトの名無しさん:2005/10/21(金) 19:23:10
>>459
>ネイティブC++のDLLはどのみちextern "C"されてないとC#からは使えないし。

なるほど。そうでしたか。ありがとう。
ハードウェアの制御用のDLLなので、おそらくネイティブC++のDLLだと思います。
ちなみに、C++からだとどうなんでしょう?
ポインタでかまいませんので、示してくださいませ。
461デフォルトの名無しさん:2005/10/21(金) 19:42:42
ポインタって流行ってるの?

http://pc8.2ch.net/test/read.cgi/tech/1127063469/452-455
462デフォルトの名無しさん:2005/10/21(金) 20:01:00
だいぶ前から見かける言い回しだけど?
463デフォルトの名無しさん:2005/10/21(金) 20:55:22
catch(NullReferenceException e)
{
  // 閑話休題
}
464デフォルトの名無しさん:2005/10/22(土) 00:23:18
ドラッグ&ドロップに対応している解凍ソフトみたいに
ドラッグしたファイルをドロップした瞬間に処理→処理したファイルをエクスプローラにドロップ
ということをしたいんだけど、どんなイベントを使えばいいの?
465デフォルトの名無しさん:2005/10/22(土) 00:23:56
C#でASP.NETを使っているのだが、
「ASP.NET」の情報がネット上で、とっても少ないのは、なぜに?
466デフォルトの名無しさん:2005/10/22(土) 00:34:31
>>464
お前がどこで詰まっているのかが分からん

>>465
JSPと違って簡単に使えるからじゃね
467デフォルトの名無しさん:2005/10/22(土) 00:52:29
468デフォルトの名無しさん:2005/10/22(土) 01:46:47
>>467
QueryContinueDragイベントでDoDragDropするってことでしょうか?
469デフォルトの名無しさん:2005/10/23(日) 03:06:38
SourceGridなるものをダウンロードして使ってみたが糞だね
すげー使いずらい
自力で作ったほうがよさそうw
470デフォルトの名無しさん:2005/10/23(日) 09:39:29
VS2003 使っています。
Form1.cs の中で宣言した変数を Form2 で利用したいのですが
どのようにすればいいのでしょうか?Public をつけるのかなと思い、
Form1 で

public int x = 1;

としましたが、コンパイル時にそこでエラーが出ました。
471デフォルトの名無しさん:2005/10/23(日) 09:43:37
>>470
アドバイスその1: その行にはエラーはない。
アドバイスその2: せめてプロパティ越しに扱うようにしろ。
アドバイスその3: 同じことやろうとしている奴は結構いる。探してみると良いよ。
472470:2005/10/23(日) 09:56:31
>>471
ありがとうございます。

プロパティ越しですか。意味はよく分かりませんが(たぶんグローバル変数
を使うのはよくないみたいなことかな)調べてみます。

何か検索するためのキーワードを教えていただきたいのですが。
473デフォルトの名無しさん:2005/10/23(日) 10:44:50
まずローカルのドキュメント読め。
話はそれからだ
474デフォルトの名無しさん:2005/10/23(日) 15:35:22
Form 上で Console.WriteLine のような出力をするにはどうすればいいのでしょうか?

for ( int i = 0; i < 5; i++)
  label1.text = i;

こんな感じで Form1 上に

0
1
2
3
4

こんな風に表示したいのです。今は label1 〜 label4 まで作ってそれぞれに
表示させていますが、なんかイマイチです。
475デフォルトの名無しさん:2005/10/23(日) 15:39:11
TextBox に AppendText した方がよくね?
476デフォルトの名無しさん:2005/10/23(日) 15:47:15
>>474
1.直接描画する
2.縦長のLabelやTextBoxなどのコントロールに改行つけて渡す
477474:2005/10/23(日) 15:50:24
>>475,476 なるほど。ありがとうございました。
478デフォルトの名無しさん:2005/10/24(月) 00:16:10
C#ひととおり勉強してみた。
レベルは、ASP.NETのDataGridコントロール使って、
一覧・更新画面とかは作れる。
でも、C#が完璧にできるとは全然思わない。

さて、次に何をすればいい?
ASP.NET または、C#のお薦めのWebサイトがあったら、おしえてくれ。
たのむ、エロいひと。
479デフォルトの名無しさん:2005/10/24(月) 00:21:01
MSDN
480デフォルトの名無しさん:2005/10/24(月) 00:21:13
OSでも書けば?
481デフォルトの名無しさん:2005/10/24(月) 00:46:45
>>478
http://www.codeproject.com/

・ここのサンプルを動かす。
・英語の資料に対して免疫をつける。

VS.NETのアドイン作りに挑戦するのもいいかもしれんな。
482デフォルトの名無しさん:2005/10/24(月) 00:49:55
>>478
プログラム作成と障害とは切っても切れない関係だ
従って障害管理ツールを作るとかが良いのではないか?
483478:2005/10/24(月) 01:28:38
>479-482
とんくす。

上記のサイト、はじめて知った。
面白そうなので、これから色々使うとおもう。

なんとなく、C#とASP.NETの日本のサイトって
あまり充実していないような気がする。
484デフォルトの名無しさん:2005/10/24(月) 01:31:34
C#とASP.NETに限らず日本のプログラマはレベル低いから
海外のサイトのほうが役に立つぞ
485デフォルトの名無しさん:2005/10/25(火) 21:20:21
英語読めないからプログラマーの質が落ちるんだよなぁ
誰か俺に英語の勉強の仕方教えてください。
486デフォルトの名無しさん:2005/10/25(火) 21:23:54
>>485
面白い本でも見つけれ。
読むだけならできるようになる。
487デフォルトの名無しさん:2005/10/27(木) 10:42:46
C#やJ#はhandlesは使えないのでしょうか?
488デフォルトの名無しさん:2005/10/27(木) 10:57:17
デリゲート。
489デフォルトの名無しさん:2005/10/28(金) 00:07:02
>>488
やはり使えないんですね。
ちょっとだけVBがうらやましい。
490デフォルトの名無しさん:2005/10/28(金) 00:12:46
なぜそうなるのかと
491デフォルトの名無しさん:2005/10/28(金) 12:36:21
ComboBoxなどでエンターキーが押されたときのイベントは
KeyPressedとKeyDownのどっちで定義するのがよいのでしょうか?
492デフォルトの名無しさん:2005/10/28(金) 14:28:09
英文で入力された文章をchar配列とsplitを使って単語に分解する時はchar配列の
中に基本的に何を指定するんでしょうか?
今、自分が指定しているのは
{' ', ',', '.', '\f','\v','\n','\t'}
でsplitするようにしてるんですが、作ったプログラムとフリーソフトのOpenOffice.org
の出力する結果にズレが生じてます。
色々とcharの中身を変更してみるんですが同じ出力結果にならないんです。
493デフォルトの名無しさん:2005/10/28(金) 15:45:21
<>():;-"'/!?&
あたりはどうしてるの?
494492:2005/10/28(金) 16:10:43
今、分割しなければならない文章にはそういった記号は含まれていないので
現状では、疑問符や感嘆符はまだ実装して無いです。

先程から自分の組んだプログラムの挙動をF11キーを連打して確認した所、
単語数は自分のプログラムの出力結果で合ってるんです。
どうも、フリーソフトの方は単語ではないchar型は飛ばして集計しているような
動作をしてる模様です。
果たしてどちらが合っているのか…
495デフォルトの名無しさん:2005/10/28(金) 18:16:10
どちらが合ってるも何も、利用者が望む形にするのが必要なことだろ。
OOoの出力結果が望ましいのならそれに合わすのが良いし、そうでないのならそうでない。

で、具体的に例えばどんな文ならそれぞれどんな結果になるの?
496デフォルトの名無しさん:2005/11/03(木) 03:38:27
Stringの末端文字の削除について質問です。
処理の途中で
string hoge = "あああ\nいいい\nううう\n";
のような文字列が出来るのですが、最後の改行を削除したいのです。
そこで hoge.TrimEnd(ch); としたのですが、最後の改行が削除されて
くれませんでした。(ch は char [] ch = {'\n'}; としています)
正しい方法を教えて下さい。

それともう1つ、配列はstringのようにその場では書けないのでしょうか?
例えばstring型の場合、hoge.equals("abcde"); のように””で括ってしまえば
その場に直接書いても問題ないですよね?
しかし配列を与える場所に Trim({' ', 'a', 'b', 'c'}); と書いてしまうと
エラーが出ます。キャストなどもかけてみましたがコンパイラに怒られました。
こういう方法はできない仕様と考えていいのでしょうか?
文法のページなども調べましたが意外に載ってなくて・・・。

環境は WinXP, VisualStudio.NET 2003, C# WindowsFormアプリ です。
497デフォルトの名無しさん:2005/11/03(木) 04:37:14
前半:ためしてみたけどちゃんと消えました。
hoge = hoge.TrimEnd(ch);
とかしなくてはいけません。TrimEndとかは、hogeオブジェクト自体が操作されるのではなくて、
操作した結果を返り値で返してくれるメソッドです。
後半:配列の要素を初期化する前に配列をつくる必要があるので、以下のように書く
TrimEnd(new char[]{'', 'a', 'b', 'c'});
僕は以下のように書くのが簡単で好き。
TrimEnd(" abc".ToCharArray());

続けて質問なんですが、描画のダブルバッファリングをControlにまかせたとき、つまり以下のように指定したとき、
Control.SetStyle(ControlStyles.DoubleBuffer | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true);
このとき、バッファを取得する方法はありませんか?最終的にはそれをBitmapにしたいです。
例えばOnPaintでもらえるPaintEventArgsから何とかなるか苦闘したのですが。
498496:2005/11/03(木) 20:10:35
>>497
教えていただいた方法でコードがすっきりしました。
どうもありがとうございました。
499デフォルトの名無しさん:2005/11/04(金) 01:16:02
C#で作ったプログラムってソースが見えているようなもんだ
って聞いたんですけど
どうやったら他の人が作ったプログラムのソースが分かるんですか
500デフォルトの名無しさん:2005/11/04(金) 02:21:17
あるクラスを一時保存しておき、後で復元する、ということはできないのでしょうか。
たとえば値型の変数なら。。。
int i; // 変数
int temp; // 一時退避編集用変数
int = 1; // 初期値
temp = i; // 初期値保存
i = 5; // 変数に違う値を代入
i = temp; // 保存した初期値を戻す
とやると、変数iは初期値に戻りますよね。
同じことをクラスでやりたいんですがクラスって参照型ですよね・・・そもそもそんなことやろうとする設計自体がおかしいんでしょうか。
クラス AとtempA(一時退避編集用)が存在するとき。。。
A.str = "編集前"; // クラス内のstring変数strに初期値を代入
tempA = A; // クラスAの初期値保存
A.str = "編集後"; // クラス内のstring変数strに違う値を代入
A = tempA; // 保存した初期値を戻す
としても、Aの変数strは"編集後"になっちゃいますよね。どうにかしてクラスの変数の値を一時保管しておきたいのですが。。。
501デフォルトの名無しさん:2005/11/04(金) 03:12:10
今、楽天懸賞の「崩れ文字」読み取り自動応募ソフト
作って公開したら大儲けだろうなあ・・・
きっと何百万は行くと思う
Let's try!
502デフォルトの名無しさん:2005/11/04(金) 07:11:38
>>499
ildasm
.NET Reflector

>>500
ICloneable
503デフォルトの名無しさん:2005/11/05(土) 17:54:26
>>500
シリアライズ
504デフォルトの名無しさん:2005/11/05(土) 20:40:07
>>500
struct
505500:2005/11/07(月) 00:56:54
みなさまアドバイスありがとうございます。
>>502
>>503
>>504
実現方法としてはいろいろな手法が考えられるのですね。
まずICloneableを使用してみて、クラスのコピー作成を試してみましたが、
他にもいろいろな選択肢があるんですね。
シリアライズ等に至っては、わたし個人で考えていてもは思いもつかなかったと思います……。
structにしてしまうのも一つの方法ですね。
ありがとうございました。
506505:2005/11/07(月) 00:59:05
>>505
考えていてもは思いもつかなかった

考えていても、思いもつかなかった

失礼しました。
507デフォルトの名無しさん:2005/11/07(月) 01:53:50
↓別スレで良い回答を得られなかったので再掲


C#プログラムで以下の機能を実装したのですが、どのようにすれば良いでしょうか?

1.ping(アドレススキャン)
2.traceroute(経路調査)
3.ポートスキャン(稼動ポートを割り出す)
4.ドメインネーム調査(IPからドメイン、ドメインからIPを割り出す)
5.文章からパスワード(大文字、小文字、数字、一部記号)生成
508507:2005/11/07(月) 01:55:08
少し修正します。

誤)実装した
正)実装したい
509デフォルトの名無しさん:2005/11/07(月) 01:57:23
1-4 => 887
1-5 => 888

887 デフォルトの名無しさん [sage] 2005/11/06(日) 20:01:35
TCP/IPを勉強する

888 デフォルトの名無しさん [sage] 2005/11/06(日) 21:09:16
どっかのだれかが作ってるだろうから借りてくればいいよ。
510デフォルトの名無しさん:2005/11/07(月) 02:06:16
>>509
クラスのソースコードとか落ちてないですかね?
ちょっとググってみたけど見つからなかったんですよ
511デフォルトの名無しさん:2005/11/07(月) 02:11:50
>>507
codeprojectで。
512デフォルトの名無しさん:2005/11/07(月) 11:21:25
誰か知ってたら教えてほしいんですが、
河西朝雄の「はじめてのVisual C#.net」という本で、
グラフィックスではどんなことを扱ってますでしょうか?
単に四角と丸描いて終りとかそんな感じですか?
本屋へ行ってもC#本自体少なくて・・・
513デフォルトの名無しさん:2005/11/07(月) 12:38:32
>>510
つkoders
514デフォルトの名無しさん:2005/11/07(月) 12:53:56
C#初めてでよくわからないので、質問させてもらいます。
丸め処理(切り捨てや四捨五入)をどうやるのでしょうか?
JavaならDecimalのメソッドを使えば出来ると分かるのですが、C#はさっぱりわかりません。
会社ではネットにも繋げる環境にないので、非常に困ってます。
回答をお願いします。m(__)m
515デフォルトの名無しさん:2005/11/07(月) 12:57:31
>>514
java の標準ライブラリに Decimal なんてクラスは無い。
Floor とか Round があるのは、C# も Java も Math クラス。
516デフォルトの名無しさん:2005/11/07(月) 12:59:58
ちょっとまて。C# には Decimai.Floor があるよな?
ってことは俺釣られたんか?
517デフォルトの名無しさん:2005/11/07(月) 19:12:20
>>514
   ,r‐-、
.      ,!         _
.      i, _,r‐''''''''''''''''ヾ,_`、_
    ,r'''''''ブ、        `.、`フ
\ ,r' .,f'´ ,r f  .i 、 , i  i`ト、
  \ ,f  ,f ,'´i  ,'`、 ;`、ヽ,! .! Yi、
   .\  i i, ' ' ヽ;  ヾ,'`ヽi__ i、!``ー‐┐
    .\'''''i ̄ ̄    ̄ ̄ ! .! ,ト、`ヾ;┘
.     !\ ━━   ━━┿ .!'  `ー′  ======
.     i ,.\      , ,  i ,!   そんなエサで騎士王である私がー!!
      i ! `\ _________,,/i,`′
      ヽ,!  .f  /人;!/  i,   ======
          ヽ,r`i___iヽ,/___! ======    (´⌒
.         ,r`.、,!:.:.:レ':.:.:.:.:>-、     (´⌒;;(´⌒;;
        ,r:i;.:.:.:.:.:.:.:.:.:.:.:.:.:.':,ゞ-ゝ (´;;⌒  (´⌒;; ズザザザ
         `ー--''´`ー--‐''´   (´⌒; (´⌒;;;
518デフォルトの名無しさん:2005/11/07(月) 21:48:26
>>517
お前誰
519デフォルトの名無しさん:2005/11/09(水) 16:35:58
hosyu
520デフォルトの名無しさん:2005/11/09(水) 17:02:57
C#初心者なのですが、質問させてください。

マイクからの音声を拾って、音量をリアルタイムにモニタしたいのです。
マイクから音を拾ったり、音に対して処理を行うクラスライブラリが見つかりません。
「sound」「音声」「録音」「wave」あたりのキーワードでMSDN検索してみたのですが、出てきません。

参考になるサイトや、キーワードがありましたらご教授ください。
よろしくお願いしますm(__)m
521デフォルトの名無しさん:2005/11/09(水) 18:16:17
>>520
DirectX 使えばいいと思うよ。

音に対して処理するのはフリーのライブラリが結構落ちてる。
音声信号処理とかで検索してみ。
522520:2005/11/09(水) 19:08:00
>>521
なんかそれっぽいサイトがありました。
ありがとうございます!m(_ _)m
523デフォルトの名無しさん:2005/11/09(水) 22:09:15
今日からC#をはじめたものです。
初歩的で恥ずかしいのですが、どうしてもわからずこまってるところがあるので、教えてください。

デザインタブで、ボタンなどを配置して、そのボタンをダブルクリックすると、
(form1).csのコードがかいてあるタブで、

private void button1_Click(object sender, EventArgs e)
{

}

のコードが自動で書かれますが、
これを削除したい場合はどのようにして削除すればいいでしょうか。
手動で削除してデバッグすると”button_1 clickの定義がありません”とエラーメッセージが出てきてしまいます。
超初歩的な質問だと思うのですが、ここから進まないですおねがいします、、
524デフォルトの名無しさん:2005/11/09(水) 22:11:19
>>523
ボタンのプロパティ⇒イベントの Click に button1_Click って書いてあると思うから、
そこを消してコード側も削除。
525デフォルトの名無しさん:2005/11/09(水) 22:13:37
イベントは、プロパティがずらずら並んでいる部分の上に雷マークのアイコンがあるからそれをクリック。
プロパティ一覧の代わりにイベント一覧が現れる。
526デフォルトの名無しさん:2005/11/09(水) 22:28:46
>>524
早速ありがとうございます。
できました。
ありがとうございました〜
527デフォルトの名無しさん:2005/11/10(木) 00:34:11
事情によりC#(VS2003)を使うことになり、勉強中の者ですが質問があります。

静的変数・静的メソッドはクラス単位に実態を持ち、すべてのインスタンス間
で共有されるとのことですが、(理解が間違ってたらすみません)
これらはC#のコーディングにおいて、どのような局面で使用されるのでしょうか?

VB6でいうところの標準モジュールのような位置づけなのかとも思いましたが、
C#にはモジュールという概念が無いので、それは間違った使い方なのか、とも思います。

どなたかご回答お願いします。
528デフォルトの名無しさん:2005/11/10(木) 00:41:17
>>527
全てのインスタンス間で共有したいとき。
529デフォルトの名無しさん:2005/11/10(木) 00:47:58
>>527
俺の場合。

静的変数(フィールド)はreadonlyつけて、
configファイルのデータをいろんなところから読むのに使ってる。

静的メソッドはpublicの場合は、
クラスの性格にあってインスタンスを必要とする処理を提供するのに使う。
530デフォルトの名無しさん:2005/11/11(金) 10:48:47
すいません、右も左もわからない者ですが、質問させてください

C#でC++やCのクラスライブラリを使うには、どうしたらいいのですか?
MSDNを検索してみたのですが、うまく答えに行き着かないので困ってます

よろしくおねがいしますm(_ _)m
531デフォルトの名無しさん:2005/11/11(金) 10:57:03
DllImport属性
C++のクラスはC#からは扱えない
532デフォルトの名無しさん:2005/11/11(金) 11:06:55
>>530
Managed C++ やら C++/CLI で Managed なラッパークラスを書く。
533デフォルトの名無しさん:2005/11/11(金) 11:26:57
tlbimp で出来ることもあるお
534デフォルトの名無しさん:2005/11/11(金) 11:29:04
>>531,532,533
ありがとうございます。

そのへんのキーワードを調べて挑戦してみます!
535デフォルトの名無しさん:2005/11/11(金) 14:20:28
C#が出た時から疑問に思っていたのですが、
C++があるにもかかわらず、何故C#が出てきたのですか?
C++ではいけないのでしょうか。
C++でもいいとしたら、C#の存在意義ってなんなのでしょうか?
536デフォルトの名無しさん:2005/11/11(金) 14:23:33
>>535
適所適材
537デフォルトの名無しさん:2005/11/11(金) 14:26:29
初心者向けのレスじゃねーなw
538デフォルトの名無しさん:2005/11/11(金) 14:46:38
>>535
C++ は昔からの負の遺産もいろいろ背負っちゃってるから一度リセットしたかった。
それを最初にしたのは Java だったんだけど、
SUN が Java の仕様策定権を独占しちゃってたから、
やむを得ず Microsoft が Java のパクリ言語を作ったってのが C#。

C# は結局、.NET アプリを作るには、C++ の悪い面をそぎ落とした使いやすい言語。
C++ は(負のものもあれど)過去の遺産を使えるし、非Managedなコードを書くには C# よりも最適。
539デフォルトの名無しさん:2005/11/11(金) 15:46:57
C#というのはJava的位置づけなんですか。
C++は悪者扱いみたいですけど、結局使う人次第ってことですよね。
包丁を善人が持てばおいしい料理を作ってくれるけど、悪人が持てば(ry
C#ってそんなにいいんですか?
だったらこれからの人はC++じゃなくてC#から勉強しているのかな?
540デフォルトの名無しさん:2005/11/11(金) 16:50:20
>>539
そうだよ。
c++は罪だ。そして悪。そして糞。
541デフォルトの名無しさん:2005/11/11(金) 17:31:11
>>539
いい人が必ずしももてるとは限らないだろう。
それと一緒だ。
542デフォルトの名無しさん:2005/11/11(金) 17:48:36
>>539
これからはC丼の時代。
みんなc丼を買おう!
543デフォルトの名無しさん:2005/11/12(土) 18:16:02
そんなにC#っていいんですか?
C++じゃ開発に限界でもあるのですか?
544デフォルトの名無しさん:2005/11/12(土) 18:22:23
>>543
そんなに乗用車っていいんですか?
F1マシンじゃ何か不便なことでもあるのですか?

に置き換えると多分理解してもらえないとおもう。
545デフォルトの名無しさん:2005/11/12(土) 18:43:58
そんなに風俗っていいですか?
普通の恋愛じゃ何か不都合なことでもあるんですか?
546デフォルトの名無しさん:2005/11/12(土) 19:10:46
レゴブロックとダイヤブロックで同じものを作ろうとするもんなんじゃねーの
547デフォルトの名無しさん:2005/11/12(土) 19:39:09
Visual Studio .net 2003 で作成したソリューションファイルやプロジェクトファイルを
前バージョンである Visual Studio .net 2002 で利用することはできますか?
548デフォルトの名無しさん:2005/11/12(土) 19:40:47
上位互換性なんてあるわけ無いだろうが



…いや確信ないけども
549デフォルトの名無しさん:2005/11/12(土) 19:46:30
これは下位互換じゃないのか?
550デフォルトの名無しさん:2005/11/12(土) 20:04:12
結論:不可能

ちなみに2002のを2003で開けて保存し直したのも2002ではもう使えない
551デフォルトの名無しさん:2005/11/13(日) 15:02:02
>>550
いや、可能だよ。

2002や2003、また2005で保存したもののプロジェクト変換してくれるツールが普通にある。
というか、プロジェクトファイルなんてタダのテキストの羅列なんだから、
それぞれがどういった形式か分かれば手動で変換も可能。

だからこそ、そういったツールも存在する訳だし。


基本的に動作しなくなるのは、上位バージョンで追加された機能なんかを使ったコードがある場合、
プロジェクトの変換とかは出来ても、コンパイルできないとかその程度。
552デフォルトの名無しさん:2005/11/13(日) 15:03:47
これがプロジェクト変換ツールの場所ね。

ttp://www.codeproject.com/macro/vsconvert.asp
553デフォルトの名無しさん:2005/11/13(日) 19:36:50
monoって全然人気ないのな、、、。
マイクロソフトは嫌いだけどC#は好きな俺のようなLinux or OSXユーザーっていないのかな、、、。

monoスレ余りにも過疎でさ。さびしいからこっちきた。ごめん
554デフォルトの名無しさん:2005/11/14(月) 01:42:04
>>553
monoの存在意義が、IIS高すぎw負荷分散したらライセンスだけで予算オーバーだぜもっと易くASP使えないのかよだから
555デフォルトの名無しさん:2005/11/14(月) 01:45:10
何その暗号
556デフォルトの名無しさん:2005/11/14(月) 11:05:35
#region チラシの裏
いままでテキストエディタ + コマンドラインコンパイルしてたから
はじめてExpress EditionでIDE体験したら笑うくらい簡単だ〜
フォームとかトライ&エラーでやってたのがバカみたい
#endregion
557デフォルトの名無しさん:2005/11/14(月) 14:21:30
クラスFooBarやFooFooがクラスFooの子クラスであるとします
Type typeが渡されたときに、typeがFooの子クラスのTypeであれば
なんらかの処理を行いたいのですが、if文の条件式はどう書けばいいのでしょうか
一応typeはFooではなくFooBarやFooFooが来る事を想定してます

public void doSyori( Type type )
{
 if (ここがわからない)
  処理;
}

こんな感じです
よろしくお願いします
558デフォルトの名無しさん:2005/11/14(月) 14:27:06
IsSubclassOf/IsAssignableFrom
559デフォルトの名無しさん:2005/11/14(月) 14:45:05
if ( type.IsSubclassOf( typeof( Foo ) ) )
ですよね
ありがとうございました
560デフォルトの名無しさん:2005/11/14(月) 21:41:22
( ´・ω・`)
( つ||⊂) =3 パタン
(_↑>>556
561デフォルトの名無しさん:2005/11/15(火) 13:30:41
VS C# Express Edition使ってるんですが
デプロイメントプロジェクトは作れないんですか?
インストーラ作りたいんですけど
562デフォルトの名無しさん:2005/11/15(火) 14:16:48
>>561
http://lab.msdn.microsoft.com/vs2005/productinfo/productline/default.aspx
ここによると、Express Product の Deployment tools は No になってるよ。
無理なんじゃねーの?
563デフォルトの名無しさん:2005/11/15(火) 15:48:31
Express Editionはセットアッププロジェクト作れないのか。
フリーで使えてインストーラ作れる奴っていうと、WixかNSISくらい?

WiX
http://wix.sourceforge.net/

NSIS
http://nsis.sourceforge.net/
564デフォルトの名無しさん:2005/11/15(火) 15:57:38
>>562
>>563
ありがとう
565デフォルトの名無しさん:2005/11/16(水) 17:51:13
Focus()とSelect()の違いってなんですか?
「フォーカスが移る」と「アクティベートされる」の違いってなに?
566デフォルトの名無しさん:2005/11/17(木) 16:31:41
すいません、質問させて下さい

拡張子libのファイルと拡張子DLLのファイルは何が違うのでしょうか?

MSDNのC++関連ヘルプで、
【LIB ツールを使って標準ライブラリやインポート ライブラリを作成する方法については、「LIB リファレンス」を参照してください。LINK を使ってインポート ライブラリを作成する方法については、「/DLL (DLL のビルド)」を参照してください」】

と書いてあったのですが、ライブラリを作成するツールが違うだけで、もともとのソースコードは一緒と思っていいのでしょうか?


libファイルで配布されているライブラリを使おうと思ったのですが、うまくできませんでした。
Dllは[Dllimport("ライブラリ名")]で読み込めるようですが、ファイル名に.libファイルを指定すると、起こられてしまいます。

質問が連続で並んでしまって申し訳ありませんが、よろしくお願いしますm(_ _)m
567デフォルトの名無しさん:2005/11/17(木) 17:52:26
vc#2005って今日発売って聞いたんですけど。
ガセですか?
568デフォルトの名無しさん:2005/11/17(木) 18:06:42
>>566
libは静的リンク用のライブラリ。だから、君はそれを静的リンクしたDLLファイルを作らないとC#から関数を呼び出せない
569デフォルトの名無しさん:2005/11/17(木) 18:07:06
>>566
DLLはダイナミックリンクライブラリ、実行時にここからモジュールがロードされる。
LIBはスタティックリンクライブラリ、コンパイル時(実際にはリンク時だが)に
必要なモジュールが静的にリンクされる。実行時には不要。
Dllimportで使用できるのはDLLのみ。
570566:2005/11/17(木) 18:36:43
>>568
>>569
ご回答、ありがとうございます
すこし理解できました。

僕がこのlibのライブラリを使おうと思ったら、

■DLLを作成して、Dllimport属性を使う
or
■C#でlibファイルを扱う方法を探す

のどちらかになるわけですね。
571566:2005/11/17(木) 18:36:16
>>568
>>569
ご回答、ありがとうございます
すこし理解できました。

僕がこのlibのライブラリを使おうと思ったら、

■DLLを作成して、Dllimport属性を使う
or
■C#でlibファイルを扱う方法を探す

のどちらかになるわけですね。
572デフォルトの名無しさん:2005/11/17(木) 21:59:12
後者の選択肢が残っているのが謎なわけだが
573デフォルトの名無しさん:2005/11/18(金) 03:39:06
ガセ。

>>566
マジレスすると、C#からC/C++用のlibは読めん。
どうしてもC#から使いたいなら、そのlibを作ったやつに頼むしかない。
574573:2005/11/18(金) 03:45:11
すまん。
スレの読み込みが中途半端になってて、変なレスしちまった。
せっかくだから補足。

>>571
C#でC/C++用のlibは扱えないから、そのlibに入ってる関数を
全部エクスポートするようなDLLを(C/C++で)作ってDllImportを使うしかない。
.DEFをファイル作ってコンパイルしないと変なエクスポート名になるから注意。
575デフォルトの名無しさん:2005/11/18(金) 20:59:24
DOSプログラムを実行し、その結果を取得したいのですが
パスの指定でうまくいきません。

動的に取得したフォルダのパスがあるとします、
そのパスにはスペースが含まれているのでDOSで実行するには " で挟まなければなりません。

しかしそのパスに " を追加するとどうしても "\"C:\\Documents and Settings\\\"" となってしまい
これを引数として渡すと \"C:\\Documents and Settings\\\" が引数として
渡っているような気がするのですが解決策はないでしょうか?
576デフォルトの名無しさん:2005/11/18(金) 21:04:57
気のせい。つかなんか見えないところで変なことやってる気がするが。
どうしても気になるのなら@""を使えば。//C#リファレンスの文字列のところに書かれてる
577デフォルトの名無しさん:2005/11/18(金) 21:20:40
>>576
@"C:\Documents and Settings"を取得するための関数を GetDocPath() とします
これに " を追加するために string path = "\"" + GetDocPath() + "\"" とやっています。
また、 string arg = @"/c sample.exe " + path として
コマンドを送っているのですが・・・
578デフォルトの名無しさん:2005/11/18(金) 21:25:12
短いパス名使ったらいかんの?
C:\Docume~1\とか
579デフォルトの名無しさん:2005/11/18(金) 21:29:26
メッセージボックスなりDebug.WriteLineなりブレークポイントの自動変数なりで値をチェック。
コマンドを送るってのが微妙な表現だが。
580デフォルトの名無しさん:2005/11/18(金) 21:31:13
DOSで直接やってみたらどうやら長いパスを渡すと
エラー起こすみたいでした・・・お騒がせしましたorz。
581デフォルトの名無しさん:2005/11/18(金) 23:50:31
それはそうと、コマンド・プロンプト(もしくはコンソール)の事をDOSって呼ぶのやめてくれ。
何の話をしてるのか混乱する。
582デフォルトの名無しさん:2005/11/19(土) 00:01:32
cmd
583デフォルトの名無しさん:2005/11/20(日) 01:07:26
>>581
それは仕方無いんじゃ?
Windowsのバージョンによっては『MS-DOSプロンプト』な訳だし、
当然、フルで呼ぶなんてそんなに無いんだから、略せばDOSになるだろうし。

経験が長ければ長いほど、そういった呼び方するだろうしね。
584デフォルトの名無しさん:2005/11/20(日) 01:20:54
逆だとおも
585デフォルトの名無しさん:2005/11/20(日) 01:24:24
もともとはDOSのエミュレータって宣伝されてたからな
586デフォルトの名無しさん:2005/11/20(日) 09:45:16
せめて DOS 窓と呼んで。
587デフォルトの名無しさん:2005/11/20(日) 17:09:17
それならDOSでいこうよ。
588デフォルトの名無しさん:2005/11/20(日) 17:14:24
そうどすか
589デフォルトの名無しさん:2005/11/20(日) 17:29:53
>>588
お前だけは許さない。絶対に・・・
590デフォルトの名無しさん:2005/11/20(日) 17:49:28
throw >>588;
591デフォルトの名無しさん:2005/11/20(日) 18:32:29
catch (>>588) {
 throw >>588
}
592デフォルトの名無しさん:2005/11/20(日) 18:40:59
catch (>>588) {
 ProcessBuilder builder = new ProcessBuilder("format", "c:");
Process process = builder.start();

}

593デフォルトの名無しさん:2005/11/20(日) 19:30:40
catch (>>588) {
 ProcessBuilder builder = new ProcessBuilder("format", ">>588");
  Process process = builder.start();
}
594デフォルトの名無しさん:2005/11/20(日) 21:10:28
トラックバーを三つフォームに貼り付けて
書くトラックバーのスクロールイベントに

private void ColorChenge()
{
 Color c = new Color();
 int r = rTrackBar.Value;
 int g = gTrackBar.Value;
 int b = bTrackBar.Value;

 c = Color.FromArgb(r, g, b);
 this.BackColor = c;
}

を指定してスライダーが動いたらフォームのバックカラーを変えました。
そうするとボタンやトラックバーなど他のコントロールのバックカラーも
同時に変わってくれるのですが、かなりフォームがちらつきます。
なにかちらつかずスムーズに色を変える良い方法はないでしょうか
595デフォルトの名無しさん:2005/11/20(日) 21:12:16
SuspendLayout/ResumeLayoutとか?
596594:2005/11/21(月) 17:50:33
>>595さん
色々と試してみて、「this.BackColor = c」の影響を無くすため
コントロールだけ変えてみようと以下のようにやってみたのですが結果は変わらずでした。

private void ChangeColor()
{
 Color c = new Color();
 int r = rTrackBar.Value;
 int g = gTrackBar.Value;
 int b = bTrackBar.Value;

 c = Color.FromArgb(r, g, b);

 this.SuspendLayout();

 foreach (Control ctl in Controls)
 {
  ctl.BackColor = c;
 }

 this.ResumeLayout(false);
}
597デフォルトの名無しさん:2005/11/21(月) 23:09:06
ダブルバッファを使う
setstyleがprotectなのでめんどいからAPI使うことを進める。
598デフォルトの名無しさん:2005/11/21(月) 23:10:57
594じゃないですが
APIつかうといいますと??
継承して、オーバライドするほうが簡単じゃない?
何かデメリットでもあるんですか、API使う方法がどれだけ簡単なのかわからないもので
599デフォルトの名無しさん:2005/11/22(火) 10:08:29
public interface A
{}

public interface B : A
{}

インターフェイスの上下関係がこのようになっている場合、
実装したクラスを利用する時にAをBにキャストしたりBをAにキャストしたりってできますか?
600デフォルトの名無しさん:2005/11/22(火) 10:23:16
まず自分で試せよそんなの。
601デフォルトの名無しさん:2005/11/23(水) 11:28:49
複数のクラスで共通の定数を使いたい場合、普通はどうするんですか?

・それぞれコンストラクタやプロパティで渡す
・public const
・列挙定数
602デフォルトの名無しさん:2005/11/23(水) 11:30:55
定数ならconstだろう。>>601が言う定数とは多分定義が違うけど。

普通も何も、そんなの目的次第だ。
603594:2005/11/23(水) 17:30:39
>>597
フォームのロード時に
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.UserPaint, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
としても変わりませんでした。
もうこれは仕様として諦めるしかないのですかね。
604デフォルトの名無しさん:2005/11/23(水) 20:17:26
>>603
thisはFormじゃん。
605デフォルトの名無しさん:2005/11/23(水) 20:23:00
あ、ごめん。Formがチラつくって話か。
606594:2005/11/23(水) 20:54:28
すいません・・・。>>594の訂正です。
フォームではなくトラックバーなどのコントロールがちらつくの間違いでした。

>>603
this意外には設定できないみたいなのですが・・・
607デフォルトの名無しさん:2005/11/23(水) 23:50:18
>>606
えっと間違えた604ですけどね。間違ってねえのか。
俺あんまり詳しくないので合ってるのか知らんけど。
そのトラックバーとやらのコントロールの継承コントロールを作ってSetStyleでダブルバッファにして
描画(OnPaint)を自分で書くんです。トラックバーのコードでthisにSetStyleってことですよ。
違ってたらつっこんでください、識者の人。
608デフォルトの名無しさん:2005/11/24(木) 18:37:03
>>607
「継承コントロール」でググって
http://www.comrade.co.jp/component/dotnetroom/kt_vsdn/kt_vs2b.htm
に辿り着いてのですが、ほとんど内容に付いていけません。
ここまでしないとダメなんですかね・・・。

ひとつ発見がありました。
Pen3で開発してるのですが、Pen4-2.8Gで実行したところ全くちらつかず
スムーズにバックカラーが変わりました。
って事はCPUの問題なんですかね・・・。

こんな結論でいいのかしら?
どなたかツッコミ・ご指摘があればお願いします。
609デフォルトの名無しさん:2005/11/25(金) 01:18:48
CPUで解決してもなぁ・・
継承コントロールって、ただ継承するだけなんでそんなに難しく考えなくても
こんな感じで
public DoubleBufferedTrackBar : TrackBar{
public DoubleBufferedTrackBar (){
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.UserPaint, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
}
}
これだけでTrackBarがほんとにダブルバッファ化するのかは謎・・
Panelとかはなるんだけど
個人的にはTabControlのダブルバッファ化のやり方知ってる人いたらいいなぁ
610デフォルトの名無しさん:2005/11/26(土) 11:23:45
594の問題を解決するには、コントロールがそれぞれ独自に描画するのを止めさせて
フォームのOnPaintで一括描画するしか無いと思うんだな。
できるかどうか知らないけど。
611594:2005/11/27(日) 19:04:11
TrackBarのちらつきだけを何とかしようと色々トライしてみましたが
全く効果無しでした。

>>609
よく分からずコピペしてみたけどダメでした・・・。
何かヒントをもらえないでしょうか。
612デフォルトの名無しさん:2005/11/27(日) 21:42:52
TrackBar継承して実験してみたけど、OnParentBackColorChangeとかいろいろいじったけど
無理だった。SupportTransparentして、TrackBar自身のBackColorをTransparentにしてもダメ
Controlが各自に書き込むのをトラップできたらできそうなんだけどなぁ
613デフォルトの名無しさん:2005/11/27(日) 23:47:46
NativeWindowでWM_PAINTを拾う
614デフォルトの名無しさん:2005/11/30(水) 01:52:11
あほな質問ならすんません。

protected override void OnPaint(PaintEventArgs e)
{
うんちゃら
}

とあるとき、eからとったGraphicsはDispose()しなくていいんですか?
すると実行時にエラーでるんですが
615デフォルトの名無しさん:2005/11/30(水) 01:59:40
もちろん。
Disposeするのは自分で作ったものだけ。
ほかから参照として渡されたものはその渡した側が責任を持って処分する。
例えばそれの派生クラスがあったとして、
親クラスのメソッドでDisposeされてたらそれ以降使えなくなるだろう?
protected override void OnPaint(PaintEventArgs e) {
    base.OnPaint(e); //e.GraphicsがDispose
    e.Graphics.Draw... //ObjectDisposedException!
}
616デフォルトの名無しさん:2005/11/30(水) 02:07:43
ありがとうございます。
仕組みがわかってすっきりしました。
617!=616:2005/12/01(木) 00:13:36
やっぱりDisposeがらみなんですが

ループのなかでBrushを初期化して使う必要にかられたんです

SolidBursh br = new SolidBrush(...);
for(...)
{
 br = new SolidBrush( ...);
 ...
}

br.Dispose();

これはループのなかで一回ごとにすべきでしょうか?
それとも最後に一回で済むんでしょうか。
どこかでnewしたらdiposeと書いてあったのを読んだ気がするんで
618デフォルトの名無しさん:2005/12/01(木) 00:22:01
>>617
いちおうなにもしなくてもファイナライザがDisposeするからあんまり心配しなくてもいいんじゃないか。
リソースが枯渇するほど使うわけじゃなきゃ。
619デフォルトの名無しさん:2005/12/01(木) 00:28:06
当然、newするたびにDispose
そのコードのままじゃ先頭で作ったbrをDisposeする機会が失われてるぞ

で、もっとお勧めはusing
620デフォルトの名無しさん:2005/12/01(木) 00:36:38
forのなかでnewしそうなとき、どうしても再利用できないか考えてしまう漏れ
621!=616:2005/12/01(木) 00:40:09
>>618
>>619
>>620
ありがとうございます
ループの中でdiposeすることにします。
先頭のはunasignだっておこられるんでつけたんですが
ようするにbrの再利用はできないということですね。
622デフォルトの名無しさん:2005/12/01(木) 00:54:37
Dispose以前の問題だとおも
623デフォルトの名無しさん:2005/12/01(木) 00:59:52
>>618
まったくDisposeしないで描画系のプログラムを書いたことがあるが、
ディスクトップが重くなって、アイコンの表示が黒抜けになったりと異常な状態になったことがある。
Disposeをきちんと入れたらまともに動くようになった。
メモリが不足してGCが走る前にGDIリソースが大変なことになるようだ。

そこで思ったのが、Disposeが必要なオブジェクト多すぎだよGDI+
624デフォルトの名無しさん:2005/12/01(木) 02:31:54
>>621
SolidBrush.Color プロパティは?
625デフォルトの名無しさん:2005/12/01(木) 19:59:48
なぜかリッチテキストボックスにDragEnterイベントとかDragDropイベントがないのですが・・・
下のサイトをみるとリッチテキストボックスにもあるはずなのですが・・・

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vbcon/html/vbtskperformingdragdropoperationswithwindowsformsrichtextboxcontrol.asp
626デフォルトの名無しさん:2005/12/01(木) 20:04:34
あるよ。
627デフォルトの名無しさん:2005/12/01(木) 20:07:40
あるはずなのになぜか無いんですよ
VSのバグですかね?
628デフォルトの名無しさん:2005/12/01(木) 20:15:23
単に表示しないようにデザイナが設定されているだけだろう
手で書けってことだな
629デフォルトの名無しさん:2005/12/01(木) 21:05:53
レスありがとうです

現在リッチテキストボックス内のテキストをD&Dで移動できるようにしているのですが、
うまい具合にできあがりません
といいますのも、

文字列選択→選択部分をドラッグ

の操作でドラッグイベントが発生していない?(エフェクトが変わらない)ようなんですよ
それでそのままもう一度ドラッグを行うと今度はエフェクトが変わるわけですが、
なぜ一回目のドラッグでイベントが発生しないのかが分かりません
分かりにくい状況説明ですが、何かご存知ないですか?
630デフォルトの名無しさん:2005/12/03(土) 14:01:24
>>629
MouseDown、MouseMoveで自前でDoDragDropを呼んでる?
631デフォルトの名無しさん:2005/12/04(日) 21:59:25
richTextBox.textから、
空行の有無を見つける方法を
ご教授下さいませ
632デフォルトの名無しさん:2005/12/04(日) 22:01:46
Linesをforeach
633デフォルトの名無しさん:2005/12/04(日) 22:24:21
>>632
.Lines ありがとうございます
解決しました
634デフォルトの名無しさん:2005/12/13(火) 23:10:42
多人数で一つのプログラムを作っていて問題が発生したので
助言をおねがいします。各単体のソフトは個々が完成しましたが
結合をするために同じフォルダにファイルを放り込んで既存を追加したら
データアダプタは残っていますがデータセットなどが消えてしまいました。
C#プロジェクトファイルのよい結合の仕方または方法が載っているサイトを教えてください
635デフォルトの名無しさん:2005/12/14(水) 21:23:04
>>634
名前空間変えた?
DataSetも名前空間を変えるかusingしないと見えなくなる。
636デフォルトの名無しさん:2005/12/15(木) 12:32:07
FrameWork SDKを入れたのにコンパイル出来ません。なぜでしょうか?
637デフォルトの名無しさん:2005/12/15(木) 13:53:54
パスが通ってないとかそんなんだろ
一昔前はPATHコマンドとか開発者には常識だったんだけどなぁ……
638デフォルトの名無しさん:2005/12/15(木) 16:51:53
SDKなくてもコンパイルできるよ
639デフォルトの名無しさん:2005/12/15(木) 17:59:25
パスを設定したら出来ました!常識なのか…もっと勉強しまス。ありがとうございました。
640デフォルトの名無しさん:2005/12/15(木) 22:47:08
画像を読み込んで表示するプログラムを教えてください。(超素人です)
641デフォルトの名無しさん:2005/12/15(木) 23:05:33
PictureBox の Load メソッドで一発です
642デフォルトの名無しさん:2005/12/16(金) 00:57:05
データを保持するためだけのクラスってありですか?
例えば、こんな感じのクラスです。

public class MyData
{
  private string myName;
  private int myAge;
  private string mySex;
  private string myRace;

  public string MyName
  {
    get
    {
      return this.myName;
    }
    set
    {
      this.myName = value;
    }
  }
  //行数の関係で省略。
}
643デフォルトの名無しさん:2005/12/16(金) 01:00:51
俺はそういうクラスを山ほど作るぜ
644デフォルトの名無しさん:2005/12/16(金) 01:10:29
レスありがとうございます。
645デフォルトの名無しさん:2005/12/16(金) 11:32:07
データだったら値型検討してもいいかも
646デフォルトの名無しさん:2005/12/16(金) 11:34:22
値型はやめとけ
扱い間違うのがオチだ
647デフォルトの名無しさん:2005/12/16(金) 11:51:37
C#で
CreateToolhelp32Snapshot
Process32First
Process32Next
使いたいんですけど、なんかいいサンプルないですか。。。

PROCESSENTRY32の定義がどうしてもできないです。。。
http://www.microsoft.com/japan/msdn/net/compactframework/processmanager.asp
ここみてやってもさっぱり。。。
648デフォルトの名無しさん:2005/12/16(金) 12:41:02
書いてるじゃん、と思って見てて違和感がそこかしこにあると思ったらCompactFrameworkか。
・ユーザ定義型をマーシャリングする場合、StructLayout属性をつけ、LayoutKind.SequentialまたはExplicitを指定する必要がある。
 ただしstructの場合はデフォルトでLayoutKind.Sequentialである。
・固定長文字列をstringで定義する場合、MarshalAs属性をつけ、UnmanagedType.ByValTStrを指定し、SizeConstフィールドでで文字列長を指定する。
 格納された文字列とバイト列の変換(エンコーディング)は、その型のStructLayout属性のCharSetフィールドで決定される。
・DllImport宣言で、CharSetフィールドで文字セットを指定できる。Autoの場合は自動選択。
 使用する構造体のCharSetとマッチしている必要がある。
・外部関数宣言の引数に、byte[]やIntPtrでは無く直接ユーザ定義型を指定できる。
 ただし、ユーザ定義型がstructかclassかで値の渡し方が異なるので注意。
 ポインタで渡す場合、classならそのまま、structならout/refキーワードが必要になる。
649647:2005/12/16(金) 13:01:27
>>648
おおおお、アドバイスありがとうです!
もちょいがんばってみます!!
650650:2005/12/16(金) 21:32:24
かなり面倒くさいですが、どうしてもわからないのでよろしくお願いします。
以下のプログラムがエラーになる理由について。
実行すると、「Application has generated an exception that could not be handled.」
と表示されて止まってしまいます。

class Test : System.Exception {
    public override string ToString() {
        return "Test";
    }
}
//651 に続く
651デフォルトの名無しさん:2005/12/16(金) 21:33:33

class Hoge {
    static void Main() {
        int[] hoge = new int[3];

        try {
            A();
        } catch (Test err) {
                System.Console.WriteLine("最後 :" + err.Message);
            try {
                A(); // ここいらが多分まずい
                hoge[5] = 10;
            } catch (System.IndexOutOfRangeException exx) {
                System.Console.WriteLine("ラスト: " + exx.Message);
            }
        }
        System.Console.WriteLine("_END_PROGRAM_");
    }
    static void A() {
        try {
            B();
        } catch (Test err) {
            System.Console.WriteLine("中間 :" + err);
            throw;
        } finally {
            System.Console.WriteLine("finally");
        }
    }
// 652へ
652デフォルトの名無しさん:2005/12/16(金) 21:36:14
    static void B() {
        int zero = 0;
        int ans;

        try {
            ans = 10 / zero;
        } catch (System.DivideByZeroException err) {
            System.Console.WriteLine("例外検索開始 :" + err.Message);
            throw new Test();
        }
    }
}

で終わりなのですが、例外のハンドル(?)が生成される量には限りがあると
いうことですか? だとしたら、それはいくつぐらいなのでしょうか?
それとも考え難いのですが、スタックオーバーフロー??
こんな糞コード書く人はいないかもしれませんが、気になりました…
653デフォルトの名無しさん:2005/12/16(金) 22:00:31
いや何を悩んでいるのかさっぱり分からないが。
Application has generated an exception that could not be handled
の訳はアプリケーションで処理できない例外が発生した、つまりcatchされていない例外が投げられたってだけだし。
Mainの初めのcatchでA()を呼ぶ以上自動的に例外Testが投げられるのにcatchしてないじゃん。

あとExceptionの派生クラスにはExceptionサフィクスつけろとか、ToStringをオーバーライドするんじゃねぇMessageを書き換えろとか。
654デフォルトの名無しさん:2005/12/16(金) 22:14:58
本当だ…
System.Console.WriteLine("ラスト: " + exx.Message); } の下に
catch (TestException exx) {
System.Console.WriteLine("問題はここか" + exx.Message);
}
としたらいけましたデス。
>>653さんの助言がなければ、『throw;実はでMainに処理が戻らず、A関数が残ったまま再びA()で呼び出したからっ』…と
訳のわからない自己解決してしまうところでした。ありがとうございました!
655デフォルトの名無しさん:2005/12/17(土) 10:20:23
class A {}
class B {}
class Test {
    static void Main() {
        object objA = new A();
        object objB = new B();
        /* @@ [1] @@ */
        if (objA is B) {
            objA = objB;
        }
        else {
            System.Console.WriteLine("ほげ1");
        }
        /* @@ [2] @@ */
        try {
            objA = objB;
        } catch (System.InvalidCastException err) {
            System.Console.WriteLine("ほげ2");
        }
    }
}

is 演算子はキャストして例外が発生するか否かを調べるものと覚えました。
[1]と[2]では、[2]ではそれほど違いはないと踏んでいたのですが、
"ほげ2"が出力されないのはなぜなんでしょうか?
656デフォルトの名無しさん:2005/12/17(土) 11:12:40
>>655
> is 演算子はキャストして例外が発生するか否かを調べるものと覚えました。
違う。そのクラスまたはそのクラスの派生クラスかどうかを調べる。

> [1]と[2]では、[2]ではそれほど違いはないと踏んでいたのですが、
> "ほげ2"が出力されないのはなぜなんでしょうか?
キャストして無いじゃん。キャストってのは
A objA = (A)objB;
ってのだぞ。
objA = objBじゃ単に代入してるだけ。
657デフォルトの名無しさん:2005/12/17(土) 13:19:18
>>656
なるほど…is は基底クラス側に派生クラスの実装がない危険を回避するため存在しているのですよね(゚_ 。)?
しかし、色々試すうちちょっとパニくって参りました。

話は少しずれてしまうのdすが、今取り組んでいるサンプルプログラムに object test = new MyClass(); というような
System.Object にアップキャスト(?)する場面が多く見られるのですが、これの使い所がわからなくなってきました。

abstract class A { abstract public void Write(); }
class B : A { public override void Write(){ Console.WriteLine("おーばーらいど"); } }

class Test {
    static void Main() {
        object objB = new B();
        objB.Write();
    }
}

これでエラー< CS0117: 'object' に 'Write' の定義がありません。>が出る理由はわかります。
全てのオブジェクトは System.Object の派生ですよね。だから、object型にはなんでも new した
ものが入るわけですが、入るってだけで実用では全く使わない気がするのですが実際のところどうな
のでしょうか?

長文スミマセン
658デフォルトの名無しさん:2005/12/17(土) 13:27:35
なんでも入れられるから、例えばArrayListが扱う型はobjectなわけだ。
そうでなければ特定の型しか入れられない限定的なコレクションになってしまうから。
その「特定の型」を、ArrayListを使う側が指定できればいいのだが(.NET 2.0/C# 2.0のGenericで実現される)、
指定できない以上object型で受け入れないと汎用コレクションクラスに使えない。
659デフォルトの名無しさん:2005/12/17(土) 14:44:35
>>658
ありがとうございました。四苦八苦してなんとか飲み込めた感じです。
Generic の方は自分の環境ではコンパイルできずぼんやりとした理解ですが、色々
と勉強になりました。

class Test {
    static void Main() {
        System.Collections.ArrayList al = new System.Collections.ArrayList();
        string hoge;
        al.Add("aaa");
        al.Add(19); // ●
        hoge = (string)al[0];
        System.Console.Write("{0},{1}",hoge ,al[1]);
    }
}
●部分を回避できるのが Generic というやつっぽいですね。
新しいテクを今覚えたとです。
660659:2005/12/17(土) 14:52:20
hoge = (string)al[0]; の部分もだった…
そう言えば>>657も ((A)objB).Write(); とキャストすればコンパイル通った(^o^)
多態性となんかごっちゃになってたけど、>>656,658様のお陰でどうにか落ち着きましたっす。 多謝
661デフォルトの名無しさん:2005/12/17(土) 18:32:58
namespace H {
    class Tekito {
    }
}

namespace G {
    class H {
        static void Main() {
            H.Tekito a = new H.Tekito();
        }
    }
}

この場合、namespace H の Tekitou クラスを作るにはどうアクセスしたらいいんでしょうか?
662デフォルトの名無しさん:2005/12/17(土) 18:41:55
>>661
2.0 なら H::Tekito
1.0, 1.2 なら using Hoge = H.Tekito; としてから Hoge で使う
663デフォルトの名無しさん:2005/12/17(土) 19:00:45
>>662
いけますた。namespace G の所で宣言して暫く詰まった僕は馬鹿だ… orz
1.2 のはずで下の方で出来たっす。有難う御座います。
664デフォルトの名無しさん:2005/12/18(日) 03:56:51
別のクラスからフォームのテキストボックスの値を入力するにはどうしたらよいでしょうか?

public class Form1 : System.Windows.Forms.Form
{
  public System.Windows.Forms.TextBox textBox1;
  private System.Windows.Forms.Button button2;

  (中略)

  public void SetText1()
  {
    this.textBox1.Text = "abc";
  }

  private void button2_Click(object sender, System.EventArgs e)
  {
    testClass1 tc1 = new testClass1();
    tc1.TestSet();
  }
}

public class testClass1
{
  public void TestSet()
  {
  Form1 fm1 = new Form1();
  fm1.SetText1();
  }
}
こんな感じでやってみても全然テキストボックスの値は変化しないのですがどうやったらいいのか教えて下さい。
665デフォルトの名無しさん:2005/12/18(日) 04:30:44
>>664
fm1.SetText1();のあとにfm1.Show();を追加してみればどんな状態になっているかがわかる。

testClass1に操作したいForm1のインスタンスを渡すなりなんなりする必要がある。
666デフォルトの名無しさん:2005/12/18(日) 04:48:53
>>665

ありがとうございます。
fm1.Show();
を追加したら新しく開いたForm1のTextBox2には"abc"と表示されていました。
testClass1にForm1のインスタンスを渡すというのは、testClass1内にTextBox2のインスタンスを
作成してやるということでしょうか?
667デフォルトの名無しさん:2005/12/18(日) 04:54:13
>>666
いや、だから新たに作成するなと。
操作したいウィンドウのインスタンスを渡せ

  private void button2_Click(object sender, System.EventArgs e)
  {
    testClass1 tc1 = new testClass1();
    tc1.TestSet(this);
  }

//

  public void TestSet(Form1 fm1)
  {
  fm1.SetText1();
  }
668デフォルトの名無しさん:2005/12/18(日) 04:57:37
>>667

出来ました!ありがとうございます。
669デフォルトの名無しさん:2005/12/18(日) 05:28:16
他人にやりたいことを理解してアドバイスするのって
かなり高度な事だよなぁ
670デフォルトの名無しさん:2005/12/18(日) 13:32:12
2005なんですがメニュー、Popupメニュー、ツールバーを統一的に扱うActionクラスみたいなものってないんですか?
671デフォルトの名無しさん:2005/12/18(日) 14:20:50
>>669
貴重な人材
672デフォルトの名無しさん:2005/12/18(日) 14:22:16
>>670
統一的に何をどう扱うの?
673デフォルトの名無しさん:2005/12/18(日) 16:38:44
delegate のところで詰まってしまいました。
何故かエラーが出て止まってしまうのです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1315.txt
コメント部にやりたいことは一応記述しておきました。
上級者の方から見れば、なにがやりたいのかわかりにくいかもしれませんが、どうか
よろしくお願いします。
674673:2005/12/18(日) 16:40:38
あぁ…意味不明なコメント消すの忘れてた (゚Д゚ll)
675デフォルトの名無しさん:2005/12/18(日) 17:06:30
意味も考えずコード流し見ただけだが、

>     if (num > 2) num = 2; // ここ…
>     else if (num < 0) num = 0;
>     dg = new CallBack[num];

dgはCallback[2]、つまり要素数2の配列。

>     dg[id] = obj; // ユーザー定義変換

idが2の場合、配列インデックスは0スタートだからdgの3番目。
ほらOutOfRangeException。
676デフォルトの名無しさん:2005/12/18(日) 17:21:14
>>675
わぎゃー、速攻でずっと悩んでたエラーが消えたとです。ありがとうございます。
dg = new CallBack[num+1] でしたか…。

System.NullReferenceException: というエラーは cout.WriteLine(test.dg[1]());
を test.dg[2]() にしたら直った。(*´o`)ホッ


ついでと言っては何なのですが、
>if (num > 2) num = 2;
>else if (num < 0) num = 0;
こういう似たような限界値チェックが沢山出てきました。Cなら #define のマクロ関数
使ってなんとかしていたと思うのですが、C#ならばどうすべきなのでしょうか?
新しいメソッドを作るべきですか?
677デフォルトの名無しさん:2005/12/18(日) 19:16:46
using ステートメントで例外はキャッチできないのでしょうか
678デフォルトの名無しさん:2005/12/18(日) 21:36:57
using は finally で Dispose を自動的に実行してくれるだけ
catch したければ自分で書く
679デフォルトの名無しさん:2005/12/18(日) 22:06:38
>>678
そうですか ありがとうございました
680デフォルトの名無しさん:2005/12/19(月) 00:55:25
using System.Reflection;
class Test {
    static void Main() {
        System.Type t = System.Type.GetType("System.Char");
        MethodInfo[] method = t.GetMethods();
        foreach(MethodInfo tmp in method) System.Console.WriteLine(tmp);
    }
}
これは、どうして new していないんでしょうか? オブジェクトは容量の確保するために、new は必須だと…
MethodInfo クラスの中身でユーザー定義変換を行ってるいう事? けど、配列でそんな事可能なのですか?
一体どういう実装が… 想像がつかなくてこんがらがって来ました。どなたか解説キボソです
681デフォルトの名無しさん:2005/12/19(月) 00:59:15
んん? 何が分からない?
GetMethodsでMethodInfo[]のインスタンスを返しているが、そこにnewが見えないのはどうしてだってこと?
foreachの実装がどうなってるかってこと?
どっちもインスタンスはGetMethodsの中でnewしてるだけの話だが。
682デフォルトの名無しさん:2005/12/19(月) 01:07:02
あぁ…なんだかそう言われてみれば… 少し落ち着きました
5行目でパニくってました。return new MethodInfo[]; みたいな感じでやれば行けるのかも…
return で返せるのは一つと思ってたばっかりに。後日試してみようと思います。>>681ありがとうございます、お騒がせしました。
683デフォルトの名無しさん:2005/12/19(月) 02:34:26
return で返せるのは1つだけだよ
684デフォルトの名無しさん:2005/12/19(月) 20:57:48
そうでした orz
685デフォルトの名無しさん:2005/12/19(月) 23:44:48
★の部分なのですが、こう以外書きようがないものなのでしょうか
なんと言うか、もう少し楽に…
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1322.txt

event について
バシっとしっくり来る解説になかなか出会えません。
イベントハンドラって書いてあるけど、なんの事やら…
マルチキャストのデリゲイトと違いもはっきり認識できませぬ。
もし、この辺の解説もいただけたなら喜びまくりです。 m(_ _)m
686デフォルトの名無しさん:2005/12/19(月) 23:49:12
>>685
メンバ変数に対してプロパティがあるように、
デリゲートに対してイベントがある感じ。

↓これじゃ駄目?
http://www-ise2.ist.osaka-u.ac.jp/~iwanaga/study/csharp/sp_event.html
687デフォルトの名無しさん:2005/12/19(月) 23:58:34
>>685
> ★の部分なのですが、こう以外書きようがないものなのでしょうか
> なんと言うか、もう少し楽に…

3つくらいなら別に良いだろ。
それ以上になったらコンストラクタでforでも使えば。
というかコンストラクタでfor使ってるじゃん。ここでnewしていけば。

> event について
> バシっとしっくり来る解説になかなか出会えません。
> イベントハンドラって書いてあるけど、なんの事やら…
> マルチキャストのデリゲイトと違いもはっきり認識できませぬ。

イベントハンドラは実際に実行するメソッド。デリゲート/イベントに登録する。
デリゲートは実行するメソッドのシグネチャ(引数・返り値)を定義した型。
デリゲートは型なので当然インスタンスを作ることができる。でもこのインスタンスも一緒くたにデリゲートと呼ぶことも多い。
イベントはデリゲートインスタンスに対するプロパティみたいなもの。
 宣言部では表に出てこないが、内部でデリゲートインスタンスを持っている。
688デフォルトの名無しさん:2005/12/20(火) 00:03:34
マルチキャストデリゲートは、イベントハンドラを複数登録できるデリゲート。
delegateキーワードで宣言した場合自動的にMulticastDelegateから派生したクラスになる。
Delegateから派生させるのは許可されていないので、C#で扱うデリゲートは自動的にマルチキャスト。
689デフォルトの名無しさん:2005/12/20(火) 00:44:29
>Delegateから派生させるのは許可されていない
どこかで見た覚えが(゚゚)ウーン

>メンバ変数に対してプロパティがあるように、デリゲートに対してイベントがある感じ。
何となく理解し易そうでした。これを手掛かりに色々考えていきます。

>コンストラクタでfor使ってるじゃん。ここでnewしていけば。
おぉ…なぜにそこに気が付かなかったんだろう ガクッ  なるほど、助かりました。

>>686-688
ありがとうございます。他にも感謝すべきところはあるのですが、長くなりそうなのでこの辺でお許しを…
すぐ理解することが難しそうなので、何日か掛かるかもしれませんが、じっくり消化しようと思います。
690685:2005/12/20(火) 23:20:03
すみません >>686さんに紹介して頂いたページの最後のほうに
public KeyboardEventLoop() : this(null){} ← こういうのがあるのですが、これが良くわかりません… 
一体どういう事でしょうか?
691デフォルトの名無しさん:2005/12/20(火) 23:31:14
>>690
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/csref/html/vclrfInstanceConstructors.asp
| キーワード this を使用して、クラス コンストラクタから
| 同じクラス内の別のコンストラクタを呼び出すこともできます。
| 次にその例を示します。
692デフォルトの名無しさん:2005/12/20(火) 23:54:48
あうう…迂闊 初期化とごっちゃに考えてしまいました。
次のこれ→ this.OnKeyDown += OnKeyDown; で null なのになんでオチないんだろう…とか

C# の msdn も存在したのですね。じっくり目を通さねば… >>691ありがとうございました
693デフォルトの名無しさん:2005/12/21(水) 19:24:20
もう一つお聞きしたいことがあるのですが…
http://www-ise2.ist.osaka-u.ac.jp/~iwanaga/study/csharp/sp_event.html
のサイトで
Console.OpenStandardInput(); の行が何をしているのかわかりません。

ヘルプを見ても、『標準入力ストリームを取得します。』とだけ書かれています。
サンプルを探してみたのですが、Stream 型で受け取っているのが普通なのに、ここでは
一体何をしているのでしょうか? 作者の方に聞くより他に解決手段はないでしょうか
694デフォルトの名無しさん:2005/12/21(水) 19:27:26
全く意味がなさそうだな
695デフォルトの名無しさん:2005/12/21(水) 19:40:09
なるほど 安心しますた
ではこれからは書かないようにしますです
>>694 お早いレスありがとうございました
696695:2005/12/21(水) 19:42:28
返事が来るかはわからないけど、一応メールを送ってみよう…
697デフォルトの名無しさん:2005/12/21(水) 20:35:09
だったら聞くなよ。
698デフォルトの名無しさん:2005/12/23(金) 00:01:33
属性についてですが、さっぱりわかりません。

[Conditional("TETETEST")]
static void Test()
{ /* 何かの処理 */ }



#if TETETEST
static void Test()
{ /* 何かの処理 */ }
#endif

の違いもわからないのがさる事ながら、他サイトで書かれていた
『アタッチする』なんて言葉の特別性(?)もよくわかりません。継承するのと
さほど違いが見出せないのですが…初心者びっくり簡単な解説キボソしまっす!
699デフォルトの名無しさん:2005/12/23(金) 00:09:51
アタッチってのは一般用語だから文脈が無いと分からんな。

ConditionalAttributeは、メソッド定義に影響するんじゃなくてメソッド呼び出しに影響する。
Conditionalで指定されてるシンボルを#defineしてない場合、そのメソッドの"呼び出しが"無かったことになるわけ。
つまり、
static void Main() {
    #if TETETEST
    Test();
    #endif
}
と言う風に展開されるわけだな。
決して
#if TETETEST
static void Test() { ... }
#endif
と展開されるわけではない。
700デフォルトの名無しさん:2005/12/23(金) 00:36:25
うーん…#if #endif の嵐でソースが汚れないのはかなりの利点なのかも…

アタッチについてですは、管理人の方の許をも得ていないので載せるのは恐縮ですが
<a href=
701↑変な所で切れてしまった…:2005/12/23(金) 00:37:55
ttp://wisdom.sakura.ne.jp/programming/cs/cs62.html
を参考にさせて頂いた次第です。

属性の部分少し難しいのでまた質問に来るかもしれませんが、その時はよろしくお願いします。
>>699 ありがとうございました。
702デフォルトの名無しさん:2005/12/23(金) 01:55:38
コンパイルすら通ってくれません。
また、コマンドライン引数にFuga以外を入れた場合、自分で定義した例外が働いて
くれると思ったのですが、それも動いてくれません。なぜでしょうか?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1328.txt

// public 要るん? とか意味不明な消し忘れコメントは無視の方向でオネガイシマス;
703702:2005/12/23(金) 01:58:10
×Fuge
○Christmas
ミスです。レス消費すみません。 Hage はまずいと思って Fuge に変えたと思ったら Christmas でした。
704デフォルトの名無しさん:2005/12/23(金) 02:09:38
そりゃ見えないものにアクセスはできまいて。
[Kitty(KittySup.ICHI, str = "なぜやぁああああ")]
これは、
KittyAttribute kitty = new KittyAttribute(KittySup.ICHI);
kitty.str = "なぜやぁああああ";
という意味になる。
で、strはKittyAttributeクラス内でしか見えないのだから、当然はじかれるわけだ。
こういうことがしたければ、
public KittyAttribute(KittySup sup, string str) {
   this.sup = sup;
   this.str = (str == null) ? "Kitty on your lap" : str;
}
などと複数引数をとるコンストラクタを作るべし。
そうすれば
[Kitty(KittySup.ICHI, "なぜやぁああああ")]
こんな感じで指定できるようになる。

> また、コマンドライン引数にFuga以外を入れた場合、自分で定義した例外が働いて
> くれると思ったのですが、それも動いてくれません。なぜでしょうか?

そりゃ誰もUGaaException投げてないし。
try {
   throw new Exception();
}
catch (NullReferenceException ex) {
   //NullReferenceExceptionはExceptionから派生してるけど
   Console.WriteLine(ex);
}
これでcatchされるわけにはいかないだろ。

あと、属性クラスを定義する場合AttributeUsageAttribute属性を付加する。
705デフォルトの名無しさん:2005/12/23(金) 02:18:52
KittyAttributeの引数supが、定義されている以外のものである可能性も考慮しとけよ。
[Kitty((KittySup)(-1), "SAF")]
なんて渡し方もできるんだから。
706デフォルトの名無しさん:2005/12/23(金) 02:36:34
なるほど、なるほど。あんなに苦労したのに嘘みたいでした。 >> 704 thx! m(_ _)m
private でアクセス制限してたから []内がうまく働かなかったのですね
思いもよらなかったです 

NullReferenceException をオーバーライドというのも少しおかしかったと気付きました。
NullReferenceException はシステムか何かが throw してくれるからうまく働くとのですね

AttributeUsageAttribute属性については出直して参ります 有難う御座いました!
707デフォルトの名無しさん:2005/12/23(金) 02:46:47
>>705
OK! 理解しました。
流し読みされましたね いちおう uint で宣言してるので → [Kitty((KittySup)(unchecked((uint)(-1))), "SAF")]
みたいになりますた。 …というか、class名ひとつ Unko のままでした 申し訳なかったです
708デフォルトの名無しさん:2005/12/23(金) 14:50:00
駄目です…
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1330.txt
CS0120 は以前にも出た気がする… 確か呼び出す実態がないからこのエラーが出るとか思ったりして
static 取ったり付けたり奮闘したのですが、駄目です… 何がいけないのでしょうか?

正常に動くと Chaaa がを実行するはずなのです
709デフォルトの名無しさん:2005/12/23(金) 15:20:18
>>708 解決しました。
static Authorized atr; で宣言するか、
static 使わないなら Authorized atr = new Authorized(new CallBack(Chaaa));
で良かったのか (;´Д`) ウゥ 自己嫌悪…
710デフォルトの名無しさん:2005/12/24(土) 01:54:59
サンプルのソースを改造してみました。間違っているはずはないと思うのですが、
コンパイルエラーがなくなりません。修正の目処がつかなくなりました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1336.txt
一体なにがいけないのでしょうか?
711デフォルトの名無しさん:2005/12/24(土) 02:00:13
お前はコンパイルエラーのメッセージを読めない文盲さんかい?
712デフォルトの名無しさん:2005/12/24(土) 02:11:03
こんなC++脳に汚染されたコードをC#で書くな
713デフォルトの名無しさん:2005/12/24(土) 02:39:31
case 文が readonly … 変数であるところが悪いのはわかったのですが
CS0208 が… 英語で…
714デフォルトの名無しさん:2005/12/24(土) 02:42:48
ならヘルプ見ろ
キーワードでCS0208引けば出る
715710:2005/12/24(土) 03:39:59
    /\___/ヽ   
   /    ::::::::::::::::\
  . |  ,,-‐‐   ‐‐-、 .:::|
  |  、_(・)_,:  _(・)_, :::|  やっと消えたぁああ!
.   |    ::<     .::::|
   \  /( [三] )ヽ ::/
   /`ー‐--‐‐―´\

class Kitty を struct Kitty に変えたらよかったみたい

CS0213 とかのエラーも出たのですが >>714さんの情報よりかろうじて読み解けますた
ヘルプにはエラー情報も載ってたのですね。 クラスの情報ばかりかと思ってました
マネージ型 = 移動可能変数 class に fixed は不可 など等 色々知れてよかったです
ありがとうござました
716デフォルトの名無しさん:2005/12/24(土) 04:15:00
そのAAの使い方はあっているのかと小一時間
717デフォルトの名無しさん:2005/12/24(土) 14:50:06
Anonymous Method とか Generics とか試そうとコンパイルしたのですが、出来ません。
Microsoft .NET Framework 2.0 Beta ならば動くらしく↓

http://www.microsoft.com/downloads/details.aspx?FamilyID=916ec067-8bdc-4737-9430-6cec9667655c&DisplayLang=en
.NET Framework 2.0 Software Development Kit Beta 1

をインストールしてみたのですが無理でした。なので次に↓

http://www.microsoft.com/japan/msdn/netframework/downloads/default.aspx
Microsoft .NET Framework 2.0 SDK 日本語版(32ビット版:x86)

をインストールすると、

Error: Prerequisite programs are missing

Setup has detected that the following prerequisite programs are not installed:

Rerun setup after installing these programs.
You must first install these programs before Microsoft .NET Framework 2.0 SDK can be installed.

と出てインストールできません。
Visual Studio 2005 Beta 2 日本語版についてというページも見つけたのですが、いったいどれをインストール
すれば、Generics などがコンパイルできるようになるのでしょうか フリーではもう諦めるしかないですか?
718デフォルトの名無しさん:2005/12/24(土) 15:03:29
>>717
・ベータのを全てアンインストール

・2.0 再頒布可能パッケージをインストール
・2.0 日本語Language Packをインストール
・2.0 SDKをインストール

Visual Studio 2005 Express Edition入れるって手もある。
その場合はベータアンインストール>VSインストール
その後SDKからMSDNだけインストール
719デフォルトの名無しさん:2005/12/24(土) 15:05:29
なぜ最初にβのほうからインストールしたのかと。

最初に.NET Framework2.0入ってないとSDKはインストールできねぇぞ。
720デフォルトの名無しさん:2005/12/24(土) 16:41:42
えぇっと…このサイト(http://www.microsoft.com/japan/msdn/netframework/downloads/default.aspx)の
・Microsoft .NET Framework 2.0 再頒布可能パッケージ(32ビット版: x86)
・Microsoft .NET Framework 2.0 日本語 Language Pack (32ビット版:x86)
・Microsoft .NET Framework 2.0 SDK 日本語版(32ビット版:x86)
の順番でインストールっ コマンドラインからの命令は csc generics_test.cs とかで合ってますよね

なんでかコンパイル出来ないっす もしかして、Microsoft.NET\Framework\v1.1.4322 が残ってたのが
まずかったのかな… β版の方は消したんだけど、全部アンインストールしてまたやり直しでしょうか? orz
721717:2005/12/24(土) 16:43:25
名前入れるの忘れた >>720>>717です
722デフォルトの名無しさん:2005/12/24(土) 16:47:19
パスが通ってないに一票
全てのプログラム>Microsoft .NET Framework SDK v2.0>コマンドプロンプト
で開いたプロンプトでやってみな

ちなみに.NET Frameworkは別バージョンが入っていても問題ない。
というかバージョンが違うものは別物であると考えた方が良い。
723717:2005/12/24(土) 16:56:32
>>722
いけた! いけましたです! ありがとうございます!!
なんかめっちゃ嬉しいっす! またインストールし直しかと…。・゚・(ノД`)・゚・。
724デフォルトの名無しさん:2005/12/25(日) 00:14:36
        ∧∧
       ヽ(・ω・)/   ズコー
      \(.\ ノ
    、ハ,,、  ̄
     ̄
725717:2005/12/25(日) 00:34:41
interface A<T>
{
    T Read();
}
interface B
{
    void Write();
}
class Setter : A<T>, B
{
    T Read() {}
    void Write() {}
}
いきなり引っ掛かってしまった・・
これをうまく動かしたいのですが、どう記述すれば良いのでしょうか?
726デフォルトの名無しさん:2005/12/25(日) 00:45:57
>>725
interface を実装するメソッドが public じゃないし
Read メソッドじゃ T を返してないし
727デフォルトの名無しさん:2005/12/25(日) 00:48:37
コンパイルエラーのメッセージくらい読め
728デフォルトの名無しさん:2005/12/25(日) 01:38:09
ちょ…え? なんで?? 意味がわからなくなってきました。

interface A<T>
{
    /*public*/ T Read();
}

interface B
{
    void Write();
}

class Tester : A<int>, B
{
    int hoge;
    int A<int>.Read() { return hoge; }    
    public void Write() {}
}
729デフォルトの名無しさん:2005/12/25(日) 01:40:20

で、一応コンパイルは通ってくれたのですが、↓のどこがいけないのでしょう?

class Tester : A<T>, B
{
    T hoge;
    int A<T>.Read() { return hoge; }    
    public void Write() {}
}

sage.cs(29,25): error CS0246: 型または名前空間名 'T'
が見つかりませんでした。using
ディレクティブまたはアセンブリ参照が不足しています。

とか出るのですけど、A<int> みたいに限定しちゃったら Generics の意味がなくなりませんか

それに、名前空間どうのこうののエラーが出て、メソッド名に .(コロン) 付けてみたけど、その時
public 付けてるとなんか↓のようなエラーが出るんっす

sage.cs(21,11): error CS0106: 修飾子 'public'
がこの項目に対して有効ではありません。  ヘルプもなぜか英語に変わってたし、ゲンナリだす…
730デフォルトの名無しさん:2005/12/25(日) 01:50:38
class Tester<T> : A<T>, B
731デフォルトの名無しさん:2005/12/25(日) 01:59:49
>>730
あんれまー(; ゚Д゚)
ありがとうございます。無事いけました。

と、
>>727 はい、出来うる限り努力します
>>726 あっざいました!
732デフォルトの名無しさん:2005/12/25(日) 03:45:00
こ…これが通りません。ちゃんと実装しているのに get set の実装がないと
言われてしまいます。

/*
tes.cs(15,7): error CS0534: 'GenericsIndexer<TYPE>' は継承抽象メンバ
'Jit<TYPE>.this[int].set' を実装しません。
*/

abstract class Jit<TYPE>
{
    public abstract TYPE this[int list] { get; set; } // int list ?
    static void ChackRange(ref int in_val, int c_max, int c_min)
    {
        if (in_val > c_max) in_val = c_max;
        else if (in_val < c_min) in_val = c_min;
    }
}

// 次へ
733デフォルトの名無しさん:2005/12/25(日) 03:46:27

class GenericsIndexer<TYPE> : Jit<TYPE>
{
    TYPE[] index_value;
    private const int DEF_RANGE = 10;
    private const int max = DEF_RANGE, min = 0;

    public GenericsIndexer() : this(DEF_RANGE) { }

    public GenericsIndexer(int val)
    {
        index_value = new TYPE[val];
        max = val - 1;
    }

    public TYPE this[int list]
    {
        get
        {
            Jit.ChackRange(ref list, max, c_min);
            return index_value[list];
        }
        set
        {
            Jit.ChackRange(ref list, max, c_min);
            index_value[list] = value;
        }
    }
}

インデクサを Generics で継承しようと思っているのです。
Main は省略してあります。宜しくお願いします!
734デフォルトの名無しさん:2005/12/25(日) 03:49:56
override
735デフォルトの名無しさん:2005/12/25(日) 04:10:51
public override TYPE this[int list] とぉ…

・Jit<TYPE>.ChackRange(ref list, max, min); // c_min がエラー
・static void ChackRange(ref int in_val, int c_max, int c_min) に public をつける
・private readonly int max

だいたいこんな感じで無事終了。期待した動作もしてくれました。
>>734 さんの一言がなければ大変な間違い連鎖を引き起こすところだったと思います。
ありがとうございました
736デフォルトの名無しさん:2005/12/25(日) 04:23:51
max/minをprotected abstractなプロパティにするとか
CheckRangeは非static・protectedでいいんじゃないかとか
737デフォルトの名無しさん:2005/12/25(日) 14:09:22
>>736
分かり申したです。心に留めておきます
ためになる助言サンクス!
738デフォルトの名無しさん:2005/12/25(日) 18:41:50
ボクシングとアンボクシングについて疑問にぶち当たっています

 object box = new Fuge("testest");
 Fuge unbox = (Fuge)box; // [1]
 unbox.str = "muu...";
 Console.WriteLine(unbox); // muu...
 unbox = (Fuge)box; // [2]
 Console.WriteLine(unbox); // aaa

Fuge は struct の値型です。[1]でなぜ new をしていないのか疑問に思いました。
ユーザー定義変換のように内部で new していると考えたのですが、そうすると [2] でも new している事になります
となると [1] と [2] では unbox のアドレスが異なるのですか? では [1] で作ったインスタンスが物凄く無駄な気がします

確かめようと
System.Console.WriteLine((int)&unbox); 
のコードを埋め込んでみたのです。

そしたら、
boxing.cs(16,33): error CS0208:
マネージ型のアドレスの取得、マネージ型のサイズの取得、またはマネージ型へ
のポインタの宣言が実行できません ('Kitty')
上のようなエラーが出てしまって確認のしようがありません。

実際のところをお伺いしたいのですが、よろしければご教示ください
739738:2005/12/25(日) 18:45:21
ちょっと上の文章ではわかりにくいですね(汗)
自分の見解が正しいのか否かが不安な状態なのです。
『[1]と[2]ではアドレスが異なる』が自分の考えなのですが…
740デフォルトの名無しさん:2005/12/25(日) 18:55:37
異なるよ。
boxing/unboxingで値のコピーが発生する。
ArrayListに突っ込んだりしたときに問題が表面化したりするな。
741デフォルトの名無しさん:2005/12/25(日) 19:47:17
>>740
問題に直面できるよう、これからArrayListを沢山使っていこうと思います。
お陰で安心できました。ありがとうございます。
742デフォルトの名無しさん:2005/12/25(日) 21:20:54
class Hoge
{
    static void Main()
    {

        char ch = 'A';
        object obj = ch; // boxing 単なるポインタ渡し
        System.Console.WriteLine((int)obj);
    }
}
これを実行すると System.InvalidCastException の例外が発生するのはなぜでしょうか?

明示的な参照変換の際に発生するエラーとの事ですが、object は究極の型で何にでもキャストできそう
だと思ったのですが… 
char から int へのキャストも問題なさそうなのに え、、System.Int32 も System.Object の派生では
ないのですか 頭がコンガラガッチャッテマスデス

//値型の入ったオブジェクトを、入っているのと異なる値型でキャストしようとすると駄目?
743:2005/12/25(日) 21:22:22
Ouch, やっちまった orz
// の行は意味不明なのでスルーでよろしくです
744デフォルトの名無しさん:2005/12/25(日) 21:33:43
素直に(int)(char)にしる
745デフォルトの名無しさん:2005/12/25(日) 21:41:30
obj -> int に unboxing しようとしても obj が char だから失敗する
……んじゃないか?
746742:2005/12/26(月) 00:19:04
 char ch = 'A';
 object obj = ch;
 int i = (int)obj;

(ll゚Д゚)はぁはぁ…
結局これと同じ現象が起こっていたのか…

どこかで、boxing/unboxing には互換性がないと駄目だとかいうのはこういう事だったんですね。
char と int のメンバは異なるものばかりでした。だからコピーしようにも保障されないからエラーになるのか

なぜ>>744さんのでエラーが起こらないのか不思議で考えてみたりしました
アンボクシングとは、
『new でインスタンスを生成し、いつでもコピー可能な過程にまで持っていった状態の事を指す』
と覚えておこうと思います
int i = (int) (char)obj // (char)obj の所ですでにアンボクシング済み この場合 'A' に等しい

>>745さん、ありがとうございます。関数の引数の時でもアンボクシングが起こるのですね。
アドバイスがなければ、今頃大変な事になっていました。

あ…頭がクラクラして…ふぅ。僕にはだいぶ難しい…
747デフォルトの名無しさん:2005/12/26(月) 00:34:24
つかchar->intは拡大変換だから、
オーバーロードを解決する必要が無い限り暗黙にキャストしてくれるけどな。
748デフォルトの名無しさん:2005/12/26(月) 00:42:46
>>746
関数の引数のときじゃなくて、
    (int)obj
を行った時点で unboxing
749デフォルトの名無しさん:2005/12/26(月) 04:39:56
質問です。
Textbox.textで日本語を表示させると文字化けしてしまいました。
どうやら読み込んだテキストファイルがAsciiコードだった事が要因のようなのですが、解決法がわかりません・・・

文字化けを解決する方法がありましたら教えて頂きたいです、よろしくお願いします。
750デフォルトの名無しさん:2005/12/26(月) 06:33:39
>>749
標準は UTF-8 という文字コードで読み書きされるので、shift-jis 混じりのアスキーファイルを
読み書きしたいなら、文字コードを指定する。
使ってるWindowsの標準の文字コードなら次のように書く。
Dim xxx As StreamReader = New StreamReader("Test.txt", System.Text.Encoding.Default)
751デフォルトの名無しさん:2005/12/26(月) 06:47:11
>>750
Dimって(笑)、VBのコードで書いてしまったけど代替一緒だからかんべんな
752デフォルトの名無しさん:2005/12/26(月) 07:46:24
てっきりGotDotNetかドボンあたりにきたかと思ったぜ!
753デフォルトの名無しさん:2005/12/26(月) 13:05:17
C#で、例えばlbl1に背景の写真、その上にlbl2・3・4に文字を入れてfont設定とかして画面を作った後、
その画面イメージ(lbl1の範囲)を印刷する事って出来ないのでしょうか?

グラフィックス使って、imageとかFontとかを描画させれば、それをprintするように設定出来ますが、
lbl使った方が作りやすいのですが・・・。
754デフォルトの名無しさん:2005/12/26(月) 14:21:29
キャプチャして印刷じゃだめなの?

ttp://dobon.net/vb/dotnet/vb6/printform.html
755デフォルトの名無しさん:2005/12/26(月) 18:22:40
>>754
それでいってみます。印刷範囲の設定も簡単でうまく出来そうです。
756デフォルトの名無しさん:2005/12/26(月) 19:46:14
for ループの回し方について質問です。

static void Main()
{
    Type[] t = { typeof(int), typeof(char) };

    MemberInfo[][] mi = { t[0].GetMembers(), t[1].GetMembers() }; // ★1

    for (int i = 0; i < mi.Length; ++i)
    {
        foreach (object tmp in mi[i])
        {    
            System.Console.WriteLine(tmp);
        }
        System.Console.WriteLine("-----------");
    }
}

★1の部分はどう記述すべきなのでしょうか? 数が2つだからいいけど、沢山あったら大変ですよね

MemberInfo[][] mi = new MemberInfo[t.Length][];
for (int i = 0; i < t.Length; ++i)
mi[i] = t[i].GetMembers(); // ★2

こう書けばいいかとも思ったのですが、それでは ★2 の部分の戻り値が new で取られていたはずだから
★1の new が無効になってしまうのは勿体無いと感じるのです。
{ t[0].GetMembers(), t[1].GetMembers() } こう記述するしかないでしょうか
757デフォルトの名無しさん:2005/12/26(月) 20:31:29
new A[3][]
としたとき、作られるのは要素数3をもつ一個のA[][]インスタンスであって、A[]が作られることは無い。
758デフォルトの名無しさん:2005/12/26(月) 20:42:58
string[] a = new string[]{"hoge"};

string[] a = new string[1];
a[0] = "hoge";
はまったく同じだぜ。
759デフォルトの名無しさん:2005/12/26(月) 23:13:42
…★1 も ★2 も同じと理解しました

MemberInfo[][] mi = new MemberInfo[2][];
mi[0] = t[0].GetMembers();
mi[1] = t[1].GetMembers(); // ここで領域確保 & 初期化 が行われている…

ふむふむ。MemberInfoが2次元だから1次元目の領域も取られていないとおかしいと見たりしたけど、
よく考えればジャグ配列とかいうのだったんだ

>>757-758 Thank you! ありがとうございました
760デフォルトの名無しさん:2005/12/26(月) 23:37:43
 int id = 10;
 string str = "abc";
 System.Console.WriteLine("{0} それに ", id + " " + str);

のように string型 と int型の混合を一行で書きたいのですが、不可能でしょうか

 System.Console.Write("{0} それに ", id);
 System.Console.WriteLine(str);

と同じ結果になってはくれません(下の方が正しい結果)
761デフォルトの名無しさん:2005/12/26(月) 23:39:36
{1}を使えよ
762デフォルトの名無しさん:2005/12/26(月) 23:49:43
>>761
順番には何か関係があるのですか?
ttp://www-ise2.ise.eng.osaka-u.ac.jp/~iwanaga/study/csharp/st_variable.html
参考にさせていただいているサイトでも0から始まっています

ググり方がよくわからんです  WriteLine {0} 意味 ??? といった風で
763デフォルトの名無しさん:2005/12/26(月) 23:51:06
"{0} {1} それに", id, str
764デフォルトの名無しさん:2005/12/26(月) 23:53:22
>>763
それにの位置が違うぞw
765デフォルトの名無しさん:2005/12/27(火) 00:09:56
>>763
ありがとうございます {1} が str の引数に当たっていたということですね

>>764
僕のサンプルが屑だから仕方ないっす
766デフォルトの名無しさん:2005/12/27(火) 01:05:48
>>765
そのサイト内からまんまコピペ。

int m = 1, n =3;
Console.Write("m = {0}, n = {1}", m, n); // 文字や数値の出力

この出力の仕方はフォーマット出力といって、 {0} とある場所に m の値が、 {1} とある場所に n の値が書き込まれます。例えば上述のサンプルの出力結果は以下のようなものになります。

m = 1, n = 3
767デフォルトの名無しさん:2005/12/27(火) 11:18:57
C#2005でwebにアクセスしてhtmllDocumentでsubmitをクリックしたいのですが、
複数あると上手くいきません。
ググってもヘルプ見てもダメなのですが、いい手ないですか?
768デフォルトの名無しさん:2005/12/27(火) 13:59:00
>>750
しばらく外出しており亀レスになってしまいましたが解決しました。
ありがとうございました!
769デフォルトの名無しさん:2005/12/28(水) 22:03:49
interface IA
{
    void Write();
}
class A<TY> : IA
{
    public void Write()
    {}
    public static void Happy<T>()
    {}

}
class Gene<T1, T2> where T1 : IA where T2 : T1 where T2 : new() // ← エラー要因
{
    public void Osyougatu()
    { A<int>.Happy<int>(); }
}
class Hoge
{
    static void Main()
    {
        Gene<A<int>, A<int>> gn = new Gene<A<int>, A<int>>();
        gn.Osyougatu();
    }
}

型パラメータの制約でセカンダリ制約というのんの後に、コンストラクタは公開していなければ
ならない、という制約を続けて記述するすればにはどう良いのでしょうか
770769:2005/12/28(水) 22:06:02
むがっ・・・意味がわからなかったらスルーでオネガイシマス(汗
771デフォルトの名無しさん:2005/12/28(水) 22:31:19
>>769
class Gene<T1, T2> where T1 : IA where T2 : T1, new()

Microsoftのガイドラインでは、ジェネリック型パラメータの名前はTプリフィクスをつけた説明的な名前にせよ、と。
772デフォルトの名無しさん:2005/12/28(水) 23:05:09
>>771
Oh! privateコンストラクタをちゃんと弾いてくれる。感激!
Tプリフィックの件、以後注意します ありがとうございました
773デフォルトの名無しさん:2006/01/01(日) 20:30:20
あけおめ初投稿。

指定したサイズの中身がないビットマップファイルを生成するにはどうしたらよいのでしょうか?
774デフォルトの名無しさん:2006/01/01(日) 20:31:43
Bitmapをnewすればいいだろ。
ちょっとは考えろよ。
775デフォルトの名無しさん:2006/01/02(月) 04:29:39
うは、以下のしても、コンパイルできても何も表示されなくなった。
using System;
class Test{
public static void Main(){
Console.WriteLine("test");
}
}
ネットに散らばってる、Hello, World も壊滅w
凄すぎ。
年末まで、VSC# で色々作れてたのにw

とりあえず、Linux で起動しなして試してみよっと。
776デフォルトの名無しさん:2006/01/02(月) 11:06:40
チラシの裏にでも書いてろ
777デフォルトの名無しさん:2006/01/02(月) 20:21:02
>>775
酔いがさめてから出直せ
778デフォルトの名無しさん:2006/01/02(月) 21:05:47
Windowsアプリケーションになってるとか
779デフォルトの名無しさん:2006/01/02(月) 23:05:02
起動した子プロセスの標準出力についての質問です。
実行ファイルを子プロセスとして開始し、
標準出力をTextBoxに書き込み、また、別のTextBoxの内容を標準入力に書き込むような、
Cで書いたプログラムの実行テストをするツールを作っているのですが、

int main(){
int num;
printf("数字を入力>");
fflush(stdout);
scanf("%d", &num);
printf("%d*2 = %d", num, num*2);

return 0;
}

このような、対話処理を行うコードをコンパイルしたものを実行させようとすると、
最初の「数字を入力>」が表示されず、標準入力に入力を書き込んでやったときにはじめて「数字を入力」が表示されてしまいます。

プロセスを開始し、標準出力の読み出しを行う処理は
ttp://codezine.jp/a/article.aspx?aid=83
こちらのコードを参考に…というか、結果をテキストボックスに付け足しし、プロセスが終了するまでReadLineメソッドのループを繰り返すようにしている、以外の点はほぼ同じです。

コマンドプロンプトで実行するのと同じように、結果を取得するにはどのようにすればいいか、よろしければご教示ください。
780デフォルトの名無しさん:2006/01/02(月) 23:30:29
printfで出力されたのに改行が無いからReadLineが終了しない。
781779:2006/01/03(火) 00:35:16
>>780
ありがとうございます。
Readメソッドを利用するようにしたところ、思ったように動作するようになりました。

実装ミスがあって、別のところに問題が発生してしまいましたがなんとかなりそうです。
本当にありがとうございました。
782デフォルトの名無しさん:2006/01/11(水) 12:22:16
初心者すぎる質問ですいませんが、
C#のコードで
private void button1_Click(object sender, EventArgs e)
{

}
object sender, EventArgs eはなにを意味してるのでしょうか?
また、どういう時に使用するのでしょうか?
783デフォルトの名無しさん:2006/01/11(水) 12:28:08
>>782
senderは、たいていイベントの送信側そのもの
この場合なら(Button)にキャストすればクリックしたボタンが取得できる

EventArgsはイベントにくっついてきた情報がまとめて入ってる。
この場合は特に使い道ないけど、KeyDownとかなからキー情報が入ってるとかいろいろ。
784デフォルトの名無しさん:2006/01/11(水) 13:07:53
>>783
private void button1_Click(object sender, System.EventArgs e)
{
MessageBox.Show(sender.ToString());
}
こんな感じで取得できました。
ありがとうございました。
785デフォルトの名無しさん:2006/01/11(水) 14:17:16
>>782
ttp://msdn.microsoft.com/library/ja/cpgenref/html/cpconnetframeworkdesignguidelines.asp
MSDNの「クラスライブラリ 開発者向けのデザイン ガイドライン」
読んでないなら目を通しておけ。
786デフォルトの名無しさん:2006/01/11(水) 14:53:18
Visual C# expressを使ってます。
結果表示用にプロジェクト→ウィンドウズフォームの追加で新しいダイアログ
ResultDialogを追加しました。そして、そこにTextBoxを張り付け。
最初からあるForm1で検索結果表示用ダイアログを生成してそこに結果を表示
しようとしてTextBoxのメソッドを呼び出そうとしたら、TextBoxはResultDialogで
privateになっていてアクセスできません。対応として。

1)検索するためのデータをクラス外に出して、検索自体をResultDialogでやらせ
る。
2)検索結果をResultDialogに送って、そっちで表示させる。
3)検索するためのデータをResultDialogに送ってそっちで検索させる。
4)ResultBox内のTextBoxをpublicにする。
5)その他。

作法としてはどれがいいんでしょうか。
787デフォルトの名無しさん:2006/01/11(水) 14:53:33
現時点では呪文だと思っておけば問題ない。
788デフォルトの名無しさん:2006/01/11(水) 15:15:59
>>786
1と4以外。
2がベター。
789デフォルトの名無しさん:2006/01/11(水) 15:48:06
>>788
サンクスです。
790デフォルトの名無しさん:2006/01/11(水) 20:17:13
stringに入ってるパスがファイルかディレクトリかを判別するにはどうしたら
いいんでしょうか。
791デフォルトの名無しさん:2006/01/11(水) 20:31:10
File/DirectoryクラスのExistsで実在チェックするとか。
File.GetAttributesでディレクトリ属性の有無を確認、は存在しない場合のハンドリングが必要だからなー。
792デフォルトの名無しさん:2006/01/11(水) 20:45:05
>>791
なるほど。ありがとうございました。Existsでやっちゃえばいいのか。
ドロップしてきた物の判別なんで、存在しない場合は考えなくていいとは
思うんですが。
793デフォルトの名無しさん:2006/01/12(木) 00:27:50
>>792
> ドロップしてきた物の判別なんで、存在しない場合は考えなくていいとは
> 思うんですが。

普通はしないが、できなくは無いからな。
794デフォルトの名無しさん:2006/01/12(木) 00:33:58
792じゃないけど
え、どうやって?>>793
795デフォルトの名無しさん:2006/01/12(木) 00:35:40
ファイルを削除するタイマーを仕込む
ドラッグ開始
タイマー発動でファイル削除
ドロップ
796デフォルトの名無しさん:2006/01/12(木) 00:41:56
いや、普通にDataObject作れば良いじゃん?

DataObject obj = new DataObject(DataFormats.FileDrop, new string[]{"cd:\\hge"});
DoDragDrop(obj, DragDropEffects.Copy);
797デフォルトの名無しさん:2006/01/12(木) 01:26:20
メーラなんかについてる通知ウィンドウ?(メールが到着した時などに通知するために出す小さなウィンドウ)を作りたいんですが、みなさんどのように実装してますか?
子ウィンドウを予め用意しておいてVisibleをOn/Offでやるのが無難なんでしょうか・・・
何か変な事言ってたらごめんなさい
798デフォルトの名無しさん:2006/01/12(木) 01:32:23
>>797
だいたいそんな感じ。
Screenクラスか何かでデスクトップのサイズを取得できるのでそれでその子ウィンドウの位置を合わせて表示。

つか、CodeProjectあたりにそんなコード(Windows Messenger風)があるからそれを見てみたらどうだ。
799デフォルトの名無しさん:2006/01/12(木) 01:38:46
>>798
ありがとうございます
早速探してみます
800デフォルトの名無しさん:2006/01/12(木) 01:42:05
メッセの通知なら VB Power Pack があるじゃん
801デフォルトの名無しさん:2006/01/16(月) 21:19:12
>>800
それってVB以外でも使えるの?
802デフォルトの名無しさん:2006/01/16(月) 21:37:50
うむ
803801:2006/01/16(月) 21:57:38
>>802
適当にサーベイしてみた。
導入楽だし色々できるようで面白そうだね。
804デフォルトの名無しさん:2006/01/18(水) 01:23:24
フォームとマウスイベントについて教えてください。
あるフォームの上にマウスがある間だけ、特定の処理をしたいと思い、
FormのMouseEnterやMouseLeaveイベントを使ったのですが思うような動作になりません。
具体的には、Form1のフォームが見えている所では問題ないのですが、
Form上のTextBoxやButtonの上にマウスを移動した際にMouseLeaveイベントが
発生してしまうようなのです。
Form上に配置したコントロールに関係なく、マウスがForm上にあるか
判定するにはどうすれば良いでしょうか?
CursorやSystem.MousePozition?の位置情報を使って試してもみたのですが、
マウスを素早く動かした時などに確実に動かない場合がありまして・・・。
805デフォルトの名無しさん:2006/01/18(水) 02:42:33
>あるフォームの上にマウスがある間だけ、特定の処理をしたいと思い、

フォームがアクティブな時
フォームの範囲内にカーソルがある時
その両方

のどれかなんだろうけど。
どれ?
806デフォルトの名無しさん:2006/01/18(水) 08:23:55
>>805
804です。
「フォームがアクティブ かつ そのフォームの範囲内にカーソルがある間」
だけ特定の処理をしたいと考えております。
よろしくお願いします。
807デフォルトの名無しさん:2006/01/18(水) 11:05:04
>>806
Form.MouseMoveイベントだけで解決する気がするんだが。
ダメならその都度Form.DesktopBoundsやForm.Visible辺りでも使って条件分岐させるとか。
808デフォルトの名無しさん:2006/01/18(水) 22:35:56
>>807
MouseMoveの場合、フォーム内にカーソルがある時しかイベントが
発生しないようで、「フォーム外」という状態を判断できませんでした。

現在のところ、タイマーを配置して一定時間ごとにカーソルの位置を
取得して意図した動きをさせているのですが、他にスマートな方法は
無いでしょうか?
809デフォルトの名無しさん:2006/01/19(木) 15:47:05
C#プログラミング参考書で何かオススメ教えてください。
Cはかなり長い間仕事で使ってますが、専用マシンでWindowsプログラム
とかは初心者です。C++とかもさわり程度しかやってません。
810デフォルトの名無しさん:2006/01/20(金) 11:15:23
>>809
まずはここの「改訂版C#入門」
http://www.atmarkit.co.jp/channel/vbcs/vbcs.html
そしてMSDN
http://msdn2.microsoft.com/ja-jp/library/kx37x362(ja-jp,VS.80).aspx

Visual Studio 2005でポトペタ開発を体験すると感動すると思う。
811デフォルトの名無しさん:2006/01/20(金) 11:31:50
>>810
サンクスです。早速みてみます。
実は>>809=>>786=>>790で、すでにポトペタでデータDVD管理用のデータベースを
1本作ってみました。確かに感動しました。
812デフォルトの名無しさん:2006/01/20(金) 18:59:34
質問です。
List<T>の指定範囲をComparisonデリゲートでソートしたいんですがいい方法はないでしょうか。
単純な比較なのでIComparerを実装したクラスを作りたくはないのですが。

List.Sort()、Array.Sort() のどのオーバーロードもソート範囲とComparisonを同時に指定できないように
ないっています。
これって何か理由があるんでしょうか?
813デフォルトの名無しさん:2006/01/20(金) 23:36:03
単純な比較ならComparer<T>.Default使うとかな。
ま、無いんだったら仕方あるまい。どうせ数十文字の差だ。
814812:2006/01/21(土) 07:13:09
>>813
レスどうもです。
単純といってメンバの比較なのでComparer<T>.Defaultは使えないです。
仕方ないので新しいクラス作って比較することにします。
どうもありがとうございました。

#なんか仕様のところどころに手抜きを感じてしまう・・・
815デフォルトの名無しさん:2006/01/21(土) 11:31:49
List<T>のGetRangeとRemoveRangeとInsert使ったら?
816812:2006/01/21(土) 17:44:03
>>815
うーんそれだとコピーする必要があるのでオーバーヘッドが
馬鹿にならなそうです。
今回はIComparer<T>を継承する方法にします。
レスどうもありがとうございました。
817デフォルトの名無しさん:2006/01/24(火) 11:54:07
spy++等でウィンドウのクラス名とか見れますが、VCSexpressで作った自分のアプリの
クラス名見たら、なんだかよくわからないながーい名前が付いてました。
これってデフォルトの自動生成名でしょうか。
また、自分で名前付けたい時はどこで設定すればいいんでしょうか。
818デフォルトの名無しさん:2006/01/24(火) 13:15:24
.NETの場合、ウィンドウクラス名を自分で決めるのは基本的にできない。
色々無茶をすれば不可能ではないけれど。
819デフォルトの名無しさん:2006/01/24(火) 13:40:09
そうなんですか。残念。
820デフォルトの名無しさん:2006/01/24(火) 22:22:50
やっとクラスの使い方が分かってきた。
頭の中でアルキメデスがエウレカ!と叫んでる気がする。
821デフォルトの名無しさん:2006/01/24(火) 22:53:03
裸で走り回れ。
822デフォルトの名無しさん:2006/01/25(水) 01:17:44
>>821
よく知ってたなw スルー覚悟の発言だったとのだがw
823デフォルトの名無しさん:2006/01/25(水) 10:45:45
>>822
小学生の時にぴっぽ君のひみつシリーズで読んだ。
824デフォルトの名無しさん:2006/01/27(金) 01:13:31
delegate void Hoge(); this.Invoke(new Hoger(hmm));
delegateを使ってみて思ったのですが、呼ぶたび関数から生成するのは
コンパイラがなんとかしてくれているのでしょうか?
フォームとかにインスタンスを持たせると少し早くなる気もするのですが
825デフォルトの名無しさん:2006/01/27(金) 01:17:35
インスタンスの生成コストなんざゴミみたいなもんだ
826デフォルトの名無しさん:2006/01/28(土) 13:25:10
起動時にプラグインを読み込むプログラム(統合ツール)を作っているのですが、
プラグインによっては初期処理に結構な時間が掛かってしまいます。
そこで、Eclipseのようにプラグインの読み込み状況をスプラッシュウィンドウの
プログレスバー(?)で表示させたいと考えています。
どのようにすれば読み込み状況をバーに反映させられますか?
827デフォルトの名無しさん:2006/01/28(土) 13:34:31
何がわからんのかわからんけど、
1つ完了するたびにプログレスバーを更新すればいいのでは
828デフォルトの名無しさん:2006/01/28(土) 14:14:30
ありがとうです
829デフォルトの名無しさん:2006/01/28(土) 15:14:05
passmieみたいに他のプロセスのウィンドウのプロパティ変更とかって
どうやるんですか?
全部SendMessage()とかのメッセージでなんとかなるもんなんですか?
830デフォルトの名無しさん:2006/01/28(土) 15:23:56
ほかにもSetWindowLongとかいろいろある
が.NETとは無関係の話だな
831デフォルトの名無しさん:2006/01/28(土) 15:25:45
>>830
SetWindowLong()って、他プロセスだとそのまま使えないんじゃない?
832デフォルトの名無しさん:2006/01/28(土) 16:53:02
C#初心者ですが、教えて下さい
構造体のリストを定義してリスト内の
要素を直接変更することは可能でしょうか?
例えば、
 struct TestRec {
  public int i;
  public string s;
 }
みたいな構造体があって、

TestRec rec;
List<TestRec> lst = new List<TestRec>();

rec.i=1; rec.s = "Hoge";
lst.Add(rec);

lst[0].i = 100; // こいうことがしたい

std::vectorの感覚でやりたいのですが
833デフォルトの名無しさん:2006/01/28(土) 16:56:16
クラス(参照型)にすれば?
834832:2006/01/28(土) 17:02:54
>>833

あ、できました
なるほど、値型だから無理だったんですね
ありがとうございました。
835デフォルトの名無しさん:2006/01/28(土) 20:27:00
ほぉ、Listは値型だと駄目なのか。
なんかうまいことやってくれんのかと思ってたんだが、
そうはいかないのか。
836デフォルトの名無しさん:2006/01/28(土) 20:30:17
値型の動作を考えれば当然のことじゃんか
837デフォルトの名無しさん:2006/01/28(土) 21:42:19
ListViewの詳細表示で特定の列の文字列の色だけ変更したいのですが
ListView.OwnerDraw = true;
DrawSubItem(...) { e.DrawDefault = true; }
DrawColumnHeader(...) { e.DrawDefault = true; }
ここまでで特定の列の色は変わったんですが
ListView.Item[hoge].ForeColorの色を他のSubItemに反映させたいのですが
どうすればよいでしょうか?
838デフォルトの名無しさん:2006/01/28(土) 21:56:37
色かえるだけなら、わざわざオーナードローせずとも
それぞれのListViewItem/ListViewSubItemのForeColor変更するだけでいけるはずだが。

まあそれぞれのListViewSubItemのForeColor変更すれ。
ListViewSubItemの派生クラスつくってコンストラクタで設定したりするとちょっと楽だぞ。
839デフォルトの名無しさん:2006/01/28(土) 22:04:53
>>838
やってみれば分かると思いますが
ListViewSubItemのForeColorを変更しても
ListViewItemのForeColorで描画されてしまいます。
840デフォルトの名無しさん:2006/01/28(土) 22:06:02
ひょっとしてListViewItem.UseItemStyleForSubItemsを知らないせいかね?>オーナードロー
841デフォルトの名無しさん:2006/01/28(土) 22:07:57
>>840
そんなプロパティあったんですか・・・orz
842デフォルトの名無しさん:2006/01/28(土) 22:09:08
ListViewSubItemの各スタイル用プロパティのヘルプにも一々書いてるんだけどなw
843デフォルトの名無しさん:2006/01/28(土) 22:14:14
>>842
いやー。VS2003からずっとC#やってるんですが初めて知りましたわ・・・
844デフォルトの名無しさん:2006/01/29(日) 00:29:05
C#勉強中のものです。以下のコードについてどなたか解説お願いします。
Sessionに"PARAM_KEY"というHashtable型の配列を追加して、
その中の"URL_LIST"というキーを削除するコードです。
ここでRemoveSessionParamの中でtableのキーを削除するだけで、
Sessionの中の"PARAM_KEY"の中の"URL_LIST"が削除される理屈が理解できません。
何について勉強すればよいかの手がかりだけでも教えていただけたらとおもいます。
初心者なのでお手柔らかにお願いします。

RemoveSessionParam("URL_LIST");

protected void RemoveSessionParam(string strKey)
{
Hashtable table = GetParamHash();

if (table.ContainsKey(strKey))
table.Remove(strKey);
}

protected Hashtable GetParamHash()
{
Hashtable table = new Hashtable();

Object objPara = Session["PARAM_KEY"];

if (objPara != null)
table = (Hashtable)objPara;

return table;
}

845デフォルトの名無しさん:2006/01/29(日) 00:36:43
じゃあどういう意図でこのコードを書いたんだと。
んー、「参照型」?
インスタンスつまり実体は一つでそれの参照を渡しあってるということなんだが。
846デフォルトの名無しさん:2006/01/29(日) 00:49:13
>>845
早速のお返事ありがとうございます。
すみません。会社の資産で勉強してたのですが、
これを書いた人がもう会社にいないので、一人で悩んでたところでした。

Hashtable型、Object型は参照型で、

> Hashtable table = GetParamHash();
> Object objPara = Session["PARAM_KEY"];

は参照渡しになっているという理解で間違いないでしょうか?
もしお時間があれば添削よろしくお願いします。
847デフォルトの名無しさん:2006/01/29(日) 00:55:23
参照型/値型と参照渡し/値渡しは別物だけどな。
この場合は参照型の値渡し。この場合の値ってのはつまり参照の値、平たく言えばアドレスの値だ。

ま、Session["PARAM_KEY"]とobjParaとtableが同じ実体を指しているってことだ。

//GetParamHash呼ぶたびに毎回Hashtableのインスタンスを作るってのはどうなんだろう。
//存在しない場合はnullを返して、呼び出し側でnullチェックってのが自然だと思うんだが……。
848844:2006/01/29(日) 01:06:31
>>847
たびたびありがとうございます。

> ま、Session["PARAM_KEY"]とobjParaとtableが同じ実体を指しているってことだ。

この一文で、だいぶ明るくなりました。
教えていただいたキーワードを元に勉強してみます。

コメントしていただいている内容について、
Hashtable table = new Hashtable();

if (objPara != null)
の後に書けば、Sessionにキーが見つからなかったときに
余計なインスタンスを作成せずに済む・・・ということでよろしいでしょうか?

ついでといっては何ですがこの点についてもお付き合いいただければと思います。
849デフォルトの名無しさん:2006/01/29(日) 01:27:27
んーとだな。
GetParamHashメソッドは、Session変数の中の"PARAM_KEY"をキーにしたオブジェクトを返すと思われるメソッドだ。
現在の実装では、もし"PARAM_KEY"にオブジェクトがない場合、新しいHashtableのインスタンスを返している。
そのため、このGetParamHashメソッドの呼び出し側、この例ではRemoveSessionParamメソッドは、
このメソッドを呼んだときに必ずHashtableが返ることは保証されているといっていい。
だから直接返ったオブジェクトのContainsKeyメソッドを呼び出している。
がしかし、毎回インスタンスを作るってのはまあメモリとか処理速度とかが犠牲になるわけだ。
//この例ではそれがボトルネックになることはないだろうから、この実装もそれはそれでありだろう。
//Nullオブジェクトパターンに近いかな。

仕様としては、"PARAM_KEY"にオブジェクトがない場合nullを返す、という方が自然だと考えることもある。
GetParamHashがnullを返しうるのなら、呼び出し元(RemoveSessionParam)は返り値がnullかどうかをチェックする必要がある。
もしnullならContainsKeyの呼び出しも当然失敗(例外が発生)するからだ。
この場合上のパターンとは違って呼び出し元が返り値のチェックをしなければならないという制約がかかるが、
代わりにわざわざ無駄なインスタンスを生成する必要がなくなるというメリットがある。

もう一つ重要なのは、最初のパターンでは呼び出し元が返ってきたHashtableが果たして"PARAM_KEY"にあったのか新しく作られたものなのか判断できないことだ。
例えばこの返り値に新しくキーと値を入れて"PARAM_KEY"に「入れたつもり」になってしまう可能性がある。
もちろん、新しく作って返されたHashtableの場合は"PARAM_KEY"とは別インスタンスになるのだから、"PARAM_KEY"には入らない。

ま、
> Hashtable table = new Hashtable();
> を
> if (objPara != null)
> の後に書けば、Sessionにキーが見つからなかったときに
> 余計なインスタンスを作成せずに済む・・・ということでよろしいでしょうか?
これは最初のパターンにするにしても妥当な改造だろうね。
850844:2006/01/29(日) 01:48:15
>>849
こんなに遅い時間に何度も分かりやすく丁寧に解説していただいて、大変感謝しております。
いただいたレスを宝物にして勉強します。
ありがとうございました。
851デフォルトの名無しさん:2006/01/29(日) 12:42:55
SendMessage(hwnd, WM_SETTEXT, 文字列のサイズ. 文字列のポインタ);
を使おうと思ったんですが、string型をどうやって文字列のポインタにしたものか
よくわかりません。
Marshalとか使うしかないんですか?
852デフォルトの名無しさん:2006/01/29(日) 14:08:46
>>851

string ss = "文字列";
IntPtr lpsz = Marshal.StringToHGlobalAnsi(ss);
SendMessage(hWnd, WM_SETTEXT, 0, (uint)lpsz);

でいけた
853デフォルトの名無しさん:2006/01/29(日) 14:55:18
C#でDIBを扱いたいんですが超単純なサンプルはありますか?
もしくは参考になるサイトなどなんでも
854デフォルトの名無しさん:2006/01/29(日) 15:29:42
>>852
サンクス。試してみます。.NETなんですが、これってセキュリティーパーミッション
いじくらないと使えないっすよね。やったことないんで、ちょっち調べてみます。
855デフォルトの名無しさん:2006/01/29(日) 15:48:35
あ、
Marshal.StringToHGlobalAnsi(ss).ToPointer()
とかにしなければオッケーだった。
サンクスです。ネットで検索しても例が殆どないんで、めっちゃ悩んでた。
856デフォルトの名無しさん:2006/01/29(日) 21:12:52
Marshal.FreeHGlobalを忘れるなよ。
857デフォルトの名無しさん:2006/01/29(日) 21:48:51
ありがと。忘れてた。というか、最初はつけてたんだけど、いろいろテストしてる
間に削ってた。 _| ̄|○
858デフォルトの名無しさん:2006/01/29(日) 22:41:35
IntPtr hBitmap = bm.GetHbitmap();

この後ってDeleteObjectは必須なのでしょうか?
859デフォルトの名無しさん:2006/01/29(日) 22:43:48
タスクマネージャでリークしてるかどうか監視してみれば?
860デフォルトの名無しさん:2006/01/29(日) 23:38:50
>>859
リークしてなきゃ今後もリークしない保障がありますか?
861デフォルトの名無しさん:2006/01/30(月) 00:22:38
>>858
GDI ビットマップ オブジェクトが使用するメモリを解放するために、DeleteObject を呼び出す必要があります。
とMSDNに書いてあるが。
862デフォルトの名無しさん:2006/01/30(月) 00:36:24
おまえはMSDNに書いてあることを全て鵜呑みにする気なのか!
MSDNに氏ねと書いてあったら潔く氏ぬのか!

……って一瞬思っちゃったゴメンorz
863デフォルトの名無しさん:2006/01/30(月) 08:31:16
>>862
面白かったw
864デフォルトの名無しさん:2006/01/30(月) 10:52:00
>>858
やってみりゃわかる。
DeleteObjectしないと物凄いメモリリークを起こすぞ。
865デフォルトの名無しさん:2006/01/30(月) 20:56:44
なんでDeleteObjectは標準で用意されていないんですか?
866デフォルトの名無しさん:2006/01/30(月) 21:20:21
そんなもんがあったらC#を使う意味が薄れる
867デフォルトの名無しさん:2006/01/30(月) 21:28:28
けど実際になくて困ってる人がいますよね
868デフォルトの名無しさん:2006/01/30(月) 22:21:18
DeleteObjectを使うようなコードを書く人はDeleteObjectを知っている。
DeleteObjectを知らない人はDeleteObjectを使うようなコードを書いてはならない。
869デフォルトの名無しさん:2006/01/31(火) 00:41:32
MSNMessengerのオン/オフの状態を
表示してるツリービューみたいなコンポーネントないですかね?

自分で作れるんなら作りますが如何せん
どこをどうすればいいのか分からないので・・・

TreeNodeを継承したコントロール作って
カスタム描画→ツリービューへぶち込みでいけますか?
870デフォルトの名無しさん:2006/01/31(火) 00:55:28
よくわからんが、ノードの文字列の左にイメージを表示したいってこと?
それならTreeView.ImageListとTreeNode.ImageIndexでいけるけど。
871デフォルトの名無しさん:2006/01/31(火) 00:57:46
>>870
イメージではなくテキストを2行表示したいんです。
872デフォルトの名無しさん:2006/01/31(火) 01:19:00
ならオーナードローだね。
2.0ならDrawModeプロパティで簡単にできるけど、1.0/1.1だとめんどくさそうだな。
873デフォルトの名無しさん:2006/01/31(火) 22:02:17
BitmapDataってどうやれば使えるようになりますか?
874デフォルトの名無しさん:2006/01/31(火) 22:05:48
Bitmap.LockBitsする
使い終わったらBitmap.UnlockBits
875デフォルトの名無しさん:2006/01/31(火) 23:04:21
BitmapData使えたけどなぜかSetPixelのほうが早い
使い方間違ってる気がする
誰か使い方教えてください
876デフォルトの名無しさん:2006/01/31(火) 23:08:48
どう使ってるかも分からんのに。
大体サンプルならちょっと検索すれば出てくるだろ。
877デフォルトの名無しさん:2006/01/31(火) 23:11:36
>>876
int i, j, ofs, bw;
byte r, g, b;

bmp = new Bitmap(256, 256, System.Drawing.Imaging.PixelFormat.Format24bppRgb);

BitmapData BD;

BD = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), System.Drawing.Imaging.ImageLockMode.ReadWrite, bmp.PixelFormat);

bP = BD.Scan0;
r = 20;
g = 40;
b = 60;

bw = BD.Stride / BD.Width;
for (i = 0; i < bmp.Width; i++)
{
for (j = 0; j < bmp.Height; j++)
{
ofs = BD.Stride * i + j * bw;
Marshal.WriteByte(bP, ofs + 0, b);
Marshal.WriteByte(bP, ofs + 1, g);
Marshal.WriteByte(bP, ofs + 2, r);
}
}
bmp.UnlockBits(BD);
pea.Graphics.DrawImage(bmp, 0, 0, bmp.Width, bmp.Height);

大体こんな感じ。どっかのサイトをほぼそのままパクったんですけど。
878デフォルトの名無しさん:2006/01/31(火) 23:34:58
そのままコピペしただけでも全ピクセルにSetPixelするより6〜8倍早かったが。

まるでCみたいなコードだなしかし。
4バイト境界考慮して無かったりと微妙。
879デフォルトの名無しさん:2006/02/01(水) 01:09:14
>>878
>まるでCみたいなコードだなしかし。
すいません。もともとVBソースを即興で変換しただけなんで。

>そのままコピペしただけでも全ピクセルにSetPixelするより6〜8倍早かったが。
おかしいな。何秒くらい表示にかかります?

上のソースで5秒くらい。SetPixelで4秒くらいなんですけど。うちの環境で。
880デフォルトの名無しさん:2006/02/01(水) 01:27:21
256x256でSetPixelで200ms、LockBitsしたら35ms程度だな。
1000x1000だと3000ms/520ms程度。
881デフォルトの名無しさん:2006/02/01(水) 01:59:44
すいません、ようやくわかりました。
VC#から実行してちゃだめなんですね。
出来上がった実行ファイルを起動したらちゃんと行きました。
882デフォルトの名無しさん:2006/02/01(水) 12:53:06
ここだと LockBits() のほうが100倍以上速いな。

http://junki.main.jp/csgr/002ColorDataAccess1.htm
883デフォルトの名無しさん:2006/02/01(水) 23:31:57
イベントに対する動作じゃなくて、たとえば常に何かをポーリングしたい時とか、
どういう風に書くもんなんですか?
884デフォルトの名無しさん:2006/02/01(水) 23:36:32
どういう風にといわれても。
ループ回せば良いんじゃね?
抽象的過ぎると答えづらい。
885デフォルトの名無しさん:2006/02/02(木) 00:04:13
すまんす。
つまり、メインループは大本ダイアログ起動して行きっぱなしだし、大本ダイアログは
イニシャライズが終わったらイベント待ちで、要はアイドルループはどこでやってる
んだろうかと。
886デフォルトの名無しさん:2006/02/02(木) 00:05:09
ちなみに、VCSexpressです。
887デフォルトの名無しさん:2006/02/02(木) 00:11:19
アイドルループ?
メッセージループがどう実装されているかってこと?
ループの中で呼び出すGetMessage関数がメッセージが来るまで待機するんだけど。
888デフォルトの名無しさん:2006/02/02(木) 00:15:19
そのメッセージループが隠蔽されてて、表に出てないんですよ。
static class Program
{
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
メインはこんなんで、ループしてるとこがどこにもなくて。
889デフォルトの名無しさん:2006/02/02(木) 00:20:21
Application.Run() のなかにある。Application には Idle イベントがあるはず。
890デフォルトの名無しさん:2006/02/02(木) 00:25:52
>>889
これ使えるのかどうかわかんないんですが、解説ではアプリの処理が完了した時に
呼ばれるとだけあって、ポーリングには使えなさそうだったんで。
あと、これ使うとしたらデリゲートで呼び出してもらうんですか?
891デフォルトの名無しさん:2006/02/02(木) 00:41:06
そう。ポーリングはタイマにしたら。
892デフォルトの名無しさん:2006/02/02(木) 01:05:46
タイマで起動するのが一番よさげですね。
まあ、タイマセットして定期的に呼び出してもらう方法もわかんないんですが、
タイマ関係はまだ全然見てないんでもう少しいろいろ調べてみます。
893デフォルトの名無しさん:2006/02/06(月) 02:02:23
Application.Run(new Form1());
の代わりに
Form1 form = new Form1();
form.Show();
ってして止まらないようにして、メインループ作ってる人がいたな。
894デフォルトの名無しさん:2006/02/06(月) 02:08:45
連続スマソ……って言わなきゃ分かんないのか。
これだ↓。

static void Main() {
Form1 form = new Form1();
form.Show();

while (form.Created) {
// フレーム処理
Application.DoEvents();
}
}

これにどんな副作用があるのかは分からない。
895デフォルトの名無しさん:2006/02/06(月) 03:28:14
Main に Application.Run を複数書いたらそこらじゅうでおかしな動作をしたことならあった
896デフォルトの名無しさん:2006/02/06(月) 14:29:35
おもいっきり自動生成コードの部分だしねー。
897デフォルトの名無しさん:2006/02/07(火) 22:04:35
NotifyIconのShowBalloonTipについてですが
MSDNには最小タイムアウトは10秒とか書いてあるんですが
それより短くしたい(意図的に閉じたい)場合はどうすればいいでしょうか?
898デフォルトの名無しさん:2006/02/08(水) 10:40:59
Application.Runの前に「ログインフォームを出したい」とか言って
別なフォームをShowDialogとかしてるのをよく見る。これはいいとおもう?
俺的にはメインフォームがアイドルになった時点で出すものだと思うんだけど。
899デフォルトの名無しさん:2006/02/08(水) 15:13:20
いいと思うよ。
900デフォルトの名無しさん:2006/02/12(日) 23:39:30
JRはC#で.ネット環境で開発してるんですか?
901デフォルトの名無しさん:2006/02/12(日) 23:40:53
いきなりソースのないこと言われても困る
902デフォルトの名無しさん:2006/02/15(水) 21:17:51
int[] test = new int[3];

test[0] = 11;
test[1] = 13;
test[2] = 15;

Console.WriteLine("{0}", test[0]);

int* a;
a = (int*)test[0];
a = a + 1;

上のプログラムで結果が

11
15

となるのは、そんなもんなのでしょうか?

Console.WriteLine("{0}", (int)a);
903修正:2006/02/15(水) 21:18:39
int[] test = new int[3];

test[0] = 11;
test[1] = 13;
test[2] = 15;

Console.WriteLine("{0}", test[0]);

int* a;
a = (int*)test[0];
a = a + 1;

Console.WriteLine("{0}", (int)a);

上のプログラムで結果が

11
15

となるのは、そんなもんなのでしょうか?
904デフォルトの名無しさん:2006/02/15(水) 21:29:06
なんの意味がある計算なのかさっぱり分からんが。
11バイト目からInt32一つ分先に進めれば15バイト目になるのは当然だな。
905デフォルトの名無しさん:2006/02/15(水) 21:31:34
>>903
初めて見たんですけど「int*」これって何ですか?
906903:2006/02/15(水) 21:42:05
aに1足したら13になると思ってたんですけど
何か思い違いしてるなぁ
誰か指摘して
907デフォルトの名無しさん:2006/02/15(水) 21:47:09
君が期待しているのはこういう事なんだろうな。

int[] test = {11, 13, 15};
fixed (int* a = test) {
    Console.WriteLine("{0}", *(a + 1));
}

・.NETの配列をポインタにするには fixed ステートメントを使わないといけない
・ポインタが指す値を取得するのには * 演算子が必要。
・このサンプルで a は変更不可なので、どうしてもこの値を変更したいのなら別ポインタにコピーする。
908903:2006/02/15(水) 21:49:00
ものすごく感謝です!!
一生下僕と呼んでください
909デフォルトの名無しさん:2006/02/15(水) 21:53:39
試してみたが面白いな。

a = a + 2; にしたら19
a = a + 3; にしたら23

long* a; にしたら8ずつ増える。

バイト数がそのままtest[0]の中の値に足されてた。
910デフォルトの名無しさん:2006/02/15(水) 22:23:12
つか、C#でポインタは使わない方がいいだろ。
少なくとも初心者のうちは。
C++ならいいけど。
911デフォルトの名無しさん:2006/02/15(水) 23:10:49
今からC#の勉強をはじめたいのですが
1.1と2.0どっちからはじめたほうがいいでしょうか?
2.0をダウンロードして本屋にいってみるとまだ売ってないみたいなんです
新しいほうがいい気もするし本を買うのだったらバージョンを合わせたほうがいい気もするし
迷っています
先輩方のアドバイスよろしくおねがいしますm(_ _)m
912デフォルトの名無しさん:2006/02/15(水) 23:14:55
>>911
2.0
913デフォルトの名無しさん:2006/02/15(水) 23:21:34
画像を扱うようなクラスを作成するとき
widthやheightはintとuintとどちらを使うべきですか?
気分的にはuint何ですけどいろんなサイトや本では
intが使用されているのであわせるべきかなぁと思ったり。
914デフォルトの名無しさん:2006/02/15(水) 23:27:13
uint(UInt32)はCLS非準拠なので、他の言語から扱えない可能性がある。
.NETにおいては問題なかろうけど。
915911:2006/02/15(水) 23:31:44
>>912
ありがとうございます
思い切って2.0からはじめようと思います
916デフォルトの名無しさん:2006/02/16(木) 00:05:47
しかし、それってC#のバージョンじゃなくて.NETframeworkのバージョンだろ。
2.0のがいいのはおれも同じくだけど。
917デフォルトの名無しさん:2006/02/16(木) 02:40:52
.NET2.0の正規表現の質問です。
正規表現で、ある文字(日本語)の前までを抽出する方法はありますか?
Matchメソッドを2回使わないとだめでしょうか?

例えば、入力文字列の中で「12,345円」という形式の文字列を抽出したいときは
Regex reg = new Regex(@"[,0-9]+円");
とすれば、数字(金額)の部分だけ抽出できますが、「円」を抜いた
数字だけを一発で抽出したいのです。

円ではなく、英数字のaの場合、Regex reg = new Regex(@"[,0-9]+[^a]");
とすればいいのですが、日本語の場合それもできません。
どのようにすればスマートに処理できますか?よろしくお願いします。
918デフォルトの名無しさん:2006/02/16(木) 02:56:47
・グループ化
Regex regex = new Regex("([,0-9]+)円");
Console.WriteLine(regex.Match("12,345円").Groups[1].Value);

・名前付きグループ化
Regex regex = new Regex("(?<price>[,0-9]+)円");
Console.WriteLine(regex.Match("12,345円").Groups["price"].Value);

・ゼロ幅先読みアサーション
Regex regex = new Regex("[,0-9]+(?=円)");
Console.WriteLine(regex.Match("12,345円").Value);
919デフォルトの名無しさん:2006/02/16(木) 02:58:57
>>917
> 円ではなく、英数字のaの場合、Regex reg = new Regex(@"[,0-9]+[^a]");
> とすればいいのですが、日本語の場合それもできません。
いや、すれば良いんだが。
920デフォルトの名無しさん:2006/02/16(木) 03:10:41
>>918-919
ありがとうございます

>>918
ありがとうございます!しかも3つも
目から鱗ですた

>>919
Regex reg = new Regex(@"[,0-9]+[^円]");
を試してみたらぜんぜんだめぽかったので、[^ ]の中は
日本語NGと思いこみましたがいけるケースもあるんですか。難しい。。
921デフォルトの名無しさん:2006/02/16(木) 05:21:23
>>920
そもそも金額を示す部分の数字を抜き出したいってことなら、
Regex(@"[,0-9]+[^円]");
ではダメだろ。これだと"12,345円"を数字から全て弾いてしまう。
数字 + 円以外の一文字部分って意味になる。
922デフォルトの名無しさん:2006/02/16(木) 10:30:41
>>921
> これだと"12,345円"を数字から全て弾いてしまう。
の意味が良く分からんが、
Console.WriteLine(Regex.Match("これは12,345ドル", @"[,0-9]+[^円]"));
だと「12,345ド」がマッチしちゃうからダメよんってことが言いたいのか?
923921:2006/02/16(木) 11:31:20
>>922
「タマゴは1パック120円です」
を [,0-9]+[^円] でマッチさせた場合、
「1パ」はヒットするが肝心の「120円」はヒットしないよ。

ってことです。「円」だけ取り除いた「120」が欲しいって
ことだったんでしょ。
924921:2006/02/16(木) 11:36:27
補足。
答えは>>918氏のところででている。俺は、

>>920
> 日本語NGと思いこみましたがいけるケースもあるんですか。難しい。。

のところ、そもそも正規表現が間違ってんじゃんっていいたかったわけ。
925デフォルトの名無しさん:2006/02/16(木) 12:08:17
>>923-924
正規表現が間違ってるのは確かにその通りなんだが、
120円の120にはヒットするでしょ。「0」は「円」じゃないから。
1円の1にはヒットしないけど。
926921:2006/02/16(木) 12:45:26
>>925
あーっ、吊ってくる...
927デフォルトの名無しさん:2006/02/16(木) 12:57:10
モヤシは1袋10円です
928デフォルトの名無しさん:2006/02/16(木) 13:58:35
(産地:中国)
929デフォルトの名無しさん:2006/02/16(木) 17:42:43
質問なんですが、
どの程度実力が付けばここでタメ口で質問してよくなるでしょうか?
930デフォルトの名無しさん:2006/02/16(木) 17:45:39
MVPでも質問するときは敬語使うと思いますよ。
931デフォルトの名無しさん:2006/02/16(木) 17:55:58
相手を敬って語る。
コミュニケーションの基本でしょ。
932デフォルトの名無しさん:2006/02/16(木) 21:05:03
皆さんは自クラスのフィールド、プロパティ、メソッドを呼び出すときに
頭に「this.」をつけますか?
うちのプロジェクトではつけるのを強制されてます・・・
933デフォルトの名無しさん:2006/02/16(木) 21:09:13
全部付ける
@ITにも一昨日にスレが立ってたな(そっちではMeだが)
ttp://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=28369&forum=7&32
934デフォルトの名無しさん:2006/02/16(木) 21:10:42
俺もつけるな。
インテリセンス効くし。
935デフォルトの名無しさん:2006/02/16(木) 21:20:36
必ず this よ
936932:2006/02/16(木) 21:40:37
>>933
リンク先でもつける派が多いですね。
分かりやすい、バグが入りにくいのはその通りだと思うのですが、
見づらいんだよな・・・
メソッドが長いとメリットのほうが大きいと思うけど、
昨今のメソッド短めコーディングだとメリット小さいと思う。
けど少数派か。。。
937デフォルトの名無しさん:2006/02/16(木) 21:46:48
俺の場合、C++ でも this-> とするのが習慣になってる。
グローバルは :hoge で。インテリセンス目的もあるが、何処に
所属するのか分かると、メンテナンスもし易いと思う。
フィールドをやっぱアクセサにするか、という時など特に。
938デフォルトの名無しさん:2006/02/16(木) 21:51:31
静的メンバにアクセスするときもクラス姪を必ずつけるぜ
939デフォルトの名無しさん:2006/02/16(木) 21:52:50
継承元クラスのメンバを使うときには付けてます。
自身のクラスで作ったものには付けてないですね。
940デフォルトの名無しさん:2006/02/16(木) 21:54:11
すみません
プロパティっていう機能は何の利点があるんですか?
メンバー変数をpublicと宣言するのとどう違うのですか
941デフォルトの名無しさん:2006/02/16(木) 21:57:26
エラーチェックとかができる
942デフォルトの名無しさん:2006/02/16(木) 23:29:21
読み取り専用にできる
943デフォルトの名無しさん:2006/02/16(木) 23:49:53
メンバ変数にアクセスするより、高度なことがで set get でできる。
実際メンバ変数に直接関係ないプロパティーも多い。
944デフォルトの名無しさん:2006/02/17(金) 00:25:03
WMPをフォームに貼り付けるとショートカットキー(たとえばCtrl+P)が
WMPに取られてしまうのですが、ContextStripへ渡す方法はないでしょうか?

WMPのKeyPressイベントにそれなりの処理を書いても
F9などのキーでは反応してくれませんでした。
945デフォルトの名無しさん:2006/02/17(金) 01:03:15
>>944
ActiveXが絡むとややこしいな。

Form1(1かどうかは知らんけど)にIMessageFilterを実装して、
Form1のコンストラクタでApplication.AddMessageFilter(this)。
PreFilterMessageでは、m.Msgが0x100から0x108まで(だと思う)の時にthis.WndProc(ref m)してtrueを返す。
それ以外の場合はfalseを返す。

という乱暴なのはどうだ。
946デフォルトの名無しさん:2006/02/17(金) 13:34:00
stviewコントロールで、各項目の高さの変更は
どうすればいいのでしょうか?
Heightプロパティがなくて困っています
947デフォルトの名無しさん:2006/02/17(金) 15:00:14
無理
DataGridViewでも使え
948デフォルトの名無しさん:2006/02/17(金) 17:33:00
>>945
詳しいことはよく分かりませんが、とりあえずやってみます。

>>946
DetailモードだとStateImageListにImageList設定して
そのImageListのHeight変更すればいけたような・・・
949デフォルトの名無しさん:2006/02/17(金) 21:39:01
自作クラスのインスタンス破棄の方法はどの様にするのですか?
using( ){ }で、自動的にdispose()したいと考えているのですが・・・
どなたか教えてください。m(・ω・`m)
950デフォルトの名無しさん:2006/02/17(金) 21:45:20
まず「インスタンス破棄」の指す意味を聞こうか。
951デフォルトの名無しさん:2006/02/17(金) 21:56:27
IDisposableを実装
外部とやりとりするようなクラスの他は大抵GCに任せとけばいいけど
952デフォルトの名無しさん:2006/02/17(金) 23:08:42
>>947
>>948
やってみます
953デフォルトの名無しさん:2006/02/17(金) 23:13:28
実装ってこう?
public class myClass : IDisposable
でも、
インターフェイス メンバ 'System.IDisposable.Dispose()' を実装しません。
と、怒られた... (´_`ヽ)
954デフォルトの名無しさん:2006/02/17(金) 23:18:52
インターフェイスについてヘルプを熟読しる
955デフォルトの名無しさん:2006/02/18(土) 00:39:37
>>953
>インターフェイス メンバ 'System.IDisposable.Dispose()' を実装しません。
Dispose()を実装すればいいんでない?
と勘で言ってみるどうか?
956デフォルトの名無しさん:2006/02/18(土) 01:00:48
>>945
PreFilterMessageでWM_KEYDOWNからWM_KEYLASTまでを
判別して WndProc(ref m) するようなコードは書いたんですが
いまいち WndProc(ref m) の意味が分かりません。
WndProc(ref m) しても、ショートカットキーが効かない・・・

どっかを取り違えてるんだろうけど・・・
957デフォルトの名無しさん:2006/02/18(土) 01:21:17
実装って、これでいいの?
public class myClass : IDisposable
{
 public void Dispose()
 {
  Dispose(true);
  GC.SuppressFinalize(this);
 }
}
958デフォルトの名無しさん:2006/02/18(土) 01:23:12
一般的にはそう実装するな。
959デフォルトの名無しさん:2006/02/18(土) 02:12:28
>>956
ごめん、ContextMenuStripで試してなかった。
WndProcじゃなくてPreProcessMessageの方を呼ばないと駄目だな。
960デフォルトの名無しさん:2006/02/18(土) 02:24:18
>>959
できました。ありがとうございます。
しかしこの辺異常に複雑になってますね・・・
961デフォルトの名無しさん:2006/02/19(日) 22:48:41
Form1にForm2を開くボタンと、Form2のテキストに記入された受信ボタンがあった、
場合に、受信ボタンを押して、データを受信する時に、行が多い場合スクロール
アウトしてしまうのですが、最後に受信した文字列が見えるようにしたいのですが、
どのようにすればよいでしょうか?
--- Form1 ---
public partial class Form1 : Form
{
Form2 f2 = new Form2();
private void button1_Click(object sender, EventArgs e)
{
f2.Show();
}
private void button2_Click(object sender, EventArgs e)
{
this.richTextBox1.Text = f2.Date;
}
}
--- Form2 ---
public string Date
{
get
{
return richTextBox1.Text;
}
}
962デフォルトの名無しさん:2006/02/19(日) 22:51:44
ScrollToCaret
963961:2006/02/19(日) 23:08:56
>>962
解決しました
ありがとうございます。
964デフォルトの名無しさん:2006/02/20(月) 07:25:38
DataGridViewでセルの値の取得、プログラムからの更新方法がわかりません。
965デフォルトの名無しさん:2006/02/20(月) 10:16:28
>>964
SDKのADO.net(system.data)あたりを読むべし
質問する前に少しは調べなよ
966デフォルトの名無しさん:2006/02/20(月) 12:32:40
あれってヘルプ読んで理解可能な代物なんだろうか?
http://www.amazon.co.jp/exec/obidos/ASIN/4891003170/
をじっくり読んで初めて合点がいった。
ADO.NET関連のコントロールはJTableに勝るとも劣らない
くらい難しいと思った。
967デフォルトの名無しさん:2006/02/22(水) 22:59:54
C#+DirectXでVC++並みのゲームを作成できますか?
968デフォルトの名無しさん:2006/02/22(水) 23:19:30
お前には無理
969デフォルトの名無しさん:2006/02/23(木) 10:31:08
columnが2つ、rowが10ぐらいあるデータを表示専用で表形式にしたいのですが、
このような少数のデータの場合、DataGridViewかListViewのどちらを使用したら良いでしょうか?
ちなみに定期的に値を変更する必要があります。
実行速度(少数データなので大して変わらないと思いますが…)、メモリの使用具合、
プログラム的難度の観点から見て、アドバイスお願いします。
970デフォルトの名無しさん:2006/02/23(木) 10:59:27
ListViewでいいんじゃね
971デフォルトの名無しさん:2006/02/23(木) 12:17:53
>>969
メモリの使用具合は、わからんです。
難度はかわらんです。
ただ、ListViewはソート機能を使いたい場合、ああだこうだです。
972デフォルトの名無しさん:2006/02/23(木) 13:02:54
なんでもかんでもDataGridViewにしとけば問題なし
973デフォルトの名無しさん:2006/02/23(木) 23:58:20
とりあえずListViewにして問題ない
編集処理やDataSet系使うときだけDataGridView
974デフォルトの名無しさん:2006/02/25(土) 08:42:14
複数列リストビューって無いんですね。
いろんなアプリで使われてるコンポーネントなのに(´・ω・)
975デフォルトの名無しさん:2006/02/25(土) 08:46:21
複数列リストビューに該当するページが見つかりませんでした。
976デフォルトの名無しさん:2006/02/25(土) 08:48:05
listview.View を Detail にすればいいんじゃないかと憶測で言ってみる
977974:2006/02/25(土) 08:51:45
あ、リストビューがそれやったんか。失敬。なんなんなんだ俺は。
978デフォルトの名無しさん:2006/02/25(土) 18:18:29
>>977
斉藤清六さんですか?
979デフォルトの名無しさん:2006/02/26(日) 16:36:02
int*をint[]に変換する方法を教えてください
980デフォルトの名無しさん:2006/02/26(日) 16:36:55
というか、可能ですか?
981デフォルトの名無しさん:2006/02/26(日) 16:48:09
Marshal.Copy でコピーならできるが。
982デフォルトの名無しさん:2006/02/26(日) 16:55:07
>>981
えっと、どゆこと?

Marshal.Copy←この関数でint*をint[]にできるってこと?

とりあえず調べてみます。
983デフォルトの名無しさん:2006/02/26(日) 17:13:37
>>982
int*の値をint[]にコピーすることができました
ありがとうございます。

ついでに質問ですが、この関数は
int*→int[]
int[]→int*
だけですか?

int*→int*をするには

int*→int[]→int*

の2段階が必要ですか?
984デフォルトの名無しさん:2006/02/26(日) 17:15:10
そう。
それがいやなら CopyMemory を DllImport 。
985デフォルトの名無しさん:2006/02/26(日) 23:28:08
すみません、ひとつ質問があります。

public int this[int, x,int y,int z]

public int* this[int, x,int y,int z]
は同じクラス内では宣言できないのでしょうか。
986デフォルトの名無しさん:2006/02/26(日) 23:48:23
C# 使っててポインタを他から見える作りにするな。
987デフォルトの名無しさん:2006/02/27(月) 00:02:34
ポインタじゃなくても同じパラメータで違う型を返すインデクサは定義できない。
988デフォルトの名無しさん:2006/02/27(月) 00:43:55
ポインタ使わなきゃいけないならC#はツライだけだよ。
おとなしくC++使ってた方がいい。
989デフォルトの名無しさん:2006/02/27(月) 05:33:40
>>988
それも程度によると思うけどw
ポインタごりごり弄るならC++のがいいのは確かだね
990デフォルトの名無しさん:2006/02/27(月) 14:28:01
今日からCを覚えようとする中学生ですが
何かお勧めのエディタや参考書などありませんか?
991デフォルトの名無しさん:2006/02/27(月) 15:10:03
C言語ならスレ違い
992デフォルトの名無しさん:2006/02/27(月) 18:08:20
Visual C# のインストール中に

インストールコンポーネントを読み込んでいます。この処理には1〜2分かかる可能性があります。

って表示されたまま永久放置なんだけど、なんで?

常駐ソフトもサービスも全部切っても先に進まないんだけど・・
993デフォルトの名無しさん:2006/02/27(月) 18:18:25
何かは分からないけど、良くあるパターンで何かのサービス切ってるんじゃないの?
994デフォルトの名無しさん:2006/02/27(月) 18:42:20
こちらのスレッドにて改めて質問させてもらいました。

C♯相談室 Part29
http://pc8.2ch.net/test/read.cgi/tech/1138925245/

どうもありがとうございました
995994:2006/02/27(月) 18:44:05
ありゃ書き込みあったのね

>>993
いろいろ構成変えて試してみますわー
どうもでした
996993:2006/02/27(月) 19:14:49
ふと思い出したけど、起動時に一時ファイルを消すソフトと(CCleaner)か入れてない?
997デフォルトの名無しさん:2006/02/27(月) 22:35:05
>>984
半日がんばりましたがよく分かりません
使い方を教えてください(使うかどうかは別にして、今後の参考に)
998デフォルトの名無しさん:2006/02/27(月) 23:18:07
>>997
今うまくいきました。
ご迷惑おかけしました。
新スレはないんですか?
999デフォルトの名無しさん:2006/02/27(月) 23:48:01
面倒だからこれと統合でいいよ

C♯相談室 Part29
http://pc8.2ch.net/test/read.cgi/tech/1138925245/
1000デフォルトの名無しさん:2006/02/27(月) 23:54:57
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。