トップページ⇒tech
1001コメント308KB

C♯, C#相談室 Part35

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/11/03(金) 03:07:45
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。

前スレ
C♯, C#相談室 Part34
http://pc8.2ch.net/test/read.cgi/tech/1157549657/

過去スレは>>2-5あたり。
※スレタイに「#」を入れても消えちゃうので新スレ立てる人は要注意だ。
0751デフォルトの名無しさん2006/12/02(土) 15:47:33
デリゲートはデリケートな説明が必要だからな
0752デフォルトの名無しさん2006/12/02(土) 15:51:36
いい加減そのだじゃれ飽きたYO
0753デフォルトの名無しさん2006/12/02(土) 16:28:56
エディタを作っていて、TeraPadのように、行番号と桁数を表すルーラー
をつけたいと思うのですが、どのように実装すればいいでしょうか?
0754デフォルトの名無しさん2006/12/02(土) 17:25:29
Controlを継承して、ひたすら描画する。
C#でかかれたテキストエディタって、どこかにないのかな?
かなりP/Invokeを自分でラップすることになると思うんだけど・・
0755デフォルトの名無しさん2006/12/02(土) 17:46:11
DataGridViewで、
SelectionModeにFullRowSelect
を設定してるとき、選択されるのは行単位で、SelectedCellsも
その行のセルすべてになってるけど、これを本当にクリックして選択してる
1セル(点々で囲まれてるセル)を知るにはどーすればいいでしょう?

0756デフォルトの名無しさん2006/12/02(土) 18:04:59
全て選択されているが答えじゃないのか?
0757デフォルトの名無しさん2006/12/02(土) 18:14:03
>>750
C/C++でいうところのの関数ポインタだよというとか。
1メソッドInvokeだけを含むインターフェースだよというとか。
0758デフォルトの名無しさん2006/12/02(土) 18:20:24
>>755
>これを本当にクリックして選択してる
間違いじゃないかな。

アクティブ≠選択している

DataGridView.CurrentCellAddress あたりじゃないかなと勘で答える。
0759デフォルトの名無しさん2006/12/02(土) 18:26:08
>>757
関数ポインタ知らない奴結構いるよ…
俺も使ってないし。
0760デフォルトの名無しさん2006/12/02(土) 18:37:23
>>758
これのこと!!
どうもありがとう!
07617532006/12/02(土) 18:40:31
>>754
ありがとうございます。でも意味が全然分かりません・・・
どこかにソースが転がってないか探してみます。
0762デフォルトの名無しさん2006/12/02(土) 18:41:13
>>760
そりゃよかった。
適当に答えたけどあたってて良かった。
俺は知識無かったけどMSDN探せば簡単に見つかったよ。
0763デフォルトの名無しさん2006/12/02(土) 18:45:05
TreeViewをそのままxmlに書き出すのって簡単に出来ますか?
0764デフォルトの名無しさん2006/12/02(土) 18:49:36
そんなに手間ではない
0765デフォルトの名無しさん2006/12/02(土) 18:56:24
>>764
そうですか

XmからTreeViewへのサンプルコードはたくさんあるんですが
逆は全く無いので難しいのかと思ってました、もうちょっと探してみます

