ふらっとC♯(Part5) ..
[2ch|▼Menu]
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
回答していただいたのにさっぱり・・・。
もう少し分かりやすくお願いできますでしょうか?
 最近始めたばかりで、さっぱり右も左も分からない状態です。
  よろしくお願いします。


503:デフォルトの名無しさん
04/11/05 18:39:42
>>502
ヘルプでrefキーワードぐらい調べようよ〜。
呼び出す時もrefキーワードが必要。
hoge(ref w, ref h);

500はただのジョークだから。こんな手段もあるよってだけ。
//と最後の行で言ったつもりだったんだけど。

504:デフォルトの名無しさん
04/11/05 19:04:46
>>502
蛇足の補足。たぶんこの場合は関係ないだろうけど、ポインタ値が指す領域にある値だけではなく、
そのものに意味がある場合には、System.IntPtr 型にしておいて、ポインタの指す先のアクセスは
>>500 風にやるようなこともある、ってのが >>501 ね(たぶん)。

例えば hoge の正体が hoge(UINT* w, UINT* h) { delete [] w; delete [] h; } みたいな場合とか。

505:デフォルトの名無しさん
04/11/05 19:05:31
>>そのものに意味がある
 ↑
「ポインタ値そのものに意味がある」の編集ミスですた。

506:デフォルトの名無しさん
04/11/06 00:54:32
this.pictureBox1.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseWheel);
private void pictureBox1_MouseWheel(object sender, MouseEventArgs e)
{
Console.WriteLine(e.Delta);
}
と記述してるのですが、マウスホイールくるくるしてもpictureBox1_MouseWheelイベントが発生してくれません。

