ふらっとC♯(Part5)
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
少しずつC#プログラマを名乗るものが現れました。みなさん一緒に勉強しましょう。
前スレッドはこちら
http://pc2.2ch.net/test/read.cgi/tech/1059028988/l50 (Part4)
http://pc2.2ch.net/test/read.cgi/tech/1047210828/l50 (Part3)
http://pc2.2ch.net/test/read.cgi/tech/1035895873/l50 (Part2)
http://pc2.2ch.net/test/read.cgi/tech/1023766485/l50
0449デフォルトの名無しさん
NGNGわけあってDataGridをListViewのように使ってるんです。
で、残念ながらそのコードだと、ソート前のDataRowしか取れませんでした。
0450デフォルトの名無しさん
NGNG主キーのところの値が完全一致するのを探せば良いんじゃない?
//カラムの並びを入れ替えられるとお手上げかな。
0451デフォルトの名無しさん
NGNGやっぱりそういう力技しかないんですね・・・。カラムの並び替えは無しの方向でやってます。
ありがとうございました。
0452デフォルトの名無しさん
NGNGCurrencyManagerを使えばできないかな
0453デフォルトの名無しさん
NGNGttp://dobon.net/vb/dotnet/datagrid/currentrow.html
0454デフォルトの名無しさん
NGNGSend()につっこみたいのですが、XmlSerializerの引数はstream用でバイト配列にする方法が見つかりません。
やっぱできないのでしょうか。。。。
0455デフォルトの名無しさん
NGNGxmlSerializer.Serialize(ms, obj);
byte[] bytes = ms.ToArray();
socket.Send(bytes, 0, bytes.Length);
ということかな?
0456デフォルトの名無しさん
NGNGMemoryStream
0457デフォルトの名無しさん
NGNG0458454
NGNGありがとうございます、MemoryStreamをつかうんですね
ためしてみます(`・ω・´)
0459デフォルトの名無しさん
NGNGthis.TopMost = !this.TopMost;
とやると常に手前にしたときにメインメニューのドロップダウンの部分が
フォームの下に隠れちゃうんですけど何がいけないんでしょうか。。。?
0460デフォルトの名無しさん
NGNGあれはSystem.Windows.Forms.TabControlからの継承で作れるものなのでしょうか。
サードパーティ製のものもあるにはあるのですが、
せっかくなので自分で作ってみたいのです。
0461在日外国人参政権反対
NGNG自分で気合で描画することを進めます。
0462454
NGNG>>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();
0463デフォルトの名無しさん
NGNGMemoryStream 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();
0465デフォルトの名無しさん
NGNGちまちまやってみますわ。
.net 2.0になっても各種コントロールはショボイままだった…。
幾つか良くなったのもあるけど。
0466デフォルトの名無しさん
NGNG7995.005229
とかを少数以下は無視していいのでintにしたいのですがどうすればいいですか?
Convert.Tointが使えなくて困ってます。(少数いかにも数字があるから?)
0467デフォルトの名無しさん
NGNGdoubleにしてからintに落とせば?
0468デフォルトの名無しさん
NGNG基本的に言語のライブラリはOSが提供するUIに口出ししないし、するべきではありません。
そういうのはサードパーティの仕事です。
0469デフォルトの名無しさん
NGNGやFlexGridなどの解説本を探してみたのだが、全然見つからないね。
ヘルプだけ見て使いこなせということなんだろうか。
0470466
NGNGいけました。ありがとうございました
0471デフォルトの名無しさん
NGNGまぁ今の".NET Framework"はそうかもしれないけど、
いずれWindowsのAPIになっていくわけでしょ。
そうするとやっぱりWindowsが提供するネイティブコントロールは
しょぼいってことになるわけで、そろそろどうにかならないものかとは思う。
0472デフォルトの名無しさん
NGNGVS標準のCrystalReportも日本語だとあまり情報ないよね。
仕事で作るような帳票類はGDIでゴリゴリ書いてる時間ないから
しかたなく使ってるけど、正直"たぶんこうやって使うんだろう"の世界。
0473在日外国人参政権反対
NGNGWindows.Formsにまとめてるのはその意図を汲んでのことだろう。
だからこそそれを拡充させてほしい気はする。
0474デフォルトの名無しさん
NGNGforeach ( UserList logoutUser in listBox1.Items )
{
if ( recMessage.TargetUserID == logoutUser.UserGuid )
{
listBox1.Items.Remove(logout);
}
}
と書くと
System.InvalidOperationException:
この列挙子が連結されている一覧は変更されています。
列挙子は、一覧が変更しない場合に限り使用できます。
とゴルァされるのですが、いい方法ないでしょうか・・・。
0475デフォルトの名無しさん
NGNG0476デフォルトの名無しさん
NGNGforで回してやるとかしな。
0477474
NGNG1回ブツが釣れれば十分なのでbreakかましたらうまくいきました
吊ってきますorz
0478デフォルトの名無しさん
NGNG同じ内容ですが、こちらに書かせてください。
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)をバインドしたいんです。
もちろん、バインドするからには変更結果も反映されていてほしいんですが・・・
お願いします。
0479デフォルトの名無しさん
NGNGusing System.Windows.Forms;
という感じにしておいた部分を
using System.Windows.NewForms;
とかに書き換えることで、クラス構成をそっくり新しくする事って邪道ですか?
0480デフォルトの名無しさん
NGNG0481デフォルトの名無しさん
NGNGその場合、
using System.Windows.Forms;
↓
using No479.Windows.Forms;
みたいに企業名(Systemの部分)を変えたほうがいいんじゃないか。
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpgenref/html/cpconnamespacenamingguidelines.asp
0482479
NGNGちゃうちゃう
System.Windows.Forms と System.Windows.NetForms の中に、
型は同じだけど挙動の異なるクラスがあったときに、
using 文でどちらを採用するか切り替えるのは邪道かな?って事
0484デフォルトの名無しさん
NGNGそういうクラスが大量にあるソースを目の前にしたときに激しい絶望感に襲われるのでやめてください。
using書いてるのにnamespaceフルに書いて別のnamespaceのクラスを使用されたりして混沌に拍車がかかったりします、してます……
0486デフォルトの名無しさん
NGNGusing Hoge = System.Windows.Forms;
Hoge.Form = new Hoge.Form();
で随分楽になると思うけど。
まあ479みたいなのは見たくもないと言うのはよく分かる。
0487デフォルトの名無しさん
NGNGそういうののためにAbstractFactoryとかあるとおもうのだけど。
あれは切り替えできるとともに、システム上での選択肢をひとつに強制するという使い方でもある。
ソースごとにusingで切り替えられるのは>>484のいうとおりたちの悪いバグの元。
0488デフォルトの名無しさん
NGNG>>アクティブなアプリケーションであるフォームをアクティブにした場合は、そのフォームが最前面に移動します。
>>アクティブなアプリケーションではないフォームの場合は、そのフォームのウィンドウ キャプションが点滅します。
とあるのですが、他のアプリケーションに切り替えてるときにこのメソッド呼び出されると、最前面に来る場合があるのですが、
他のアプリケーションにフォーカスしている ≠ その他のアプリケーションのフォームがアクティブである
ということなのしょうか・・・?
MSNメッセンジャーのように、通知が来たときに点滅するだけでいいのですが、
これってWin32API叩くしかないんでしょうか・・・。
0489デフォルトの名無しさん
NGNGなるねー。
.NET2.0ならFlashメソッドってのがあるんだけど。
0490488
NGNG0491デフォルトの名無しさん
NGNGあの画びょうのマークのついたドッキングウィンドウ・コンポーネントと、
プロパティを設定するためのコンポーネント(VS右下の、Nameとか設定できる奴)を
探していますが見つからない。
0492デフォルトの名無しさん
NGNGとりあえず
> プロパティを設定するためのコンポーネント(VS右下の、Nameとか設定できる奴)を
はPropertyGridだな。こいつは.NET Framework標準。
ドッキングウィンドウは……the Code Projectにあったようななかったような。
0493デフォルトの名無しさん
NGNGを
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");
}
にしたところ、エラー音が出るようになりました(処理は正常に行われてるっぽい) なぜでしょう・・・?
0494デフォルトの名無しさん
NGNGDockPanelSuite http://sourceforge.net/projects/dockpanelsuite/
無償でオープンソース。現在ベータ版で、メニューの統合がうまくいかないなどバグが残る。
DotNetMagic http://www.dotnetmagic.com/
機能的にはおそらく最強。でも有償。
MagicDocking http://www.codeproject.com/cs/miscctrl/dockingmanagerextender.asp
DotNetMagic の旧バージョン。ライセンスはよくわからん。
SharpDevelopに使われるなど実績あり。
Docking Suite http://www.divil.co.uk/net/controls/dockingsuite/
現在ベータ版。非商用利用に限り無償。
代表的なところでは、こんなものか。見た目や動きが微妙に違うので、実際に使ってみて選んだ方がいい。
0495デフォルトの名無しさん
NGNG1:TcpClient を使っているとき、サーバから切断されたことをすぐに知るにはどうすればいいか
2:異常切断されたときイベントなどで通知することを考えているが、
通常切断したときも同じイベントを発行したほうがライブラリを使う側にとって便利なのかどうか
ちょっとアンケートがましいですが意見をお聞かせくださいm(_ _)m
0496デフォルトの名無しさん
NGNG1,
byte[] byteAry = 受信データ;
if ( byteAry.Length <= 0 )
{ パイプカット }
2,
ライブラリがエラーの処理をどこまでするかによるんじゃないでしょうか
でしゃばってスマソ
0497デフォルトの名無しさん
NGNG1.物理的に切断を瞬間的に不可能。
TCPのキープアライブ使ってもいいが融通がきかん、自分でキープアライブパケット投げるようにしておけ。
2.同じイベントでも(・∀・)イイ!!が、通常なのか異常なのかわかるようにしておけ。エラー原因などもプログラムで扱えるよう定義してふんだんな情報を送っておけ
以上。
0498杏仁
NGNGいま、Cで作成されたDLLをDllImportで呼び出しています。
そのDLLの仕様を見ると関数は
void hoge(UINT *pWidth, UINT *pHeight);
とポインタで呼び出していました。
[DllImport("hogehoge.dll")]
public static extern void hoge(int w, int h);
としても当然うまくいきませんでした。
C#でこのような場合ようやってDllImportすればいいのでしょうか?
お手数ですが、お教えください。よろしくお願いします。
0499デフォルトの名無しさん
NGNGref System.UInt32 にする。
(まぁ小さげな値だろうから ref System.Int32 でもいいだろうけど)
0500デフォルトの名無しさん
NGNGSystem.Runtime.InteropServices.Marshal.AllocCoTaskMemでメモリを確保、
System.Runtime.InteropServices.Marshal.WriteInt32で確保したメモリに書き込み、
関数に渡す。
結果をSystem.Runtime.InteropServices.Marshal.ReadInt32で読み込んで
System.Runtime.InteropServices.Marshal.FreeCoTaskMemでメモリを破棄する。
uint*程度でやる事じゃありません。
0501デフォルトの名無しさん
NGNGこれがよくもあり悪くもあり。
0502杏仁
NGNG>>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
回答していただいたのにさっぱり・・・。
もう少し分かりやすくお願いできますでしょうか?
最近始めたばかりで、さっぱり右も左も分からない状態です。
よろしくお願いします。
0503デフォルトの名無しさん
NGNGヘルプでrefキーワードぐらい調べようよ〜。
呼び出す時もrefキーワードが必要。
hoge(ref w, ref h);
500はただのジョークだから。こんな手段もあるよってだけ。
//と最後の行で言ったつもりだったんだけど。
0504デフォルトの名無しさん
NGNG蛇足の補足。たぶんこの場合は関係ないだろうけど、ポインタ値が指す領域にある値だけではなく、
そのものに意味がある場合には、System.IntPtr 型にしておいて、ポインタの指す先のアクセスは
>>500 風にやるようなこともある、ってのが >>501 ね(たぶん)。
例えば hoge の正体が hoge(UINT* w, UINT* h) { delete [] w; delete [] h; } みたいな場合とか。
0505デフォルトの名無しさん
NGNG↑
「ポインタ値そのものに意味がある」の編集ミスですた。
0506デフォルトの名無しさん
NGNGprivate void pictureBox1_MouseWheel(object sender, MouseEventArgs e)
{
Console.WriteLine(e.Delta);
}
と記述してるのですが、マウスホイールくるくるしてもpictureBox1_MouseWheelイベントが発生してくれません。
そもそもなんで、MouseWheelだけは手動で書かないといけないのかと(ry
0507デフォルトの名無しさん
NGNGConsole.WriteLine();を、MessageBox.Show("","");
にしても駄目?
0508506
NGNGブレークポイントしかけても反応してくれません。
Panelの上に張ってるのでPanelにもイベントハンドらを記述したのですが
どっちもイベントが発生しないみたいです。
0509デフォルトの名無しさん
NGNG>Control.MouseWheel イベント
> コントロールにフォーカスがあるときにマウス ホイールが動くと発生します。
PictureBoxやPanelはユーザの通常操作ではフォーカスを得る事はない。
0510508
NGNGMouse_EnterしたらFocus()するようにするとうまくいきました。
お騒がせしました。
0511デフォルトの名無しさん
NGNG文法などを一通り理解したら次は何をすべきなんでしょうか?
guiアプリケーションを作れる人は文法などを理解したら次は何をしたんですか?
0512デフォルトの名無しさん
NGNGGUIパーツをいろいろ試したり細かいプロパティ・メソッドを調べたり
非GUIなクラスの使い方を覚えたりどんなクラスが存在するのかを調べたり。
0513デフォルトの名無しさん
NGNG作りたいものを作れ。手を動かせ。
「習うより慣れろ」ということわざがあるが、
プログラミングの場合「習ったら慣れろ」ってところか。
0514デフォルトの名無しさん
NGNGタブ型メモ帳を作ろうとしてお世話になったのが自分なのですが。
MSDNライブラリをみながら作るだけではちょっとムリがあるかなと思いました。
0515495
NGNG亀ですが�dくすです。
む〜。実際にデータ送らないと切断検出できないですか〜。
送信、受信が別スレッドに分かれているんで、リターンを待つ同期に一苦労^-^;
0516デフォルトの名無しさん
NGNG送信と受信を一つのスレッドでやるとエライ事になるよw
あとTcpClientは結構ゴミだからクライアントアプリでもSoket使った方がいいかも。
0518デフォルトの名無しさん
NGNGNetworkStreamでしか送受信出来ない、細かい制御(受信側のみ切断とか)も出来ない
ついでに非同期送受信も出来ない・・・
TcpClientで作っても後々書き直すことになると思うw
0520495
NGNGこのクラスの中身だけ変えればおkだわ
0521デフォルトの名無しさん
NGNGこんな感じで送受信してます、たまにデータが続けざまに来るとエラーでるんですが、どうしたらよいでしょう・・・。
0522デフォルトの名無しさん
NGNGBeginReceiveしてEndReceiveした後は、また非同期受信するなら再度BeginReciveしないと駄目なような・・・
それにこの用途ならNetworkStream使った方が楽かも・・・(俺ならそうするw)
あと、一度の受信でバッファ全部捨ててるけど、
非同期受信は何バイト受信するかわからないから、先取りしたデータは捨てるんじゃなくて
プールしてその上でさらにバッファを貯めるみたいにすべき。
あと(ぉ終了処理はShutdownの後でCloseしよーw
0523521
NGNGNetworkStream調べてみます〜
>あと、一度の受信でバッファ全部捨ててるけど、
>非同期受信は何バイト受信するかわからないから、先取りしたデータは捨てるんじゃなくて
>プールしてその上でさらにバッファを貯めるみたいにすべき。
int recBytesSize = socket.EndReceive( ar );
↑で受信データサイズ抜いた時点で必要とするbyte配列は確定してない・・・ということですか?
0524495
NGNGおまいは俺か?
0525杏仁
NGNGありがとうございました。おかげで動作しました。
もう一つ質問なのですが、DLLの仕様を見ると
BYTE *HOGE()
という関数があります。
この場合は、どうやって呼び出せばいいでしょうか?
よろしくお願いします。
0527デフォルトの名無しさん
NGNGやりっぱなしじゃ駄目?
0528527
NGNG0529デフォルトの名無しさん
NGNG0530デフォルトの名無しさん
NGNG0531デフォルトの名無しさん
NGNG0532デフォルトの名無しさん
NGNGそれとも今世界のどこかから自分のMAC抜かれたいのだろうか
0533デフォルトの名無しさん
NGNG0534デフォルトの名無しさん
NGNG0535デフォルトの名無しさん
NGNGpingパケットにその情報があるか見てみれば?
0536デフォルトの名無しさん
NGNGメンバ関数のオーバーライドがうまくいきません。
C#のクラス↓
public abstract class ClassCS
{
public abstract void Func(ref int c);
}
void FuncC(int __gc& C) や void FuncC(int &C) ではだめでした。
この関数FuncをオーバーライドするにはC++でどのように記述すればいいんでしょうか?
0537デフォルトの名無しさん
NGNGそれはもう関数次第としか言えない。
>500みたいなことをする可能性が高いが。
>>536
ええとポインタを引数に取るんだからvoid FuncC(int* c)じゃないのかな。
0538デフォルトの名無しさん
NGNGそれだと、同一ネットワーク内ならOKだけど、L3装置かましたときに中継点のMACになるような
0539杏仁
NGNG>それはもう関数次第としか言えない。
画像バッフアのアドレスが格納されて帰ってくる関数みたいなのですが・・。
> >500みたいなことをする可能性が高いが。
・・・・。大変そうですね。私にできるかどうか・・・。
サンプルとか参考になるサイト等ありますでしょうか?
0540デフォルトの名無しさん
NGNG関数次第なんだからサンプルも何もないと思うけど?
0541デフォルトの名無しさん
NGNGunsafe で IntPtr を byte* にでもキャストして、画像バッファのメモリをアクセスすれば良いと思う。
メモリの中身にアクセスする必要がないなら、IntPtr で受け取っておいて、他に渡す必要があるなら
また IntPtr で渡してあげるだけ。
Susie のプラグインを C# から使いたいとか、そういうことですか?
0542杏仁
NGNG解答ありがとうございます。
ん〜。勉強不足で折角の解答の意味があまり理解できずに申し訳ありません。
とりあえず、IntPtrをもう少し勉強してみます。
>Susie のプラグインを C# から使いたいとか、そういうことですか?
画像入力ボードのDLLを使って画像の取り込みを行いたいと思っています。
0543デフォルトの名無しさん
NGNG現在、既存システム(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などを返す関数は作れないのでしょうか?
0544デフォルトの名無しさん
NGNGmanaged C++ やろうぜ!!
http://pc5.2ch.net/test/read.cgi/tech/1014486422/
//沈んでるなぁ……。
0545536
NGNG>ええとポインタを引数に取るんだから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();
}
0546デフォルトの名無しさん
NGNG大阪(西梅田)、新宿(JR駅前)のそれぞれ一等地に
拠点を構え、業績急上昇中!未経験者大募集中!の
ソフトウェア開発会社
グリーンシステムを応援するHPです。
http://www.geocities.jp/grs_hp/
このスレの読者の人のような、レベルの高い人にぴったりかと
思います。
最高の会社にするため、みんな頑張ってます!
0547デフォルトの名無しさん
NGNG思います。
最高の会社にするため、みんな頑張って2chに投稿してます!
0548デフォルトの名無しさん
NGNG俺はチョコレート嫌いでチーズケーキ好きだから無理ぽ(´・ω・`)
■ このスレッドは過去ログ倉庫に格納されています