ありがとうございました
0766デフォルトの名無しさん2006/12/02(土) 19:10:39
それがわかるんならxml.saveをすればいいものを最初から作るのか。ご苦労な話だな。
0767デフォルトの名無しさん2006/12/02(土) 19:20:05
>>766
まんまコピーして使っているので仕組みを理解してません
ちょっと改造すればできるんですか?
0768デフォルトの名無しさん2006/12/02(土) 19:29:07
改造?なんの話だよ。xmlとTreeViewの同期がとれてるんなら
xmlの保存だけで事は済むってことだろ。
0769デフォルトの名無しさん2006/12/02(土) 19:55:51
C#で実用的なテキストエディタを作成することは不可能です。
0770デフォルトの名無しさん2006/12/02(土) 19:56:16
そんなことはない。
0771デフォルトの名無しさん2006/12/02(土) 20:07:36
絶対に不可能です。
0772デフォルトの名無しさん2006/12/02(土) 20:16:24
確かに実用的なものは作れないでしょうね
0773デフォルトの名無しさん2006/12/02(土) 20:23:57
>>768
xmlに元々あるデータは保存できるのですが
新しいノードを作ると反映されないのです
0774デフォルトの名無しさん2006/12/02(土) 20:24:12
粘着はかえれ☆
0775デフォルトの名無しさん2006/12/02(土) 20:47:27
一言で表すと、メソッド用インターフェースかな?>デリゲート
0776デフォルトの名無しさん2006/12/02(土) 20:49:30
どちらかというとメソッドそのもののほうに近いだろ。
0777デフォルトの名無しさん2006/12/02(土) 20:54:24
>>772
不可能化可能かでいったら十中八九可能だと思うよ。
意味がないだけで。
0778デフォルトの名無しさん2006/12/02(土) 20:58:23
粘着野郎へ

俺は見つけたぞ!!
しかもソースまである。

ググレカス!
0779デフォルトの名無しさん2006/12/02(土) 20:59:16
需要あると思うよ。
テキストエディタ単体としてではなく、テキストエディタコンポーネントとして。
0780デフォルトの名無しさん2006/12/02(土) 21:03:18
>>779
死ぬほどメソッドがあるコンポーネントだろうけどな。
0781デフォルトの名無しさん2006/12/02(土) 21:04:58
次はC#でieコンポーネント使わないインターネットブラウザが作れないって言うだろうね
0782デフォルトの名無しさん2006/12/02(土) 21:24:01
テキストエディタのソースの
目的の場所までたどり着く自信がない。orz
0783デフォルトの名無しさん2006/12/02(土) 21:42:33
>>778
今まで検索してましたけどありませんでしたから
多分試したやつだと思います
0784デフォルトの名無しさん2006/12/02(土) 21:54:48
>>779
コンポーネントとして使えればいいんなら C++(/CLI) で作るよ。
だから「意味がない」なんて言い回しになるわけで
0785デフォルトの名無しさん2006/12/02(土) 21:55:01
粘着野郎 = >>769
0786デフォルトの名無しさん2006/12/02(土) 22:04:02
キモイやつだな
0787デフォルトの名無しさん2006/12/02(土) 23:05:14
テキストエディタのソース見てるが思ったよりあっさりしてる。

これで行番号とかアイコンとか出せるんだな…
07887532006/12/02(土) 23:17:07
>>787
よかったらURL教えてください。

http://sharpdevelop-jp.sourceforge.jp/index.php?SDJEditor
↑見つけたのですが行番号とルーラーのソースどれか分かりません・・
0789デフォルトの名無しさん2006/12/02(土) 23:17:34
ソース見る限りでは自前ドローも簡単そうに見える…
tipsゲット!!

でも自分でいちから書くにはしっかりした設計が必要だな
0790デフォルトの名無しさん2006/12/02(土) 23:22:31
ソースの読み方研究しようね。
OnPaint で検索しろ。

GutterMargin.cs
HRuler.cs
0791デフォルトの名無しさん2006/12/02(土) 23:34:37
ソースおもろかった。
いろいろ勉強になった。
データ構造も面白かった。
昔Cオンリーで書いてたころと大違いだな。

実装の参考になる。
テキストもキャレットも選択部分も自前で書く参考になる。


おもしろい。
0792デフォルトの名無しさん2006/12/02(土) 23:47:24
アプリケーション起動時に最初に呼ばれるフォームを
外部の設定ファイルに応じて自由に変える機能を作りたいのですが
方法はないでしょうか?
0793デフォルトの名無しさん2006/12/02(土) 23:50:05
mainで設定読んで選択したフォームのインスタンス作るだけ。
0794デフォルトの名無しさん2006/12/02(土) 23:50:33
>>792
サイズ0のメインウィンドウを作る
07957532006/12/02(土) 23:55:32
>>790
ありがとうございます。とても参考になりそうです。