そもそもなんで、MouseWheelだけは手動で書かないといけないのかと(ry

507:デフォルトの名無しさん
04/11/06 01:01:47
>>506
Console.WriteLine();を、MessageBox.Show("","");
にしても駄目?

508:506
04/11/06 01:08:21
だめっぽいです
ブレークポイントしかけても反応してくれません。
Panelの上に張ってるのでPanelにもイベントハンドらを記述したのですが
どっちもイベントが発生しないみたいです。



509:デフォルトの名無しさん
04/11/06 01:10:57
>>508
>Control.MouseWheel イベント
> コントロールにフォーカスがあるときにマウス ホイールが動くと発生します。

PictureBoxやPanelはユーザの通常操作ではフォーカスを得る事はない。

510:508
04/11/06 01:18:35
なるほど。 
Mouse_EnterしたらFocus()するようにするとうまくいきました。
お騒がせしました。

511:デフォルトの名無しさん
04/11/06 18:29:40
今C#の文法書を読んで勉強中なんですが
文法などを一通り理解したら次は何をすべきなんでしょうか?
guiアプリケーションを作れる人は文法などを理解したら次は何をしたんですか?


512:デフォルトの名無しさん
04/11/06 18:32:41
作りたいアプリを作りつつ
GUIパーツをいろいろ試したり細かいプロパティ・メソッドを調べたり
非GUIなクラスの使い方を覚えたりどんなクラスが存在するのかを調べたり。

513:デフォルトの名無しさん
04/11/06 18:32:45
>>511
作りたいものを作れ。手を動かせ。
「習うより慣れろ」ということわざがあるが、
プログラミングの場合「習ったら慣れろ」ってところか。

514:デフォルトの名無しさん
04/11/06 18:41:15
わからないことがあったらここに質問しにきていいんですかね?
タブ型メモ帳を作ろうとしてお世話になったのが自分なのですが。
MSDNライブラリをみながら作るだけではちょっとムリがあるかなと思いました。


515:495
04/11/06 20:36:09
>>496-497
亀ですがdくすです。

む〜。実際にデータ送らないと切断検出できないですか〜。
送信、受信が別スレッドに分かれているんで、リターンを待つ同期に一苦労^-^;

516:デフォルトの名無しさん
04/11/06 20:44:40
>>515
送信と受信を一つのスレッドでやるとエライ事になるよw
あとTcpClientは結構ゴミだからクライアントアプリでもSoket使った方がいいかも。

517:495
04/11/06 20:51:11
>>516
>クライアントアプリでもSocket
具体的にどのような点が優れているんですか?
ちょっとワカラン orz

518:デフォルトの名無しさん
04/11/06 20:58:32
>>517
NetworkStreamでしか送受信出来ない、細かい制御(受信側のみ切断とか)も出来ない
ついでに非同期送受信も出来ない・・・
TcpClientで作っても後々書き直すことになると思うw

519:495
04/11/06 21:00:06
>>518
ラジャ^-^;

520:495
04/11/06 21:01:24
あ〜送受信系統を1つのクラスに押し込めて置いてよかったw
このクラスの中身だけ変えればおkだわ

521:デフォルトの名無しさん
04/11/06 22:26:52
URLリンク(do.sakura.ne.jp)

こんな感じで送受信してます、たまにデータが続けざまに来るとエラーでるんですが、どうしたらよいでしょう・・・。

522:デフォルトの名無しさん
04/11/07 00:13:29
えーと・・・
BeginReceiveしてEndReceiveした後は、また非同期受信するなら再度BeginReciveしないと駄目なような・・・
それにこの用途ならNetworkStream使った方が楽かも・・・(俺ならそうするw)

あと、一度の受信でバッファ全部捨ててるけど、
非同期受信は何バイト受信するかわからないから、先取りしたデータは捨てるんじゃなくて
プールしてその上でさらにバッファを貯めるみたいにすべき。

あと(ぉ終了処理はShutdownの後でCloseしよーw

523:521
04/11/07 01:12:53
了解です!(BeginRecieveするメソッドにソケット渡し忘れてた・・・(/ω\))
NetworkStream調べてみます〜

>あと、一度の受信でバッファ全部捨ててるけど、
>非同期受信は何バイト受信するかわからないから、先取りしたデータは捨てるんじゃなくて
>プールしてその上でさらにバッファを貯めるみたいにすべき。

int recBytesSize = socket.EndReceive( ar );
↑で受信データサイズ抜いた時点で必要とするbyte配列は確定してない・・・ということですか?

524:495
04/11/07 16:00:26
何か似たような事やっている人がいるなぁ ^-^;
おまいは俺か?

525:杏仁
04/11/07 21:51:38
>>498-503
ありがとうございました。おかげで動作しました。
もう一つ質問なのですが、DLLの仕様を見ると
 BYTE *HOGE()
という関数があります。
この場合は、どうやって呼び出せばいいでしょうか?
よろしくお願いします。


526:521
04/11/07 21:56:34
>>495
あなたの子よ!認知してよ!

非同期NetworkStreamのサンプル見つからない(MSDNのだと断片的でわからず・・・)

527:デフォルトの名無しさん
04/11/07 22:04:54
ところで Bigin〜 したら必ず End〜 しなきゃいけないの?
やりっぱなしじゃ駄目?

528:527
04/11/07 22:05:19
凄く打ち間違い orz

529:デフォルトの名無しさん
04/11/07 22:16:49
ランダムにping送って、応答があった場合、応答先のPCのNICのMACアドレスを取得する方法ってありますか?

530:デフォルトの名無しさん
04/11/07 22:34:26
よく分からないけど通報しますた

531:デフォルトの名無しさん
04/11/07 22:55:54
ブロードキャストがしたいんじゃないかな…

532:デフォルトの名無しさん
04/11/07 22:57:25
ARPのことなのだろうか・・・・

それとも今世界のどこかから自分のMAC抜かれたいのだろうか

533:デフォルトの名無しさん
04/11/07 23:21:05
マックでバーガー三つ買って来るか・・・ハァ・・・

534:デフォルトの名無しさん
04/11/07 23:38:51
漏れのもたのむ

535:デフォルトの名無しさん
04/11/07 23:55:40
>529
pingパケットにその情報があるか見てみれば?

536:デフォルトの名無しさん
04/11/08 00:14:47
C#のクラスを継承してManageC++のクラスを作りたいんですが、
メンバ関数のオーバーライドがうまくいきません。

C#のクラス↓
public abstract class ClassCS
{
public abstract void Func(ref int c);
}

void FuncC(int __gc& C) や void FuncC(int &C) ではだめでした。
この関数FuncをオーバーライドするにはC++でどのように記述すればいいんでしょうか?





537:デフォルトの名無しさん
04/11/08 01:38:42
>>525
それはもう関数次第としか言えない。
>500みたいなことをする可能性が高いが。

>>536
ええとポインタを引数に取るんだからvoid FuncC(int* c)じゃないのかな。

538:デフォルトの名無しさん
04/11/08 02:37:53
>>535
それだと、同一ネットワーク内ならOKだけど、L3装置かましたときに中継点のMACになるような

539:杏仁
04/11/08 10:14:41
>>537
>それはもう関数次第としか言えない。
 画像バッフアのアドレスが格納されて帰ってくる関数みたいなのですが・・。

> >500みたいなことをする可能性が高いが。
・・・・。大変そうですね。私にできるかどうか・・・。
 サンプルとか参考になるサイト等ありますでしょうか?

540:デフォルトの名無しさん
04/11/08 13:18:34
>>539
関数次第なんだからサンプルも何もないと思うけど?

541:デフォルトの名無しさん
04/11/08 13:32:01
>>539
 unsafe で IntPtr を byte* にでもキャストして、画像バッファのメモリをアクセスすれば良いと思う。
メモリの中身にアクセスする必要がないなら、IntPtr で受け取っておいて、他に渡す必要があるなら
また IntPtr で渡してあげるだけ。

Susie のプラグインを C# から使いたいとか、そういうことですか?

542:杏仁
04/11/08 15:20:19
>540 541
 解答ありがとうございます。
 ん〜。勉強不足で折角の解答の意味があまり理解できずに申し訳ありません。
 とりあえず、IntPtrをもう少し勉強してみます。

>Susie のプラグインを C# から使いたいとか、そういうことですか?
画像入力ボードのDLLを使って画像の取り込みを行いたいと思っています。


543:デフォルトの名無しさん
04/11/08 16:15:09
此処で質問して良いのかどうか、ちょっと不安なのですが・・・

現在、既存システム(C+VB6)をC#で移植しています。
既存システムはVB6でユーザインターフェースを作り、
CでDLLを作って、VB6からDLLを呼び出しています。

VB6のインターフェース部分は特に問題無くC#に移植できたのですが、
Cで作ったDLLの関数が結構多く、またC#から呼び出すのも厄介な状況です。

MSの技術情報でWin32APIと.NETFrameworkの対応表で幾つかはそのままC#で実装しましたが、
残りのDLL関数をManagedC++でDLLを再度作り直し、そのDLLをC#から直接使う事になりました。

そこで質問なのですが、ManagedC++でSTLのmapを使いたいのですが、
コンパイル時にエラーとなってしまいます。
ManagedC++ではSTLなどテンプレートを使う事はできないのでしょうか?
また、ManagedC++で作った関数で、.NETのHashtableなどを返す関数は作れないのでしょうか?

544:デフォルトの名無しさん
04/11/08 16:22:06
>>543
managed C++ やろうぜ!!
スレリンク(tech板)

//沈んでるなぁ……。

545:536
04/11/09 00:34:22
>>537
>ええとポインタを引数に取るんだからvoid FuncC(int* c)じゃないのかな。
返答ありがとうございます。
試してみましたが、うまくいかないようです。

自分でもいろいろ試してみて、Manage C++側はFunc(int __gc &c)になるはずだと思ったんですが、
下のプログラムを実行すると『抽象クラスまたはインターフェイス 'CPP.CPP' のインスタンスを作成できません。』といったエラーが出ます。
CPPのFuncをオーバーライドできてないってことだと思うんですが、どうすればちゃんとオーバーライドできるんでしょうか?

Manage C++↓
namespace CS
{
public abstract class CS
{
public abstract void Func(ref System.Int32 c);
}
}

C#↓
namespace CPP
{
public __gc class CPP : public CS::CS
{
public:
void Func(int __gc &c){}
};
}

static void Main(string[] args)
{
CS.CS S = new CPP.CPP();
}

546:デフォルトの名無しさん
04/11/09 01:08:36
突然ですがお知らせです。

大阪(西梅田)、新宿(JR駅前)のそれぞれ一等地に
拠点を構え、業績急上昇中!未経験者大募集中!の
ソフトウェア開発会社
グリーンシステムを応援するHPです。
URLリンク(www.geocities.jp)

このスレの読者の人のような、レベルの高い人にぴったりかと
思います。

最高の会社にするため、みんな頑張ってます!


547:デフォルトの名無しさん
04/11/09 01:16:15
このスレの読者の人のような、デンパレベルの高い人にぴったりかと
思います。

最高の会社にするため、みんな頑張って2chに投稿してます!

548:デフォルトの名無しさん
04/11/09 02:02:26
>>546
俺はチョコレート嫌いでチーズケーキ好きだから無理ぽ(´・ω・`)

549:デフォルトの名無しさん
04/11/10 14:32:04
以前からよくVisualStudioがポコポコこける原因が判ったのですが、
その原因というのは、ソリューション中にControlのプロジェクトと
利用するアプリの複数のプロジェクトを作って
アプリのプロジェクトからControlのプロジェクトを参照して、
Controlのプロジェクトのコントロールをツールボックスにいれると頻繁に落ちます。
VisualStudio からしてみれは参照しているコントロールを突如更新されては堪らないというのは分るのですが
TestツールのNUnitでも外部から書き換えを検出して見事にやっているので、
更新している本人の VisualStudio にできないはずが無いだろうと思うのですが、できていないようです。

結局コントロールのDLLは別のソリューションで作って解決したのですが、まとめてビルドできなくて結構不便です。
誰かこうしたら便利だ!!
って方法がある人がいたら教えてくださいです。


550:デフォルトの名無しさん
04/11/10 14:37:21
>>549
同じような事したことあるけど、VSがポコポコ落ちるような事なかったけどなぁ・・・

他の開発環境のせい?
それともマシンの性能?
やっぱり、日頃の行い?

551:デフォルトの名無しさん
04/11/10 15:03:12
>>550
ほんと?
相当やりこんでほぼこれだと特定した物なんだけど……

552:デフォルトの名無しさん
04/11/10 15:05:09
漏れも未体験だな。

553:デフォルトの名無しさん
04/11/10 15:08:17
すんません、
その問題おこらないソリューション一式をアップローダに上げてもらえませんか?
もしこれが原因でないとすれば、かなり悩みます。

554:デフォルトの名無しさん
04/11/10 15:17:40
>>553
そんなソリューション一式、アップできると思うのか?
会社でやってる仕事のものなら、特に上げられない。

新手の産業スパイかなにかですか?
買うと言うなら送りますよ。
勿論、ソースから何から。
ドキュメントは要らないだろうから、値引きするけど、それでも数百万は貰うよ?

555:デフォルトの名無しさん
04/11/10 15:22:09
>>554
もちろん全部上げろという意味じゃないですよっ、そんなの当たり前です
そんなものアップできるほど小さくも無いでしょうし、見る側のこっちもたまりません。
最低限でって話ですよ。
てゆうかアンタただの煽りでしょ。

556:デフォルトの名無しさん
04/11/10 15:23:35
どうやったら再現できるのか知りたいくらいだw

557:デフォルトの名無しさん
04/11/10 15:24:04
>>554
きちがい?

558:デフォルトの名無しさん
04/11/10 15:26:22
取りあえず再現"する"最低限のソリューションから検証してみるべきだな。

559:デフォルトの名無しさん
04/11/10 15:27:44
煽りはお腹いっぱい、もういいです。

560:デフォルトの名無しさん
04/11/10 15:33:38
ま、553もかなり人に面倒を押し付けているな。
最低限に切り分けてアップローダにアップしろと。

561:デフォルトの名無しさん
04/11/10 16:06:17
ていうか549=553=559が釣りにしか見えない。

562:デフォルトの名無しさん
04/11/10 16:08:12
1台のPCで、仮想デリゲート串みたいなこと出来ませんか?

563:デフォルトの名無しさん
04/11/10 16:10:05
たぶん >>549 のコントロールが、DesignMode 見て適切な処理をしていないってあたりに一票。


564:デフォルトの名無しさん
04/11/10 16:12:56
          \   ∩─ー、    ====
            \/ ● 、_ `ヽ   ======
            / \( ●  ● |つ
            |   X_入__ノ   ミ   そんなエサで俺様がクマー!!
             、 (_/   ノ /⌒l
             /\___ノ゙_/  /  =====
             〈         __ノ  ====
             \ \_    \
              \___)     \   ======   (´⌒
                 \   ___ \__  (´⌒;;(´⌒;;
                   \___)___)(´;;⌒  (´⌒;;  ズザザザ
                                (´⌒; (´>>

565:デフォルトの名無しさん
04/11/10 16:53:29
つうか、普通はちゃんと動作する最小限のものをアップするんじゃなくて、
依頼者の”動作しない”最低限のものをアップするのが筋じゃないか?

でもって、それを他の奴等が正常に動作するなら、PC環境が原因かもしれない。
他の奴も異常な動作をするなら、ソリューリョンが原因かもしれない。

とりあえずは動作しない最小限のソリューションをアップして、
そのソリューションのどの部分をどう変更したらVSが落ちるのかを明記しろ。
話はそれからだ。

566:デフォルトの名無しさん
04/11/10 18:36:46
>>565
内部で完結してしまっている(というかpanel一枚おいただけ)ので DesignMode は関係ないのではと・・・思うのですが・・・
いろいろやってみた所、コントロールのDLLをプロジェクトコンパイルした後、
一度VSを起動しなおしてから、目的のプロジェクトをコンパイルすれば
同一リソリューション中にプロジェクトを入れても問題は発生しないようです。


567:デフォルトの名無しさん
04/11/10 18:37:58
>>566
間違いです×>>565
>>563


568:デフォルトの名無しさん
04/11/10 19:01:02
>>565
あんたが正しい。>>549は厚かましいにもほどがあると思う。

569:デフォルトの名無しさん
04/11/10 20:27:41
>>566
今ためしてみました。
1. 新規のソリューションに UserControl プロジェクトを追加。パネル1枚とLabelを配置。
2. Windows アプリケーションプロジェクトを追加。デザイナで上記のUserControlをFormに配置。
 (参照は自動的に追加される)
3. (ビルドしたりする)
4. UserControl の Label の文字列を変更⇒「デザイナに反映するにはリビルドが必要です」とか言われる
5. おとなしくリビルド。Form 側のデザイナに文字列の変更が反映される。
という感じで特に問題は起きません。

 同一ソリューション内のユーザーコントロールは、ツールボックスの「マイ ユーザー コントロール」に
自動的に追加されるわけだし、「同一リソリューション中にプロジェクトを入れても問題は発生しない」のが
普通なんだと思います。

570:デフォルトの名無しさん
04/11/10 21:10:42
int a,b;
Point p;

p = new (a,b);
ってするのと
p.X = a;
p.Y = b;
ってするのとどっちが早いんですか?
生成されるコードは同じですか?

571:デフォルトの名無しさん
04/11/10 21:21:07
>>569
わざわざどうも有難うございます、そうするともっと別のところに原因がありそうですね。
さらに調べてみます。
ちなみに僕のところでは「デザイナに反映するにはリビルドが必要です」が出ないんですよね。
何故だろう?
実は、xmlドキュメントも反映されないのですが、これはそちらでは反映されるものでしょうか?
これも
1.dll側のプロジェクトをビルドする
2.VSを一旦落とす
3.再起動してアプリ側プロジェクトを操作する
という形でないと、僕の所では自働補完が機能しません。
これもちょっと気になるのですが、もしお邪魔でなければ試してもらえませんでしょうか?

572:570
04/11/10 21:22:06
int a,b,c,d;
Point p = new Point(c,d);
に最初の二行を訂正します。


573:デフォルトの名無しさん
04/11/10 21:42:17
>>570
自分で試せるし調べられるだろ?

574:デフォルトの名無しさん
04/11/10 22:24:16
>>571
EXE側コード編集時にはインテリセンスは効くものの、XMLドキュメントで書いた情報は出てきません。
オブジェクトブラウザで見るとちゃんと見えるんだけど。
調べてみると、参照を追加した時点で XMLドキュメントが無いと出てこないみたいです。
参照を一旦削除して、再度追加してあげればOKでした(アセンブリ直指定ではなく、プロジェクト出力を追加しました)。

しかしこの状態では、DLLを更新した際にXMLドキュメントファイルのローカルコピーがVSによって使用中のため更新できずに、EXE側はビルドエラーになります(DLL自体は更新できるのに・・・)。
DLLへの参照について一旦ローカルコピーをFalseにしてビルド、再びONにしてビルドとか、
一旦終了してDLL側から順にビルドという手順が必要でした。

以下はXMLドキュメントを更新しようとした際のエラー
>ファイル 'WindowsControlLibrary1.xml' を実行ディレクトリにコピーできません。 プロセスはファイルに
>アクセスできません。別のプロセスが使用中です。
一時ファイルを出力ディレクトリにコピーできませんでした。

こういう構成の時には、DLL開発中はXMLドキュメントを生成しない方が良さそう・・・

575:570
04/11/10 22:44:24
Point[] p = new Point[9999999];
Point[] q = newPoint[9999999];
Point[] r = newPoint[9999999];
Point[] s = newPoint[9999999];
って一杯point作ってためしたら X,Yそれぞれに代入するほうが早かったです。

576:デフォルトの名無しさん
04/11/11 17:47:02
XMLSerializerを使ってさんざんスレ汚しやってる>>454その他です
度々で(´・ω・`)ですがおながいします

public void func (Object obj)
{
MemoryStream ms = new MemoryStream();
XmlSerializer serializer = new XmlSerializer(obj.GetType());
serializer.Serialize(ms,obj);
・・・・
}

引数でボクシングされたオブジェクトをシリアライズしようとしたとき、
メンバがシリアライズされません(つД`)
><?xml version="1.0" encoding="utf-8"?>
><class2 xmlns:xsd="URLリンク(www.w3.org)" xmlns:xsi="URLリンク(www.w3.org)" />
こんな感じになります。ちなみにClass2にはためしにstring型1個つっこんでます

XmlSerializeを使ってボクシングしたオブジェクトのメンバをまるごとシリアライズする手段ってありますか?

577:デフォルトの名無しさん
04/11/11 18:00:01
>>576
>ちなみにClass2にはためしにstring型1個つっこんでます

それちゃんと public になってますか?

578:デフォルトの名無しさん
04/11/11 18:11:58
>>577
できました
ありがとうございました吊ってきます

・・・・オレのバカバカバカ・・・・

579:デフォルトの名無しさん
04/11/11 19:53:05
URLリンク(homepage3.nifty.com)
上のページの、「実行時間の高精度な計測」というのを使ってみたくていろいろやってたのですが、
どうしてもusingと;のところで「無効なトークン・・・」というビルドエラーが出でしまいます。
どうしたらよいでしょうか。
VSのC#使ってます

580:デフォルトの名無しさん
04/11/11 20:01:25
>>579
usingはコードの先頭、他にも色々usingされてるところに書く。

581:デフォルトの名無しさん
04/11/11 20:04:57
>>579
そのページのコード、間違ってるような気がする。using ステートメントのカッコの中は、
 1. 式
 2. 型名 変数名 = 式 [, 変数名 = 式 ] ...
のどちらかという形式で、そのページにあるように変数宣言やら式やらを混ぜてカンマで並べたりはできない。

>>578 のいう using はたぶんまた別の using なので無視。

582:581
04/11/11 20:05:50
首吊ります・・・ orz




583:579
04/11/11 20:07:15
>>780
ごめんなさい、自分の貧弱な脳みそでは理解できないのですが、
こういうことですか?

using System.Runtime.InteropServices ; // for DllImport
・・・
private void button1_Click(object sender, System.EventArgs e)
{       
・・・
}    

584:デフォルトの名無しさん
04/11/11 21:46:32
>>579
うろ覚えだから難だがコピペして実行しようとしたときオレも
using System.Runtime.InteropServices ;でコケた
んで、なぜかintelliSenseで同じ内容指定したら動いた

585:デフォルトの名無しさん
04/11/11 21:54:37
} がありません
って言うコンパイルエラーがなぜか出て
ファイル内のテキストを丸ごと切り取って貼り付けたら
正常にコンパイルできたことがあったなあ

586:579
04/11/12 07:48:29
解決しました。
using.System.Runtime〜を一番上の
using〜というのがたくさんある所
に置いたら実行出来ました。
ありがとうございました。

587:デフォルトの名無しさん
04/11/12 10:54:21
 C#ちょこっと触って、やっぱVB.netにして、「すげえー便利最高」って
思って、やっぱC#の方がいいかなとおもって、迷ってんだけど。
絶対C#がいいってとこある? 

588:デフォルトの名無しさん
04/11/12 10:58:40
べつに〜

589:デフォルトの名無しさん
04/11/12 11:03:34
VB系に慣れてたらVB.NET、C/JAVA系に慣れてたらC#。
私はVBの文法が大ッ嫌いなのでC#。

590:デフォルトの名無しさん
04/11/12 12:06:42
>588
 別にーってお前なー。なんか言うことないんか?

>589
 マイコンはCで、PCはVB6で EXCELとAutocadとVisioと、、、、はVBAなの。
JAVAって20年?も前の言語だろ。
今頃になって真似してマトモニなっても、VBで脳みそ破壊されてるからなー。


591:デフォルトの名無しさん
04/11/12 12:11:47
まず日本語から勉強するべきだな。

592:デフォルトの名無しさん
04/11/12 13:29:41
植民地だし、英語だろ。

593:デフォルトの名無しさん
04/11/12 15:26:54
PictureBoxにAllowDropのプロパティがないのに、Drag&Dropのイベントハンドラがあるのは、ライブラリの設計ミスか?
デフォルトでnoneになって、メッセージ発生しないんだが・・・。


594:デフォルトの名無しさん
04/11/12 15:49:42
>>593
なぜかEditorBrowsableAttributeもBrowsableAttributeも不可視の設定になってるから
インテリセンスにもプロパティグリッドにも表示されないけど、
AllowDrop{get; set;}はあるしtrueにしてやれば普通にD&Dも可能。
//やっぱり中途半端……。

595:デフォルトの名無しさん
04/11/12 15:51:06
>>593
つ[インシデント]

596:デフォルトの名無しさん
04/11/12 17:42:36
>>574
OCNがアク禁になっていたので遅レスです、どもわざわざ有難うごさいます。
XMLに関しては同じです、コントロールのところだけの問題か……むむむ
取りあえず助かります。


597:デフォルトの名無しさん
04/11/12 23:37:17
CreateDIBSectionを使っているのですが、
どうやったら、PictureBOXのhDCを取得できますでしょうか?
C#でCreateDIBSectionを使ったサンプル等ありましたら、
お教えください。よろしくお願いします。


598:デフォルトの名無しさん
04/11/12 23:43:11
                \ │ /
                 / ̄\   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
               ─( ゚ ∀ ゚ )< くっちゃらはぴはぴ!
                 \_/   \_________
                / │ \
                    ∩ ∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< くっちゃらはぴはぴ!
Py厨〜〜〜〜!    >( ゚∀゚ )/ |    / \__________
________/ |    〈 |   |
              / /\_」 / /\」               ̄     / /


599:デフォルトの名無しさん
04/11/12 23:47:59
PictureBox.CreateGraphics().GetHdc()
ReleaseHdc()とGraphics.Dispose()もセットで。

URLリンク(www.codeproject.com)
DIBSectionのラッパクラスだそうだ。

600:デフォルトの名無しさん
04/11/12 23:59:30
NUnitだけど、exeファイルをテストする事は出来ないよね?
で、以下のような仕組みにしている。

作成中のプロジェクトをWindowsアプリからクラスライブラリに変更
 -> MyAppCore.dll
作成中のプロジェクトを走らせるだけのWindowsアプリ・プロジェクトを作成
 -> MyAppRunner.exe(MyAppCore.dllを参照に追加)
内部的なコードはMyAppCore.dllの起動関数を呼び出すだけ。
テストプロジェクト
 -> Test.dll(MyAppCore.dllを参照に追加)

まぁなんというか、もっとスマートなやり方はないのかなと思った次第。

601:デフォルトの名無しさん
04/11/13 00:17:15
>>600
少なくともVer2.2ならできるよ

602:600
04/11/14 10:00:00
2.2使ってます。
自分はテストコードをアプリ本体に入れたくないんですよね。
テストとアプリのプロジェクトを分けるとテスト側からアプリのコードを呼ぶために
アプリ側をDLLにしなくちゃいけない・・・
って、今、思いついたんだけど、テストコードを全部#if DEBUGで
くくっとけばいいのか!
なわけで、解決っぽい。

603:デフォルトの名無しさん
04/11/18 16:46:30
ShowDialogで表示したダイアログを移動した時
元のフォームも一緒に移動したいのですが
可能でしょうか?
可能な場合どのようにすればいいのでしょうか

604:デフォルトの名無しさん
04/11/18 17:07:01
>>604
お兄さんそりゃFormでダイアログもどき作った方が楽でっせ

605:603
04/11/18 17:26:57
すいません。言葉足らずでした。
メインフォームがあって編集用のフォームを
メインフォームの上にモーダルで表示したとして、
編集用のフォームを移動した時に、
メインフォームも一緒に動かしたいなと思ったのです。

606:デフォルトの名無しさん
04/11/18 17:52:59
>>605
ダイアログフォーム呼出時に、ダイアログフォームのOwnerプロパティに親フォーム自身を設定する。

ダイアログフォームの方で、
位置保存用のメンバ変数を作っておく。
Moveイベントで、Ownerプロパティから親フォームの位置を設定し、その後位置保存用変数を更新する。

基本はこんな感じ。
初めの位置保存はLoadかVisibleChangedでやるのが妥当かな。
Moveイベントへのイベントハンドラ追加もLoadでやるか、Moveイベント内でCreatedをチェックするかとか。

//MoveがMoveEventArgsとか言って移動前の位置のプロパティを持っててくれれば楽なのになー。

607:在日外国人参政権反対
04/11/18 18:02:02
きくまえにMoveWindowとか試してみろよ。

608:デフォルトの名無しさん
04/11/18 22:46:15
そうだな。それっぽい名前のを色々弄ってみるのは大事だと思うよ。

609:603
04/11/19 04:43:21
>>606さん。レスありがとうございます。
とりあえず以下のようにやってみましたが上手くいきませんでした。

MainFormとEditFormがあったとして
MainFormでButton1をクリックしたときに

EditForm editDialog = new EditForm();
editDialog.ShowDialog(this);

としてEditFormで

public static int x,y; //Location用変数(publicはとりあえずで付けました)
private void EditForm_Move(object sender, System.EventArgs e)
{
x = this.Location.X;
y = this.Location.Y;

ここにMainForm.Location = new Point(x,y);
見たいな事が出来れば良いんですよね?
色々弄ってみたのですが分かりませんでした (--
}

>>Moveイベントへのイベントハンドラ追加もLoadでやるか、Moveイベント内でCreatedをチェックするかとか。
すいません。この意味が分かりませんでした。

610:デフォルトの名無しさん
04/11/19 08:01:59

public class Form1 : System.Windows.Forms.Form
{
    //中略

    private void button1_Click(object sender, System.EventArgs e)
    {
        Form f;
        f = new Form();
        //f = new EditForm();

        f.Move += new EventHandler(childForm_Move);

        f.ShowDialog(this);
    }

    private void childForm_Move(object sender, EventArgs e)
    {
        Form f = (Form)sender;

        int x = f.Location.X - 100;
        int y = f.Location.Y - 100;
        this.Location = new Point(x, y);
    }
}



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

5318日前に更新/230 KB
担当:undef