みんなはなんのソースを見てるんだろう?
0796デフォルトの名無しさん2006/12/02(土) 23:57:59
うぎゃー!
ソリューションの関連先がかわってしまった!
しばらく沈黙します。
0797デフォルトの名無しさん2006/12/03(日) 00:00:45
またまた質問なんですが、TreeViewのコレクションデータを保存するには
どういったやり方があるのでしょうか?
次に起動したときに読み込みたいのです
0798デフォルトの名無しさん2006/12/03(日) 00:04:19
serialize
0799デフォルトの名無しさん2006/12/03(日) 00:13:32
>>798
その方法だと
シリアル化できない設定ですってエラーがでるんです
0800デフォルトの名無しさん2006/12/03(日) 00:23:38
RTFM
0801デフォルトの名無しさん2006/12/03(日) 00:27:22
ttp://ya.maya.st/web/RTFM.html
ttp://module.jp/blog/RTFM_Hell.html
ttp://oldriver.org/torumemo/065.html
0802デフォルトの名無しさん2006/12/03(日) 00:45:08
そういわれても…
TreeViewを継承して[Serialized]でもできませんでしたし・・・

[NonSerialized()]も使わなきゃいけないんですか?
0803デフォルトの名無しさん2006/12/03(日) 00:58:18
private void button1_Click( object sender, EventArgs e )
{
    List<TreeNode> lst = new List<TreeNode>();
    foreach( TreeNode node in this.treeView1.Nodes )
    {
        lst.Add( node );
    }

    BinaryFormatter bf = new BinaryFormatter();
    using( FileStream fs = new FileStream( "unko.dat", FileMode.Create ) )
    {
        bf.Serialize( fs, lst );
    }
}

private void button3_Click( object sender, EventArgs e )
{
    BinaryFormatter bf = new BinaryFormatter();
    List<TreeNode> lst;
    using( FileStream fs = new FileStream( "unko.dat", FileMode.Open ) )
    {
        lst = (List<TreeNode>)bf.Deserialize( fs );
    }
    this.treeView1.Nodes.AddRange( lst.ToArray() );
}
0804デフォルトの名無しさん2006/12/03(日) 01:04:13
>>802 も >>803 も考え違いしてるよう棚。
0805デフォルトの名無しさん2006/12/03(日) 01:07:34
自分でTreeViewのコレクションデータって書いているはずなんだがなあ?
0806デフォルトの名無しさん2006/12/03(日) 01:48:12
TreeViewをそのままシリアライズして保存するという発想は危険なのでやめたほうがよい
何を永続化する必要があるのかをよく考えるべき。
0807デフォルトの名無しさん2006/12/03(日) 02:47:40
Cで書いたプログラムを.NET(C#)に移植しているのですが、C#からNDdeShareAddという
nddeapi.dllのAPIを使おうと下記のように書いてみたのですが、呼び出し時にインスタンスが
なんたらとかいうエラーが出てしまいます。
たぶん構造体の受渡に失敗しているような気がするのですが、みなさん助けてください(><)

[StructLayout(LayoutKind.Sequential, Pack=1)]
public struct NDdeShareInfo {
  public long   lRevision;
  public char[] lpszShareName;
  public long   lShareType;
  public char[] lpszAppTopicList;
  public long   fSharedFlag;
  public long   fService;
  public long   fStartAppFlag;
  public long   nCmdShow;
  public long[] qModifyId;
  public long   cNumItmes;
  public string lpszItemList;
}

[DllImport("nddeapi.dll", EntryPoint="NDdeShareAdd", CharSet=CharSet.Ansi)]
public static extern uint NDdeShareAdd(
  string lpszServer,
  int    level,
  ref    SecurityDescriptor  pSD,
  ref    NDdeShareInfo lpNDdeShareInfo,
  long   cbShareInfo
);
0808デフォルトの名無しさん2006/12/03(日) 03:36:19
dataGridViewで、
0,2,3,5列目
の値がそれぞれ
hoge0, hoge2, hogeee, hoge
の行を探す

みたいな機能はdataGridViewにはないですか?

もしくは、
0,2,3,5列目
の値がそれぞれ
hoge0, hoge2, hogeee, hoge
だったらtrueを返す
みたいな比較メソッドはないですか?
0809デフォルトの名無しさん2006/12/03(日) 06:16:49
>>807
MSDN の「アンマネージ コードとの相互運用」以下を嫁。
型のサイズがめちゃくちゃだ。
そう言えば Vista では NetDDE 完全廃止らしいな。

>>808
そんなのが標準で用意されてたら却ってイヤだ。
素直にループ回せ。
0810デフォルトの名無しさん2006/12/03(日) 07:34:43
すみません、よろしければ教えてくださいませ。

まだC#でプログラミングしてはいないのですが、その前に既存の Word2003 が
インストールされているところへ、

 ・ .NET Framework 2.0
 ・ Visual C# 2005 Express Edition 日本語版 

をインストールしたところ、 Word2003 が起動するときによくわからないエラー
が出るようになってしまいました。(そのエラーメッセージをエンターで解除した
あとは Word2003 自体は使えていました)

そうこうするうちに、Word2003 の使用頻度が高くなり、一方 C# の緊急度が下がり、
逆に別のアプリケーションを入れる関係で  .NET Framework 1.1 の導入の必要が
出て、一旦 C# も .NET Framework 2.0 もアンインストールしてしまいました。

すると Word2003 の起動時に出ていたエラーは出なくなりました。

今度また C# や VB.NET を学習するために再び同様にインストールしようと
考えているのですが、同じ問題が起こるとちょっと困るなと思いました。

出ていたエラーメッセージは記録していなかったのですが、こうしたことは起こるもの
でしょうか?それとも Express Edition  であったために起こった問題の可能性もある
でしょうか?申し訳ないですが、よろしければ教えていただけたらありがたく。

環境: Windows2000 (Updateはネット経由で随時更新)
0811デフォルトの名無しさん2006/12/03(日) 07:42:36
エラーの内容もないのに答えられるわけ無いが、
大抵はインストールする人が変なコトしたからだろう。

あと .NET 1.1 入れるからって .NET 2.0 消す必要も意味もないぞ。
別物だから。
0812デフォルトの名無しさん2006/12/03(日) 07:54:15
>>811
さっそくどうもです。助かります。

.NET Framework 2.0 や C# Express を入れるときにトラブルしたり
その他のNG等が出たわけでもなく、すんなり普通に終わっていたかと思います。

そこで思いましたのは、もしかしたら Express を入れるとそうなってしまうのか
ということでした。製品版だと問題ないのだとしたらしょうがないのかなと。

>.NET 1.1 入れるからって .NET 2.0 消す必要も意味もない

あ、そうだったのですか!問題起こすといけないと思って抜いてしまいました。
だとすると これからこのまま 2.0 入れてしまえばいいわけですね。

それでその上で
 Visual C# 2005 Express Edition 日本語版
や同 VB.NET Express も入れてしまえばよいと。

ありがとうございました。またやってみてわからないことが出たら教えてください。

大変どうもでした。
0813デフォルトの名無しさん2006/12/03(日) 10:59:28
XmlNode rootXmlNode = myXmlDocument.DocumentElement.FirstChild;

でXMLのルートノードの最初の子を取り出せますよね?
その次の子が欲しい場合は

rootXmlNode = myXmlDocument.DocumentElement.FirstChild.NextSibling;

で取り出せるんですけど、次の子がnullになるまで取り出したい場合、

 XmlNode rootXmlNode = myXmlDocument.DocumentElement.FirstChild;
 (rootMxlNodeを使った処理)
 if(rootXmlNode = myXmlDocument.DocumentElement.FirstChild.NextSibling != null)
 {
    rootXmlNode = myXmlDocument.DocumentElement.FirstChild.NextSibling;
    (rootMxlNodeを使った処理)
       if(myXmlDocument.DocumentElement.FirstChild.NextSibling.NextSibling != null)
       {
           rootXmlNode = myXmlDocument.DocumentElement.FirstChild.NextSibling.NextSibling
           (rootMxlNodeを使った処理)
       }   
                    ・
                    ・
                    ・               
  }   

ってやらなきゃいけないんですか?
For文を使うわけにはいけないし・・・
他にいい方法ないですかね?
0814デフォルトの名無しさん2006/12/03(日) 11:01:02
>>813
無能っぽく再帰でもしてろよボケ
0815デフォルトの名無しさん2006/12/03(日) 11:11:55
これ→myXmlDocument.DocumentElement.FirstChild が
ファイル読み込みなので再帰の方法が思いつかないんですが
こういう場合でもできますか?
0816デフォルトの名無しさん2006/12/03(日) 11:12:27
while( >>813 == nurupo )
{
 Console.WriteLine( "ふらっとC♯, C#(初心者用) Part10" );
 Console.WriteLine( "http://pc8.2ch.net/test/read.cgi/tech/1162193452/"; );
 Console.WriteLine( " へどうぞ" );
}
0817デフォルトの名無しさん2006/12/03(日) 11:34:54
>>793 794
ありがとうございました。
0818デフォルトの名無しさん2006/12/03(日) 11:36:34
>>815
rootXmlNode = myXmlDocument.DocumentElement.FirstChild;
do{
//
}while(null!=(rootXmlNode = rootXmlNode.NextSibling));
0819デフォルトの名無しさん2006/12/03(日) 11:41:27
>>813
foreach(rootXmlNode in myXmlDocument.DocumentElement.ChildNodes){
//
}
0820デフォルトの名無しさん2006/12/03(日) 12:06:05
>>818
>>819
ありがとうございます
0821デフォルトの名無しさん2006/12/03(日) 13:05:15
>>811さん
すみませんが、ついでにもう一つ教えてくださいませ。申し訳ありません。

もしかして、.NET は Windows2000 はサポート外ではないですよね
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetdep/html/ndp2_prere.asp
では

 Microsoft Windows 2000 Professional with SP4

がありましたのでOKのようですが、今 Microsoft のサイトを見ましたら、
現在の Framework の最新バージョンは 3.0 になっていました、それで対応OSに関しては

http://www.microsoft.com/japan/msdn/windowsvista/general/netfx30.aspx
-------------------------
.NET Framework 3.0 の導入
このセクションでは、.NET Framework 3.0 を導入してアプリケーションで使用する方法について説明します。

ソフトウェア要件
.NET Framework 3.0 をインストールするには、対象のコンピュータに次のいずれかのオペレーティング システムがインストールされている必要があります。

Microsoft Windows XP Home または Microsoft Windows XP Home Professional、Service Pack 2 以降
Microsoft Windows Server 2003 ファミリ、Service Pack 1 以降
-------------------------

とありました、これは 3.0 以降はこのバージョン以上からしか対応しない
ということになるでしょうか?Windows2000 は安定性がいいのでずっと使っていましたが、
.NET 3.0 以降が必要な場合は上記OS以上に Upgrade しないといかんということになる
でしょうか?
0822デフォルトの名無しさん2006/12/03(日) 13:25:23
>>821
その通り。
WinFX改め.NET3.0からは2kサポートがドロップされてる。
0823デフォルトの名無しさん2006/12/03(日) 13:25:50
そだよ 3.0 は XPSP2 以降限定
2.0 までは Win98 以降
あと今更 2k の方が安定性がとか無い
0824デフォルトの名無しさん2006/12/03(日) 13:58:15
>>822さん、>>823さん

早速にどうもです。

そうだったんですか、うーん。

早急な Upgrade はまだとしても、いずれはやらないと
いけないんですね。わかりました。
とりあえずは 2.0 を入れて VS2005 を勉強してみます。

どうもありがとうございました。

>あと今更 2k の方が安定性がとか無い

そうでしたか、自分がいた会社でも去年ぐらいまではずっと
これを言っていて業務用は2000で統一していたりしていました。

ありがとうございました。

それではまたよろしくお願い致しますです。
0825デフォルトの名無しさん2006/12/03(日) 14:43:14
>>824
それは機材の更新を先延ばしにしたい鯖缶の常套句
0826デフォルトの名無しさん2006/12/03(日) 15:52:42
カネないのがモロバレ
08278072006/12/03(日) 16:10:50
>>809
なるほど。
ループさせます。どうもありがとう。
0828デフォルトの名無しさん2006/12/03(日) 18:00:23
>>826
金ないのもあるだろうがむしろ

め ん ど く さ い 仕 事 増 や す な

だと思う > 鯖缶
0829デフォルトの名無しさん2006/12/03(日) 18:13:55
#FTP

C#には、FTPサーバにファイルを
アップデートする方法(クラスライブラリ)
があるのでしょうか。
0830デフォルトの名無しさん2006/12/03(日) 18:46:02
>>829
当然MSDNぐらいは検索したんだろうな?
0831デフォルトの名無しさん2006/12/03(日) 20:03:31
>>830
すいません、MSDNってなんですか?
0832デフォルトの名無しさん2006/12/03(日) 20:10:48
>すいません、MSDNってなんですか?
>すいません、MSDNってなんですか?
>すいません、MSDNってなんですか?
>すいません、MSDNってなんですか?
>すいません、MSDNってなんですか?
0833デフォルトの名無しさん2006/12/03(日) 20:13:27
( ゚д゚) ポカーン
0834デフォルトの名無しさん2006/12/03(日) 20:16:57
MSDN知らずにどうやって開発するんだろ?
0835デフォルトの名無しさん2006/12/03(日) 20:25:36
VSのヘルプで検索でおk
0836デフォルトの名無しさん2006/12/03(日) 20:35:51
VSとは一体…
すみません初心者なので略されると学習できません
おはずかしいのですが
0837デフォルトの名無しさん2006/12/03(日) 20:37:57
ぽまえら釣られ杉
0838デフォルトの名無しさん2006/12/03(日) 20:46:54
MasterSystemDominantNormalization

Virtuoso Sound
0839デフォルトの名無しさん2006/12/03(日) 20:56:42
VSはVirtual Sexだろ
0840デフォルトの名無しさん2006/12/03(日) 20:57:20
Visual Studio
0841デフォルトの名無しさん2006/12/03(日) 21:19:25
>>836
飽きたのでマジレス。まず、ここは初心者スレ(ふらっとスレ)ではないです。
ましてや「C#初心者」よりもっと前の段階の人なんて初心者スレでもお断りです

入門書でも買ってそこからはじめてください。
0842デフォルトの名無しさん2006/12/03(日) 21:25:01
MSDN以前にGoogleは知ってるよな、まさか
0843デフォルトの名無しさん2006/12/03(日) 22:57:24
ここは何だかんだで初心者に優しいスレですね。
0844デフォルトの名無しさん2006/12/03(日) 23:02:01
>>842
検索はYahooで行っています。
なにか、問題ありますか?
0845デフォルトの名無しさん2006/12/03(日) 23:04:56
>>844
問題ないから他所に池
0846デフォルトの名無しさん2006/12/04(月) 00:31:38
ストアドプロシージャの出力パラメータ(@ErrCode)を
変数に格納する作業をしたいのですがエラーが発生します。

string ErrCode = "";
"DECLARE @ErrCode exec [STP_SelectKoshinSiire] @ErrCode OUTPUT SET @ErrCode = " + ErrCode;

どこか間違っていますでしょうか?
0847デフォルトの名無しさん2006/12/04(月) 00:39:14
>846
基本がナットラン・・・
0848デフォルトの名無しさん2006/12/04(月) 00:44:10
このスレでは代入式まで教えなくちゃいけないの?
たぶんコンパイラも呆れてるよ?

x = y;
右辺yを左辺xに代入
0849デフォルトの名無しさん2006/12/04(月) 01:02:12
DECLARE @ErrCode INT exec [STP_SelectKoshinSiire] @ErrCode OUTPUT SET " + ErrCode + " = @ErrCode
エラーメッセージ
=付近に不適切な構文があります。

となってしまいます。
0850デフォルトの名無しさん2006/12/04(月) 01:06:21
>>812
Visual Studio 2005のスレがあるから、次からはそちらへ。
■ このスレッドは過去ログ倉庫に格納されています