ふらっとC♯(Part5)

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

「どんなにくだらない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
C♯相談室 Part11
http://pc2.2ch.net/test/read.cgi/tech/1061262958/

@IT Insider.NET
http://www.atmarkit.co.jp/fdotnet/index.html
Insider.NET 会議室 ディレクトリ
http://www.atmarkit.co.jp/fdotnet/index/bbs/index.html
宇宙仮面の C# プログラミング / C# Programming
http://ukamen.hp.infoseek.co.jp/
C#入門
http://black.sakura.ne.jp/~third/cs.html
GotDotNet Japan 掲示板
http://www.gdncom.jp/general/bbs/
どっとねっとふぁん
http://homepage3.nifty.com/dotnetfan/index.html
初めてのC# 〜 覚え書き 〜
http://homepage3.nifty.com/midori_no_bike/CS/
どぼん!の .NET Tips
http://dobon.net/vb/dotnet/
4デフォルトの名無しさん:03/10/04 04:35
今Microsoft Web Browserコンポーネント上に表示したWEBサイトの
テキストボックスにIDやパスワードなどを自動的に入力できるソフトを
作っていてる者です。

user32.dllのGetGUIThreadInfo関数を使って
WEBサイトのテキストボックスのキャレット(チカチカするカーソル)
の位置を取得するところまではできたのですが、その取得したキャレット位置に指定した文字
(ID、パスワードなど)を入力(ペースト)する方法が分からず困ってます。
どうすればいいのでしょうか? 
>>4
方向性がおかしい。DHTML方面から攻めるといい。
C#厨もこれ見て目を覚ませ
http://movies.livedoor.com/soft/asx/lin_500.asx
>6
こんなの見たらWindowsのままでいいと思うぞ
>>6
寝起き悪いなぁ。
っていうか、マルチポストうぜぇ。
>>4
タブブラウザなどでそういうのに対応したスクリプトあるから
参考にしてみたら。
たぶんGetGUIThreadInfoなんか必要ないと思う。
10デフォルトの名無しさん:03/10/04 16:30
Rectangle型の四角形の座標内に
Point型の座標が含まれているか、
ということを調査する定石があったような気がするのですが
思い出せません。
教えてもらえませんか?
それとももしかして勘違いで自前で
座標を比較して判断するのが普通でしょうか?
よろしくお願いします。
>>10
Rectangle.Contains使えよ。
プロパティのアクセスはオーバーヘッドがかなり大きいから
自前で実装したらその定石とやらがどんなにすぐれたアルゴリズムでも速度は出ないぞ。
124:03/10/04 17:05
いやー釣れた釣れたw
>11
プロパティのオーバーヘッドってどういう理屈なの?
1410:03/10/04 19:13
>>11
ばっちりそのもののようです。
ヘルプで見落としたみたいです。
やっぱりあったみたいですね。
ありがとうございます。

>>13
プロパティの値を取得しようとした時に
プロパティのget部分に書いてあるメソッド等が
呼び出されるってことじゃないでしょうか?
私の>>10の例だと対象座標と比較する為になんども
Rectangle型のXメンバやYメンバにアクセスることかな、と思います。

1513:03/10/04 20:15
>14
そういうことか。ありがとう。
16デフォルトの名無しさん:03/10/04 22:05
http://sourceforge.jp/softwaremap/trove_list.php?form_cat=160
  1 146   C
  2 119   C++
  3  90   Java
  4  55   PHP
  5  44   Ruby
  6  32   Perl
  7  24   Delphi/Kylix
  8  21   Other
  9  17   Assembly
 10  16   Python
 11  13   Objective C <--------C++に敗北して廃棄状態
 12  12   C# <--------超負け組み
 13  7   Unix Shell
 14  5   Tcl
 15  5   Lisp
 16  4   Visual Basic <--------廃棄処分
Cがトップな時点で何の参考にもならんw
C#もずいぶん普及したな。
ついこの間まではコンパイラも何も無くてMSの出した言語概要読んで
( ゚∀゚)イイ!とか(;´Д`)なんじゃそりゃとか思いながら
出るのを楽しみにしてたってのに。
19デフォルトの名無しさん:03/10/05 04:47
>>17
馬鹿ですか?
C#もあと3000年程経てばトップになるよ
21デフォルトの名無しさん:03/10/05 12:59
( ・∀・)つ〃∩ ヘェー
22デフォルトの名無しさん:03/10/05 21:11
webからhtmをstringとしてストリームから取得してそれをブラウザのように表示するにはIndexOfなどでタグを自分で処理するんでしょうか?
>>22
その通り
24デフォルトの名無しさん:03/10/06 01:30
C#でフローティングウィンドウに関することが書いてあるページがあれば教えてください。
googleで探した限りではいいのがでてこなかったので・・・
25デフォルトの名無しさん:03/10/06 11:25
IEnumeratorのMoveNextを実装するときに
if(position>array.Length)//arrayは配列、positionは配列の位置
とある本にあったのですが、
if(position>array.Length-1)
としないと例外が出ます。本が間違っているのでしょうか?
本家でやるとこうなる。VBに負けているDelphiなんて見たくなかったんだろうなぁ(w
http://sourceforge.net/softwaremap/trove_list.php?form_cat=160


1 C (11741 projects)
2 C++ (11528 projects)
3 Java (9854 projects)
4 PHP (7446 projects)
5 Perl (4902 projects)
6 Python (2664 projects)
7 Visual Basic (1556 projects)
8 JavaScript (1378 projects)
9 Delphi/Kylix (1240 projects)
10 Unix Shell (1206 projects)
11 Assembly (1105 projects)
12 C# (1002 projects)
13 PL/SQL (833 projects)
14 Tcl (714 projects)
15 ASP (429 projects)
16 Objective C (396 projects)
17 Lisp (265 projects)
18 Ruby (257 projects)
19 Pascal (254 projects)
20 Assembly (188 projects)
21 Object Pascal (175 projects)
MS製だから当然といっちゃあ当然なんだけどな。
>>25
そんな事知るかヴォケ
29横浜在住:03/10/06 17:26
首都圏でVisual C#の中古品を買える店教えてください。
ビジネスアプリ系を扱うお店がなかなかありません
30デフォルトの名無しさん:03/10/08 16:14
MSDNライブラリのControlStylesの説明に
FixedHeight 自動スケールの時にコントロールの幅が固定される
ってあるんですけFixedWidthと逆でしょうか?
>>30
MSDNの誤植だろね。
VisualStudio2002のヘルプはちゃんとHeightが高さになってるし。
誤植って…。
MSはよくこんなの平気で売れますな。
10円やるから人間やめちまえーよ!
ホレ(´ー`)ノ ⌒ I

   ↓

     I ワーーイ
 ヽ(゚∀゚)ノ
   へ )  ←>>32
     >  
>>32
> 誤植って…。
> MSはよくこんなの平気で売れますな。
いやオンラインの。(2003のヘルプはどうなのかな)
それにそこらの文庫本だって一冊に何カ所かは誤植があって当たり前なんだし。
>>32
ラーメンにちいさな虫が入ってたら金返せと暴れる性格ですか?
虫入ってたら恐ろしいですな
>>35
さすがに虫入ってたら怒らないとだめでしょ。
それとも無視?
38デフォルトの名無しさん:03/10/11 23:47
俺は店内で蝿が飛んでたら帰るぞ
39デフォルトの名無しさん:03/10/12 00:01
では食事中(序盤)に虫がダイブしてきたらどうですか?
食事に入ってきた虫を気付かずに食べるのは、
日本人は一年に3.7匹、フィンランド人は2.4匹。

http://www.mail-archive.com/[email protected]/msg01398.html
C nul
C + +
C ++
C++
C#
>>6
これまじで その会社のなんか・・・うれねーな^^;
というかそのCMに出てる社員可愛そうになってくる。。
当初MSのソフトが使えるのがうりだったじゃねーか 妥協すんなw
>>Lindows
43デフォルトの名無しさん:03/10/13 14:11
あのくだらないことで申し訳ないんですが・・
画面にListViewがありまして
値を持っているArryList(中身がオブジェクト)をListViewにセットして
あげるという処理は Formにがつがつかかないで 別クラスで独立
させてあげたほうがベストですか?
別にビジネスロジックでもないので もしかして 別クラスに分ける
必要ないのかな?とふときになりまして。。
44デフォルトの名無しさん:03/10/13 15:14
usingについてなのですが、

using System;←ここと,
namespace hoge
{
using System;←ここ。
//クラスなど
}
二つのusingの位置での違いはなんなのでしょうか?
using System.Windows.Forms; と

namespace System
{
 using Windows.Forms; の違い
}
4643:03/10/13 21:48
やっぱいいです
47デフォルトの名無しさん:03/10/13 21:48
class Suuretu1{
public static void main(String []args){
double sum=0.0;
for(int n=3;n<=99999;n=n+4){
double s=1/(n-2)-(1/n);
sum=sum+s;
}
String y="式の合計は"+sum+"です";
System.out.println(y);
}
}
こんなプログラムを作ってみましたが実行すると1.0になってしまいます。
何故だろう・・・??
>>47
馬鹿?
49デフォルトの名無しさん:03/10/13 21:55
JDBCとMySQL接続のプログラムを作ったんですが、日本語が文字化けします
MySQLは3.23.49です。

MySQL winmysqladmin.exeのmy.ini Setupタグで
[mysqld]
default-character-set=sjis
[mysql]
default-character-set=sjis
[mysql-dump]
default-character-set=sjis
と変更し 再起動し、variablesタグの文字コードも変更されています。

同じことをsjisの部分をujisでも試しました。

テーブルからは、「あ」という文字が戻ってくるはずですが、コンソール画面には
「ツ?」と表示されます。

だれか、分かる方はご返事ください。よろしくお願いします。

馬鹿だな
かなりヤバイのがいるなw
52デフォルトの名無しさん:03/10/13 22:10
#include <stdio.h>

int main(void)
{
int num,i;

num = 0;
i = 0;

while(num<=4){
while(i<=2){
printf("numは%d:iは%dです。\n",num,i);
i++;
}
num++;
}

return 0;
}

うまく繰り返されないです。
このスレも荒らされるのか?
5446 :03/10/13 22:11
御免なさい 嘘つきました
43の質問に答えてあげてください。
>>43
ArrayList 型のプロパティをコントロールやフォームに書いて、それをget/setする。
オブジェクトをどのように表示するか(リストコントロールに登録するか)はビューの責任であって、周りからそのプロセスは隠蔽すべき。

MVCモデルをC#に置き換えてみると
V->FORM
だから FORMに表示ロジックを乗っけてしまって
いいということでいいんですね。
MVCなんてダサイ
ダサいという根拠を200文字以内で答えよ
>>57
59デフォルトの名無しさん:03/10/13 23:22
Vectorクラスから配列に入れ替えるというコードのテストを作ってみたんですが

Vector a = new Vector();

a.add("1");
a.add("2");
a.add("3");
a.add("4");
a.add("5");
a.add("6");


String[] str= (String[])a.toArray();

for(int i =0;i< str.length;i++){
System.out.println(str[i]);
}

String[] str= (String[])a.toArray();のところで
java.lang.ClassCastException
60デフォルトの名無しさん:03/10/14 07:55
import java.util.*;

class Ts{

static void hoge(){
HashMap hm = new HashMap();
//コンストラクタ化
hm.put("c","1");
hm.put("bc","12");
hm.put("a","3");
}
}
class T{
public static void main(String args[]){

hoge h =Ts.hoge();
System.out.println(h.get("c"));
}
}
上のソースコンパイルするとエラーになります教えてください
G:\java>javac T.java
T.java:16: シンボルを解決できません。
シンボル: クラス hoge
場所 : T の クラス
hoge h =Ts.hoge();
61デフォルトの名無しさん:03/10/14 07:56
Cのmemcpy(),memmove()とか
WinAPIのCopyMemory(),MoveMemory()とか
src領域とdst領域がオーバーラップしているか否かで
使い分けが必要だけどさ、その違いって、内部では
どう影響してくるのでしょうか?

rep movsb
にも影響があるの?
オーバーラップ気にしなければいけなかったのはすでに15年も昔のはなしさ。。
addr 0123456
data ABCDEF 2〜5 -> 3〜6 copy する時


data ABBBBB になるか
data ABBCDE になるか の差



継承について分かってきたら、C#への理解が一気に深まったよ
こういうことだったんだね
65デフォルトの名無しさん:03/10/14 17:39
デザイン時の話なのですが、フォームにリストヴューを張り、
SortingのプロパティをAscendingにすると急にヘッダーが長くなり
ヘッダーを調整しようと思っても動かなくなります。
VSのバグでしょうか?
                                                    _,. -‐、 ____r‐ 、
                                                 /´     `      \
          ,,―‐.                  r-、    _,--,、         'フ   ,.......,       \
     ,―-、 .| ./''i、│  r-,,,,,,,,,,,,,,,,,,,,,,,,―ー.    ゙l, `"゙゙゙゙゙ ̄^   \   r‐''~´  ,.、  ヽ'"    _,..‐,'゙ヾ.´
    /   \ ヽ,゙'゙_,/   .゙l、         `i、   \ _,,―ー'''/  .,r'"   .|    ヽ'       └''´,.:‐r''ヽ,
.,,,、.,,i´ .,/^'i、 `'i、``     `--‐'''''''''''''''"'''''''''''゙     `゛   .丿  .,/     └''´>      _,.-、      `'´ ∠,,,
{ ""  ,/`  ヽ、 `'i、                        丿  .,/`    .ヾヽ''´      '─''''          }
.ヽ、 丿    \  .\                      ,/′ 、ヽ,,、   |   ,.r、________,r 、  j
  ゙'ー'"      ゙'i、  ‘i、.r-、      __,,,,,,,,--、     / .,/\ `'-,、 `‐'',ゞ---------────‐'´`ヽ´
           ヽ  .]゙l `゙゙゙゙"゙゙゙゙ ̄ ̄     `'i、  ,/ .,,/   .ヽ  \   !、                ノ
            ゙ヽ_/ .ヽ_.,,,,--―――――ー-ノ_,/゙,,/′     ゙l   ,"    ,ゝ   r‐┐    rヮ    <´
                 `             ゙‐''"`        ゙'ー'"   i´    }_」    │ヽ.   j
                                               ヽ、  ,人       丿  ヽ._,.ノ
                                                  `- '   `ヽ、__/
67fushianasan:03/10/16 00:32
cってなんですか???
まんc
>>67
アルファベットの3文字目。
視力検査したことないの?
相変わらずC#厨って厨房がおおいね。
72デフォルトの名無しさん:03/11/19 12:49
 
>>71
ま た お ま え か
74デフォルトの名無しさん:03/11/30 19:25
Form上にマウスポインターが乗ってるかどうかを
保持しているプロパティって存在しないんですか?
自分で変数を作ってそこに保持するような処理をしないといけないのですか?
>>74
さっぱり忘れてるのですが
マウスの座標をPointで取得して
指定したRectangle(フォーム)の中に引数に指定した
Point(マウスの座標)が存在するか、というようなメソッドを使って
できたような。。
76デフォルトの名無しさん:04/01/22 07:18
あげ
TreeViewで、ツリーノードが展開されているときのイメージを指定する方法って
無いんでしょうか?
ImageIndexとSelectedImageIndexだとノードを選択しているか否かの状態のみの設定で、
ツリーノード展開したまま別ノードを選択すると結局非選択時のイメージになってしまうんで…。

要はフォルダオープンとクローズのイメージを表示させて、ツリーノードの展開に合わせて
イメージを変更したいんですが、Expand系のイベントを利用して自力書き換えするしか
無いんでしょうかね?
7977:04/01/30 06:47
>>78
了解です。ありがとー。
80デフォルトの名無しさん:04/02/11 08:52
なんか不安定?
今年度のバレンタイン大作戦

女性店員がレジにいるコンビニでチョコを買う

わざとチョコを受け取り忘れて店を出る

女性店員が走って渡しに来る「あの・・・これ・・・」

ちょっぴりバレンタイン気分
82banban:04/02/11 18:54
mysqlのデータを操作するのはどうすればいいんでしょう?
出来ればソースもらえたら嬉しいです、全然わかんないんです。
超ド初心者質問でスマソです
exeファイルへの出力ってどうやったらいいのでしょうか?
>>83
わかりません
>>83
超ド初心者質問でスマソです
あなたの脳内を読み取るにはどうやったらいいのでしょうか?
>>83
csc /out:hoge.exe hoge.cs
ネタにマジ(ry
>>82
英語ページですが。
http://www.c-sharpcorner.com/FAQ/MySqlConnection.asp
要はODBC .Net Data Provider入れてMyODBC入れて云々、らしいです。
サンプルコードはASP.NETですがWinFormでも似たようなものかと思われます。
88デフォルトの名無しさん:04/03/24 19:20
宜しくお願いします。
Timerのインスタンスと同期させる簡単なゲームを作っているのですが
このインスタンスを1000分の1秒単位で一時停止させるにはどうすれば良いのでしょうか?
stopさせると0.000秒に初期化されてしまいます。
pauseというメソッドは無いみたいですが不可能なのでしょうか。
89デフォルトの名無しさん :04/03/25 01:19
ニュー速で質問があったんでけど答えてあげてください。

C#(WINアプリ)を勉強していますがクラスについて教えてください。
public class A
{
メソッド1
}

public class B
{
メソッド2
}
この場合、class Aは、class Bのものに対してアクセスできますよね?
これは、class Aのなかでclass Bのメソッド2が使えるということで
しょうか?
もし、使えるなら、class Aの中でオブジェクト = new class Bとして
インスタンスか化してから使うのでしょうか?


90デフォルトの名無しさん:04/03/25 07:38
>>89
class B のメソッド2が Public であれば、アクセスできます。
static メソッドでなければ、インスタンス化してからでないとアクセスできません。
とてもどうでも良い質問なんですが
クラスと関数の使い分けが分りません

こうゆう場合はクラス(関数)にする

っていうお約束なんかあるんですか?

92デフォルトの名無しさん:04/03/29 20:09
クラスライブラリプロジェクトでせっせと /// <summary> などのコメントを記述しています。
同じプロジェクト内では記述したコメントがヒントに表示されるのですが、クラスライブラリを
参照設定した他のプロジェクトではヒントにコメントが表示されません(引数の型とかはちゃんと
出ます)。コメントまではヒントに出てこない仕様なんでしょうか。その割には System.何とかの
クラスにはちゃんとコメントが出てきますよね。何が違うのか。。。
>91
それは経験で身に付けるしかない。
一応コツとしては
・名前が付けられるものはクラスにする
・複数あるものはクラスにする
・動作の対象となるものは、その対象自身に仕事をさせる
とかかな?
>>92
ソースをコンパイルするときにXMLドキュメントファイルを出力しといて、
(コマンドラインコンパイルなら/docオプション)
hoge.dllに対してhoge.xmlって名前でhoge.dllと同じディレクトリに置いてhoge.dllを参照設定。
9592:04/03/30 11:34
>>94
うまくいきました。ありがとう。
96デフォルトの名無しさん:04/03/30 22:00
助けてほしい。何度もぐぐったりしているけど、XML読み込みが良くわからない。
例えば、以下のXMLファイルを読み込んで、出力するコードを教えてください。
正直、解説見てもわけがわからんです。これなら手で書いたほうが早いです。

◆出力例
一人目 名前「モナ山 茂名」 生年月日「2000年 2月29日」
二人目 名前「ギコ猫 義子」 生年月日「1900年12月31日」

◆XMLファイル
<?xml version="1.0" ?>
<list>
<person>
<name>モナ山 茂名</name>
<birth year="2000" month="2" day="29" />
</person>
(略)
</list>
97デフォルトの名無しさん:04/03/30 22:11
PictureBoxの絵の余白部分にマスクをかけて
透過させることってできますか?
>>97
MakeTransparent
>>96
string xmlName = @"C:\Documents and Settings\****\XML ファイル名";

XmlDocument xdoc = new XmlDocument();
xdoc.Load(xmlName);
XmlElement elem = xdoc.DocumentElement;

int i = 1;
foreach(XmlNode person in elem.GetElementsByTagName("person"))
{
Console.Write("{0}人目 名前「{1}」 生年月日「{2}年 {3}月{4}日」\n",
i,
person["name"].InnerText,
person["birth"].Attributes["year"].Value,
person["birth"].Attributes["month"].Value,
person["birth"].Attributes["day"].Value);
++i;
}
>>99
サンクスコ!foreachでperson要素の数だけループさせて、
personという変数に代入して、personのもつ
name要素の中身、birth要素のyear属性の値・・・を表示させているんですね。
Veryわかりやすい。ありがとうございました
早速今日、>>99氏のコードを試してみた。
ものすごく望みどおりに改造することが簡単だった。ありがとう。
なんかJavaScriptを使ったDOMと同じ感じでできたので簡単だった。
@ITとかで勉強してたけど、こんなに簡単にできるなんて、感動だった。
本当にTHANX!
this.Hide();を2回実行しないと消えてくれないんですけど何で?
今月、電話代ちょっと多すぎるんだけどなんで?
最近C#の人気がないと思う
いつに比べて?
106デフォルトの名無しさん:04/04/18 17:27
Process p = new Process();
p.StartInfo.FileName = @"C:\program\katjusha.exe";
p.Start();

という感じで起動した子プロセスのウィンドウを
最小化したり、元に戻したり、隠したりするにはどうしたらいいですか?

起動前ならStartInfoで設定できると思うのですが
.NETは安全性重視だから、勝手に別のソフトのウィンドウを操作するのは良くなくて、
そういうことをしたいならやっちゃいけないことをやらなきゃいけなくて、
そうなると.NET以外の方法を使うことになる。
108デフォルトの名無しさん:04/04/19 23:44
>>107
サンクス。となるとC++とか使うしかないんですか?

最小化しかできないソフトを通知領域に入れる(駐在させる)ためのソフトを
作ろうと思ったのですが…。
109デフォルトの名無しさん:04/04/20 11:20
C#ではコマンドメッセージの代わりになに使えばいいんすか?
110デフォルトの名無しさん:04/04/20 12:27
ツールバーのボタンをドラッグするとへこんだままになるのはなぜですか?
111デフォルトの名無しさん:04/05/09 17:50
HTTPのプロキシサーバーを作成しようとしています。

.NETのクラスライブラリに、プロキシサーバー関係のクラスはあるでしょうか?探したところ、無さそうでした。
ない場合は、System.Net.Sockets名前空間のTcpListenerクラスを使えばいいのでしょうか?
>>111
System.Net.WebProxyクラス。
113111:04/05/09 18:08
>>112
そのクラスは、こっちからどこかにアクセスするときに利用するプロキシを設定するクラスではないですか?
メモリ配列で構造体を初期化したいんだけど
C/C++で
struct_type s;
char work[256];
memcopy(&s,work,sizeof(struct_type));

みたいなことってC#でどうやってやったらいいんですかね?
その例は構造体の初期化じゃなくて配列の初期化だから
116デフォルトの名無しさん:04/05/19 15:33
 Bitmap bitmap=new Bitmap(ファイル名);

 PictureBox p =new PictureBox();
Graphics g = p.CreateGraphics();
g.DrawImage(bitmap,new Rectangle(0,0,100,100));
g.Dispose();
という非常によくみられる方法で画像を表示したいが、一瞬画像が現れただけで
すぐに消えます。だから、普段は、p.Image=bitmap のようにプロパティで表示しています。
どーすればGraphicsで表示できますか?
OnPaintをオーバーライドして引数のGraphics使えば望みの動作にできる
118デフォルトの名無しさん:04/05/19 19:12
>117
ありがとうございます。
確かに一個のフォーム全体に画像を表示するとき、重なっていてもうまく表示できました。
でも、最終的には画像ビューワーのようにサムネイルをたくさん表示したいのです。
そのときOnPaintを何度も呼び出す方法もよくわかりません。
Graphicsで表示したときにずっと表示する方法はないのでしょうか。
できるからこそ、GraphicsのインスタンスをDrawImageするのが一般的描画方法
とされているはずなので。私の場合そもそも一瞬しか表示されません。
なぜ?



>>118
OnPaintは自分で呼ぶものじゃなくて(フレームワークから)呼ばれるもの。
120デフォルトの名無しさん:04/05/19 21:09
C#でゲームのようなグラフィックを扱うにはどのようなコンポーネントが
必要ですか?サンプルコードもおねがいします
>>120
↓この辺り?
C#でDirectX9 初心者の館
http://pc5.2ch.net/test/read.cgi/tech/1069666471/
122デフォルトの名無しさん:04/06/03 17:52
いま、オブジェクト指向の勉強をしようとおもって、C#でライツアウトを作っています。
Buttonクラスを25個集めてboardというクラスを作りました。
そこで思うのですが、「全ての色が消えた」というような「審判」の役割は
誰がするのですか? judgmentクラスを作ったとして、
ボタンが押されたというのはjudgmentクラスにどうやって伝えるんでしょう?
>>122
ひょっとしてVC#使ってない?
124デフォルトの名無しさん:04/06/03 21:28
>>123
VC# 2003ですよ。

今木が付いたけど、mybutton_click見たいな関数から 毎回 審判を呼び出すものですか?
結構無駄が多いような記もしますが、それがOOと考えて良いの?
ビジュアルなんたらを使ってる人はビジュアルな部分は簡単にこなすけど、
そうも行かない部分はぜんぜん出来ないでいるからね。
おれも似たような経験がある。
ちなみに答えはeventとdelegateなんだけど、
ビジュアルには行かないkらMSDNみてコード書いてね。
126デフォルトの名無しさん:04/06/04 02:33
ようやくC#なんですけど、
とりあえず.Net Framework 1.1 SDKを拾ってきてインスコしました。
ドキュメントも更新しました。
んだら、PlatformSDKのドキュメントと.NetSDKのドキュメントの
インデックスとコンテンツが表示されなくなってもたんです。
dexploreの仕組みがようわからんので困ったチャンなのです。
VS.Netは金なくてあかんです。
ドキュメントがみずらくてかないません。たちゅけて。
>>126
フィルタ?
128デフォルトの名無しさん:04/06/06 22:38
listviewとimagelistを使ってサムネイル表示したいのですがうまくいきません
listView1.View=View.LargeIcon;
imageList1.ImageSize = new Size(90, 90);
imageList1.Images.Add(Bitmap.FromFile("ファイルのパス"));
listView1.LargeImageList = imageList1;

foreachでimagelistに画像を格納して、listviewにimagelistをくっつけたんですが
画像が表示されません。何か間違ってますか?
XMLからデータを読み込んで、DataGridに表示させたいのですが、
色々検索してもDataGridの使い方が分かりません。
[C# DataGrid]とかで検索しても、データベースサーバから読む場合ばっかりで・・・
>>129
GotDotNet Japan Student コラム 「XML プログラミングを始めよう」
http://www.gotdotnet.com/japan/student/column/xml/xmlprogramming7.aspx

DataSet の XML 機能
131デフォルトの名無しさん:04/06/08 00:06
クリックとかのイベント時に音を鳴らしたいのですが、どうすれば?
>>128
偶然通りかかったので答える。
ListView にアイテムを追加して、イメージインデックスを指定しなきゃ。
あとサムネイルなら GetThumbnailImage で適当に作ってやんなきゃダメじゃん。
SDKドキュメントの"ListView.LargeImageList プロパティ "のとこのコード見てみて。
もう来ないので質問されても答えられないけど、がんばってね。
133デフォルトの名無しさん:04/06/10 06:01
もう来ないとか言うな。無責任な奴は来るな。社会のごみ同然。
>>133
別に最後までずっと相手してあげなきゃならないというわけでもないと思うけど。
だいたい説明すればあとは自分でなんとかするでそ。
インテリセンスのメソッド説明をもっと早くポップアップさせるにはどこいじればよいでしょうか?
スマソ。C#というよりVS.NETの話でした。
137デフォルトの名無しさん:04/06/16 14:13
CheckedListBoxを既にItems.Addで追加済みなんですが、この内容をコードで順番にCheck,Uncheckするにはどうでればよいでしょうか?
138デフォルトの名無しさん:04/06/17 19:15
リフレッシュレートの変更はAPI使わないとだめなんでしょうか。
そもそもそんなもんを作るなって言語なんでしょうか。
意外と出来ないことが多くてびっくりしてます。
139デフォルトの名無しさん:04/06/18 03:03
C#.NETで開発しています。exeからdllを呼んでいてdllもC#で作っています。
dll内にステップインで入ってデバッグしたいのですが、入れるときと入れないとき
があります。何が原因でしょうか?
dllはグローバル アセンブリ キャッシュにインストールして使っています。
140139:04/06/18 08:08
dllがデバッグだったりリリースビルドだったりしてるんでないの
141140:04/06/18 08:09
ちがう。>139としたかったの...orz
142139:04/06/18 21:10
>>140
レスありがとうございます。今日やっと分かったのですが
exeと同じところにdllを置いたらできました。
ビルドのオプションでローカルコピーをtrueにしたりfalseに
したりしていたようです。
教えて下さい。
Windows.FormでGUIアプリを作っているとします。
編集メニューでコピーにCtl+Cを割り当てて、
とあるコントロールにはこのメニュークリックのイベントで
処理したいんだけど、別の(例えば普通のテキストボックス)には
デフォルトのコピー処理をさせたい。
でないとそれぞれのコントロールごとに処理を書くはめになるので。
必要ないコントロールの場合はイベントをスルーすればいいんでしょうが、
どう書けばいいんでしょうか?
144デフォルトの名無しさん:04/06/25 07:11
上げ忘れてた。。
タイマーの使い方を教えてください。

あるボタンを押した時から、1000msごとにのこり時刻を
[10秒経過 / 残り170秒] というように表示させたいです
146デフォルトの名無しさん:04/07/02 21:50
あげわすれた
>>145
「シンプルな時計」でやってるよ
http://homepage3.nifty.com/midori_no_bike/CS/index.html
>143
きれいにやるならそういうフレームワークを作る
そすると他のでも使える

どこまでやるかは時間次第
149デフォルトの名無しさん:04/07/03 09:10
とりあえずVisualStudio2005のC#の言語仕様に拡張があるのかどうか知りたいのですが、
VisualStudio2005言語仕様の概要について書かれているホームページがあったら教えてもらえませんか?
guest guest 
152デフォルトの名無しさん:04/07/04 15:57
Windowアプリ/Consoleアプリ兼用のアプリが作りたいんですけれど
System.Console.Write 等の入出力を起動したConsoleアプリの入出力にする方法しりませんか?
>>152
どういう意味か良く分からないんだが…
154デフォルトの名無しさん:04/07/09 17:42
textBoxに半角数字しか入力できないようにする方法はありますか?
ImeModeをOFFにしてみたけど、これじゃ半角英数字になってしまうんです。
調べろ。わからなかったら自分で作れ
よぅ。カスども。
俺C#やったことないんだけど、質問してもいい?
みんなC#ってなにに使ってんの?
「ネイティブコード吐けるJava」みたいな認識で買おうか迷ってんだけど、
そんなノリで買ってもいいものなんですか?
theSpoke効果だな
>>156
10個は買えバカ
159156:04/07/10 03:29
買うなら1個でいいよ。
やっぱASPで使ってんの?
それともクライアントアプリ?
どうなのよ。
それを聞いて何かが変わるのか?
161デフォルトの名無しさん:04/07/10 10:30
> 「ネイティブコード吐けるJava」みたいな認識

全然違う

> やっぱASPで使ってんの?

ASP.NET か?

> それともクライアントアプリ?

どっちもだろ。
162156:04/07/10 12:47
>>160
あー、「結局どーしてーのよ?」みたいななるわな。
具体的にはC/Sタイプのアプリのクライアント側を何で作るか迷ってるのよ。
仕事の合間の趣味の話だから手ごろそうなC#がいいのかなと。
どんなん作りたいかっていうと、MSメッセンジャーみたいのだと思ってくれればいいな。

>>161
全然違うんか。
今まではクライアントアプリっつーとVCかDelphiか、まぁVBとかだったわな。
VCしかできねーけど。
んでひょっこりでてきたC#はどーなのよと思ってな。
Javaでもいんだけど、インストールの説明に「J2SE1.4ランタイムが必要です」って書くのと、
「.NETFrameforkランタイムが必要です」って書くのとじゃちょっとイメージ違うしな。
163名無しさん@そうだ選挙に行こう:04/07/11 10:34
terrarium1.2になりますた

http://www.terrariumgame.net/terrarium/
164名無しさん@そうだ選挙に行こう:04/07/11 12:50
>>162
次期VS.NET(2005)は単体言語版(C#だけとか)で
Web(ASP.NET)機能を除いたグレードのものが格安で
出るらしいです。

趣味ならこれ使ってC#の非Webアプリを創るのが
非常に快適ではないかと思う。VCできるならなおさら
VB.NETに走る必要もないわけだし。

一つだけ問題があるとすれば、2006〜2007年予定の
次世代Windows(Longhorn)までは.NETFrameworkが
デフォのAPIじゃないことだろう。なのでフリーウェアとか
シェアウェアで早期にアプリを公開するつもりなら
これは向いていない。
C#にはウニオン型は無いの?
struct でオフセット弄る
int?ってなんか萌えるな
168156:04/07/11 20:52
>>164
素敵情報サンクス。
サーバ(C++)とクライアント(Java)で作りつつ、
教えてくれた安価モデルが発売されたらクライアントをC#に移植
みたいな方向で考えてみるよ。

時期OSで.NETFrameworkが標準じゃなくなるってのは寝耳に水だけど、
さすがにバンドルされてないとは考えられないから、
あまりそっちは気にしなくていいかもな。
でもちょっと怖いから調べててみることにする。

マジサンクス!
> 時期OSで.NETFrameworkが標準じゃなくなるってのは寝耳に水だけど

そんなこと誰も書いてないでしょ
>>165
なくなっちゃったよ、せっかくintやらのビット数固定にしたんだから、
その範囲でのみでても付けてもらえると便利っていうか、Cより安全確実でよかったんだけどね。
ちょとさびしい。
頑張ってstruct使ってビットフィールド操作関数作るしかないっすね。
>>169
WinFXのことだろ。
172156:04/07/12 23:10
defaultとstandardはこの場合同意語にならんか?
それともそーゆーことじゃないのか?
なんにせよいろいろややこしそうだな。
173デフォルトの名無しさん:04/07/14 16:27
生成済みのオブジェクトの型を調べて、
それの型と同じ型で new をする方法があったら教えてください。

class ClassA() { ... }
class ClassB() { ... }
...
class MyApp
{
  void test()
  {
    object [] list = { new ClassA() , new ClassB() } ;
    foreach( object i in list )
    {
      sub( list[ i ] ) ;
    }
  }
  void sub( object a )
  {
    「aの型=ClassA/ClassB」  localData = new 「aの型=ClassA/ClassB」() ;
    ...
  }
}

といった事をしたいのですが、System.Reflection を使えばできると聞いたのですが、
分りやすいサンプルがあったらよろしくお願いします。
>>173
object localData = a.GetType().GetConstructor().Invoke( new object [] {} );
>>174
有難うございます、助かりました。
>>175
でも、実装の仕方としては、class A, B を ICloneable にして Clone() メソッド書くのが普通な気が。
>>175
それでほんとに問題ないのかちゃんと確認した方がいいぞ。
>>176
リフレクションの使い方の取っ掛かりが欲しかったので、構わないんです。
コンストラクタ以外にもメソッドを呼び出すときに、もっと複雑なことになるし、この辺りは覚悟していましたし
いずれにしても template が実装されるまでの繋ぎなので。
>178
どうtemplateにからむんでしょう?個人的に興味
ダウンキャストを知らないだけだったりして…
181デフォルトの名無しさん:04/07/15 20:30
C#の宿題スレはまだ無いみたいなのでここにて。

C#で簡易telnetを作れという問題です。通信の方法がそもそも分かりません
>>181
ソケット作れ
言語依存じゃない部分が分かってないんだろ?
185デフォルトの名無しさん:04/07/20 13:26
IList をインターフェイスに持つオブジェクトでシリアル化する時、上手く行かなくて地団駄踏んでいます。

System.Runtime.Serialization.Formatters.Soap.SoapFormatter
で、オブジェクトをXmlにシリアライズする時は ISerializable でカスタマイズできるみたいですが、

System.Xml.Serialization.XmlSerializer
で、オブジェクトをXmlにシリアライズする時でカスタマイズできる方法は無いんでしょうか?
知っている人いますか?

IList を入れていると、XmlSerializerが頑張っちゃって自動的にシリアライズしてしまうみたいで・・・
IListが入っていても普通のクラスのように振舞わせる事はできないのでしょうか?
>>185
取りあえず簡単なIListを実装したコレクションを作ったけど普通にシリアライズ・デシリアライズできたぞ。

XmlSerializerは手軽に使えてカスタムしにくいのが特徴なので、まあいろいろ勘案して。
シリアライズ用の別クラスを作るとか。
あ〜、>186の一行目はちょっと勘違いというか見当違い。無視して。
>>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();
}
そのまま破棄されるだけだが。
C系言語の特徴で
int main()
{
10 ;
}
とやっても、文としては正しいと認識されます
と、書こうとして、C#でやったら、意味が無いって怒られました。
さすがにチェックすることにしたみたいですね。
192デフォルトの名無しさん:04/07/27 20:11
public int hoge; //hogeは1から100をとる
上の場合、publicだから外からどんな値が来るかわかりません。
hogeに値が代入された時に、hogeが正しい値かどうかを調べるにはどうしたらいいんですか
>>192
プロパティにしてsetアクセサの中でチェックする。
つかまさにそのためにプロパティがあるんだが。
プロパティにする
set{ if(value >= 1 && value<=100) hoge = value; else throw new FormatException(); }
みたいにすればいいんですね。なるほど
どうでもいいがその例だとArgumentOutOfRangeExceptionの方が妥当だな。
>>195
public int hoge {
  set {
    if (1 <= value && value <= 100)
      hoge = value;
    else
      throw new ArgumentOutOfRangeException();
  }
}

ちょっと無理っぽいが、通るのか?
198デフォルトの名無しさん:04/07/31 18:44
GDI+はGDIより遅いって本当ですか?
>>198
自分で作って確かめろ、タコ
>ちょっと無理っぽいが、通るのか?
なんで?
201198:04/08/01 09:38
>199
GDIはBitbltで
GDI+はGraphics.DrawImageで
確かめて良いですか?
GDI+は長角まで待つべし
リフレクションを使ってラムダ式を動的に作りたいのですが、
参考になる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 ) が呼び出される
}
>>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);
}
}
205204:04/08/01 16:27
public class DistributionFunctions {

の{の前に全角スペースが入ってた。。。鬱
C#でGDIをつかうすべはあるのか?APIの直たたきならGDIをつかえる?
>>204
方法は問わないんですが、そうです、そんな感じです。
そこで、関数の引数を確保するクラスを作る必要がありますよね。
関数の数が多くて、これを全部自動生成してしまいたいんです。
208204: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);
}
}
}
>>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 で発生しました。
> 対象となる関数は、正規分布関数のようにパラメータ二つだけとは限りませんし、
> 今後、多変数に対応するにあたって、このまま場当なやり方で行きますとプログラムの保守が危機的になると考え
> 第一段階として、現在はC#のソースコードを自動生成するプログラムを作って対応しています。
これが結構まっとうな方法な気もしますが。。。

もしかして、パラメータが変わるだけではなく、どんな関数を作るかは
あらかじめ決まってない、ってことですか?
C++でいえば、boost::lambdaみたいなことをしたいのかなぁ?

> しかし、これも必ずしも良い方法とも言えず、もっと効率的にプログラムできる方法として、
> 色々探している内にリフレクションという物を使ってみようかと考えていました。
リフレクションで出来るかどうかはわかりませんが、一応参考に。

http://members.jcom.home.ne.jp/1213687801/cs/reflection/reflection4.html
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemreflectionemittypebuilderclasstopic.asp
普通に IDbCommand.ExecuteNonquery() はダメなの?
214デフォルトの名無しさん:04/08/03 21:03
プログラムの構造をどうしたらいいのかが分かりません。
例えば、オセロプログラムを考えるとします。
オセロのマスの部分にButtonから継承したクラスMasuを使います。
Masuを8*8個集めた配列をBoardとします。
オセロゲーム ━━ Board (集約する)━━ Masu という風になっていますが、
Masuがクリックされた時に 隣のマスをひっくり返すかどうか走査するとしても、
Masuからは隣のMasuなんて分かりませんよね?
だからBoardに頼んで調べてもらいたいわけですが
どうやったらそうできるのかがわからないです。どうしたらいいのですか?
X 配列Board
O クラスBoard

でした
>>214
Masu に必要な機能は、
・そのマスの内容を保持
・画面に描画する
・クリックされたことを、Board に通知する
の3つでいいんじゃない?

ひっくり返すのは、Board でやればいい。
217デフォルトの名無しさん:04/08/03 23:21
>>216
その三番目のboardに通知する方法が分からんですよ。
>>217
Clickイベント。
>>217
boardのメソッドの引数に自分を渡せばいい。
>214
もっと
PlayerとかTurnMasterとかJudgeとかつくれや。Masuはいらん
>>220
高度すぎ。質問者をみて答えてやれよ。
>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 の
左側と上側にしか線がひかれません。

なぜでしょうか?また、どうすればちゃんと矩形が描かれますか?
>>224
はみ出て見えないので矩形を小さく、例えば幅と高さを-1にしたりする。
226224:04/08/05 01:29
>>225
ええええー。なぜそんな仕様になってるんでしょうか?
227デフォルトの名無しさん:04/08/05 02:00
>>226
厨避けの為。
>>220
ウヒャー
220さんの高度な設計だと、どんな風になるんですか?
コードをつけながら説明してほしい・・・
>>229
高度
コード




!?
231デフォルトの名無しさん:04/08/05 22:23
超基本で悪いんだけど、
int i = Console.Read();
Console.WriteLine(i);

これでたとえば「2」を入力すると出力が「50」なんてなるんですが、なぜなのでしょうか?
>>231
コンピュータの中では、「文字」ってのは一定のルールで数字の列に変換されて扱われてます。
このルールのことをエンコーディング、数字(の列)のことを文字コードと呼んだりします。
んで、文字の "2" に対応するコードが 50 (16進数で 0x32) なわけです。

ファイルやネットワーク等での読み書きは、byte の列を使って行われるのが基本で、
.Net Framework で文字列からこのバイト列に(またはその逆に)変換するには、
Encoding クラス(のインスタンス)を用います。
P.S.
"2"という文字列から、数字の 2 に変換するには、Int32.Parse() などを使います。
234231:04/08/05 22:36
>>232
文字コードを実数値にしないといけないんですね。
丁寧な即レスありがとうございます。
久しぶりにきたが、なんだかいいスレになってるじゃねーか!
コンソールはほとんど勉強してなかったから試してみたんだけど

char c = (char)Console.Read();

とすれば、そのまま表示できまっせ。MSDNだとintを返すことになってるから
まぎわらしいんだけどね。
237デフォルトの名無しさん:04/08/06 07:43
こんにちは

今画像のサムネイル保存用に複数画像をまとめてひとつの
ファイルにしようとしています。
Aファイルサイズ・Aファイル・Bファイルサイズ・Bファイル・・・
みたいな感じ合成し、インデックスで呼び出そうかと思っています。
で、ふと思ったのですが、そういう複数のファイルをまとめてしまう
クラスって既にあったりするのでしょうか。
よろしければお教えください。よろしくお願いいたします。
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的に名前で簡単にストリームを取り出せるような
仕組みが既存クラスにないかなーとか思っていたのでした。

やはり頑張って自分で実装してみます。

ありがとうございました。
参照設定で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
まずは再起動
244242:04/08/06 23:24
>>243
再起動もしたんですがダメでした。
245最凶VB厨房:04/08/06 23:28
SDK本体は入れてるのよな?
まっわからんけど
>>242
フィルタか?
247242:04/08/06 23:52
英語版ヘルプははいってるんですが・・・
フィルタもなしになってます。
本来ならVS.NET起動時に「ヘルプを反映中・・」とかでますよね?
248242:04/08/07 01:01
連結ヘルプ コレクション マネージャで更新できました。
お騒がせしました。(・∀・)
>>242
DirectX9 SDK Summer2004の日本語ドキュメントってもう出てたの?
>>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));
  }
}
>>251
非Managedなプロセス空間にManagedな構造体を確保する意味がさっぱりわからないんだが。

ttp://dotnetjunkies.com/WebLog/chris.taylor/archive/2004/05/31/14828.aspx
とりあえず外部プロセスへのちょっかいの参照。
253251:04/08/07 15:56
252さんアドバイスありがとうございます。
これをやりたい理由は、興味本位で出来るかどうか試したかっただけです。
とりあえず上のURLをよく読んで見ます。
おまいら、コールバックにデリゲートとインターフェースの
どっち使ってる?
JavaのGUIのリスナーみたいなケースなら、デリゲートの
方が何もしないメソッドまで記述しなくて済むし効率いいかな。
>>254
俺は Java 出身だから、ある程度一まとまりの処理をくっつけるならインターフェイス使っている
デリゲートは纏まり間が無くて、単体なら遣いやすいけど微妙
俺はデリゲート派
anonymous class は使えないが、anonymous delegate は使えるようになるので、
デリゲートにしておくのが無難なのでは。
非常に唐突な質問で申し訳ないが、C#で、というか.NET Frameworkで
各ドライブのボリュームラベルを取得するのってどうやるんだべさ?

なんかAPI叩くしかなかったら非常に鬱なので教えてエロイ人!
>>258
DriveInfo.VolumeLabel かな。
…… .NET Framework 2.0 だけど。
2.0で変更になったクラスの一覧ってないかな?
>>259
やっぱ2.0になっちまうのか・・・。
何故こんな基本的なもんが実装されてないんだと小一(ry
[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);
>>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の何番目か」は渡されません。
どうしたらいいんですか
>>265
ボタンの番号が固定のものなら、Button.Tag あたりに番号を押し込めておけば良いのでは?
自分が [2,1]だとしたら、[2,0]と[2,2]のボタンも操作したいんですよ。
なんとかなりませんかねえ
>>267
???
だからTagにint[]{2, 1}とかいれとけばいいんじゃないの?

それがまずいというのならもっとわかりやすく説明してくれないと何がなにやら。
>>268
あ、いま意味が分かりましたサンクス
>>264
普通に1000とかできるじゃん……と思ったら.NET Framework2.0だった。

1.1の制限のようだ。
>>264
OS の制限。WaitForMultipleObjects() できる最大数が64だから。
2.0 で表面的な制限は外れても、64を超えると効率は落ちる気がする。
簡単なベンチの結果、数が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だけ範囲指定させるみたいなことはできますか?
274264:04/08/08 14:27
>>270-272
環境も書き忘れたのに本当にありがとうございます。
しかもWaitForMultipleObjectsとの関連、
ベンチまでしていただいてとても参考になりました。
クラスのオブジェクトをコピーしたいんだけどよくわからんです。
AObject obj1 = obj2.Clone();
ってすればいいんだろうけど、
Cloneを書くときにCのmemcpyみたいなことってできないんでしょうか?
それともいちいちフィールド一つずつ代入?
Object.MemberwiseClone()
277275:04/08/09 15:39
>>276
さんきゅ。
それつかってICloneableを実装するのが流儀なのだな。
Point とかの Dispose できないヤツって、Dispose しなくていいの?

Point aaa = new Point(0,0);
aaa = new Point(1,1);
aaa = new Point(2,2)

とかしても大丈夫?
>>278
int a = 0;
a = 1;
a = 2;

とやることにためらいを覚える?
char *p = malloc(100);
p = malloc(100);
p = malloc(100);

とやることにはためらいを覚える。
281275:04/08/15 15:23
Pointとかは構造体だからOKってことだよね。
正しいクラスはDisposeを持つべきってことか?
自前のやつも?
>>281
もうちょっとGCを信用しようや。
Disposeが必要なのは基本的にUnmanagedなリソースを扱うクラスのみ。
GCはいいんだけど、自分で自由に解放できないのがいまいち

なんか「ゴミをゴミ箱に捨てると清掃員の仕事が減ってリストラされるから、ゴミは道に捨てるべき」とか言ってるみたい
>>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++でスマートポインタを使っていると切に欲しくなる事があったりします。
Disposeしたところでメモリに対しては何も出来ないんだから意味なし。
まあ、>>285のように思う事はない事もない。
何らかのクリーンアップコードを実行したい場合なんかは、
Disposeを実装すべきである事が多い。
単に使用終了と言う意味合いだけなら、何もする必要なし。
※Dispose実装したところでする事は何もない。
メモリに関しちゃほっとけばいいってのがGCのある環境での基本。
using ステートメント(と IDisposable インタフェイス)ではどこがダメなの?
忘れる可能性があるから、強制できないから。
まあ、>>285の言うようなスマートポインタみたいな物っていっても、
結局直接参照しか扱えないため、包含するクラスは全部そのタイプにしなけりゃ
意味がなかったりして、結局大げさになりすぎてうまくいかないかな。
GCとは相性が悪いね。
MSNメッセンジャーでの「ほげほげがサインインしました」みたいなポップアップ
ダイアログを作りたいのだが,ここにいる諸氏ならばどのようにして実現するか,
意見をお聞きしたい.
出来合いのコンポーネントを使う。
>>290
他にもあるけど

窓の杜 - 【NEWS】米MS提供の.NET開発向けカスタムコントロール集「Visual Basic Power Pack」
http://www.forest.impress.co.jp/article/2004/06/24/vbpowerpack.html

293290:04/08/17 21:46
>>292
激しく感謝.ありがとう.
294デフォルトの名無しさん:04/08/18 18:19
ファイルの末尾数バイトを削除する簡単な方法ってありますか?
一度全て読み込んだ後削除して上書きしか思いつかなくて。。。

消した後、そのファイルに追加を行うので、
消したい部分のみ上書きする方法でもいいのですが。。。
簡単……ねぇ?
上書きなら難しいことでもないけど。

int b = 5;
FileStream fs = new FileStream("hoge.txt", FileMode.Open, FileAcceess.ReadWrite);
fs.Position = fs.Length - b;
StreamWriter sw = new StreamWriter(fs);
以下略
296294:04/08/18 19:01
>>295
そっか TextWriter に、予め頭だししておいた Stream をぶち込めばよかったのか
ありがとうございますそれでいけそうです
>>295
そっか Mamko に、だしておいた Seishi をぶち込めばよかったのか
ありがとうございますそれで子供できそうです
つまらん
299デフォルトの名無しさん:04/08/23 08:20
 C#で複数のマウスイベントを検出することは可能でしょうか?
USBマウスとUSBトラックボールをつなげています。こららの移動情報を個別に取得したいと思います。
どうすれば、よいでしょうか?宜しくお願いしまう。
>>299
.NET Frameworkのライブラリじゃ不可能。
Raw Input APIを使う必要がある。
参考:ttp://www.hatena.ne.jp/1085972533
意外にも、DirectInput じゃ区別できないのよね。
実行ファイルに関連付けられたアイコンをプログラムの中で
使用したいのですが、いい方法はないでしょうか。

なお、今のところ、同一のアイコンファイルを
コンパイルオプションの「/win32icon」、「/resource」の双方を
使って実行ファイルに取り込んでいます。
>>302
/win32icon は API の ExtractIcon/ExtractIconEx で取り出せる。
304デフォルトの名無しさん:04/08/26 01:30
classとstructを簡単に見分ける方法ってある?
ライブラリのやつとかいちいちマニュアル見るの面倒なんだが。
>>304
VS使ってるならnewのインテリセンスとか。
あんまりclassかstructかを見分ける必要なぞ感じたことがないしな。
306デフォルトの名無しさん:04/08/26 11:59
ListBoxを縦に二つに分けることはできないんでしょうか。
MultiColumnではなくて、ひとつの項目を二つの列に分けて表示したいんです。
具体的に何をしたいかというと、エラーの内容と発生時刻を表示したいんですが、
発生時刻を左側に、エラーの内容を右側にわけてリストボックスに表示したいんです。
日付は必ず1行ですがエラーの内容は複数行になる可能性があるので、
文字数揃えて表示・・とかよりも縦に二つに割れたら楽だと思うんですけど、どうやってやるのかさっぱりです。
ListBoxで実現するには、あるいはほかのコントロールで実現するにはどうすればいいんでしょうか。
>>306
ちゃんと読んではいないけどGoogleのイメージ検索で引っかかったこれはどうだろう。
ttp://www.codeproject.com/cs/combobox/resizablelistbox.asp

//私ならListViewを使うかな……?
ぶっちゃけ自分で描画したほうが早い
>>308
めんどくさくね?
面倒くさいかどうかというのは実装の早さに関して考慮することじゃないような
311304:04/08/27 00:43
>>305
そうか。
コピーするときにcloneがいるかとか
遅くなるのかとか、結構気になるんだが

チューンナップなぞ遅さが気になってからすればいいんですよ.

早過ぎる最適化は諸悪の(少なくとも大半の悪の)根源なり -- DEK
313デフォルトの名無しさん:04/08/27 17:15
AxWebBrowser って ToolTip くっつけられないんだっけ?
314313:04/08/27 17:16
くだらない質問なのにあげちゃった_| ̄|○
>>305
boxing と unboxing でドツボにはまるぞ。
値型と参照型の違いは押さえておいた方が良い。
だよね。
struct を lock () して排他したつもり、とか。
心配しなくてもできねーよ。
テキストボックスで HOME や END、あまつさえ SHIFT+HOME や SHIFT+END、
CTRL+Z や CTRL+C/V/X を実現するには自分でコードを書かないといけないのでしょうか?
>>318
まず試せ。
320デフォルトの名無しさん:04/08/28 23:16
Windows.Formにプロパティを加えたんだけど、
デザイナのプロパティウィンドウには表示されませんね。

基底クラス(Windows.Form)に加えたプロパティは
派生クラス(Windows.Form)のデザイナに反映される
みたいだけど、自分自身ならなぜだめなのかなぁ。
>>320
まったく同じレスをどこかで見たなぁ。
>>321
俺も見た記憶があるので探してみた
http://pc5.2ch.net/test/read.cgi/tech/1045307942/294
323306:04/08/29 14:08
>>307,308
遅ればせながら・・・
ListViewでいけました。
ありがとうございました。
詳細表示なんてさっぱり思い浮かびませんでした。
324318: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にすると線ができないんです。
>>325
Bitmap に SetPixel で点を描いて、Graphics.DrawImage で画面に描写。
他には、
FillRectangle(DrawRectangleは不可)で幅・高さ1の四角を描画。
Graphics.GetHwndで取得したデバイスコンテキストにWin32APIのSetPixelで描画。

……元画像のビットマップを取得できるならBitmap.SetPixelが一番手っ取り早い/速いんだけどねー。
それ俺も気になって調べたんだけど
点を描画するGraphicsクラスのメソッドはないみたいなんだよね
結局SetPixelで妥協したけど、
Graphicsオブジェクトを使って描画を行うというルールから離れるからあんまりやりたくない
……327のGetHwndはGetHdcの間違い。
//user32.dllのAPIをまとめたクラスを最近作ってるからhwndまみれでつい。
>>328
Graphics はベクタ形式を含む一般的なグラフィックを扱うクラスだから、“点”という概念がないのよね。
数学的には、点は半径が無限小の円と等価な存在で、半径0の円は画面に表示できないから。

点、というか、ピクセル単位の処理がしたければビットマップを使えと。

Graphics に元画像のビットマップを取得するメソッドがないのは、
将来的に(Avalon で)、OS 自体をベクタ画像ベースで動くものにするつもりでいるからじゃないかな。
>>330
目から鱗
332デフォルトの名無しさん:04/09/08 21:18
http://www.atmarkit.co.jp/fdotnet/basics/adonet01/adonet01_01.html
の記事をみてSQL Server 2000を使ってみようと思い立ったんですが、
とりあえず http://www.microsoft.com/japan/sql/evaluation/trial/2000/ をインストールして
みたのですが、ヘルプをみても使い方がサッパリ分りません。
インストールするとタスクトレイにDBのアイコンがでますが、これのサービスをスタートしようとすると
エラー1069(ログオンに失敗したため、サービスを開始できませんでした)となってしまいます。
これってまず何をすればいいんでしょうか?
はじめまして。
http://mobiquitous.com/programming/ietoolbar.html
これを使って、IEツールバーのボタンが押されたらあるページがIEに表示されるように
したいのですが、どうすればIEを操作できるのか見当がつきません。
何か関連ありそうなキーワードがあれば教えてください。よろしくお願いします。
>>333
Site もしくは Site の IServiceProvider 経由で IID_IWebBrowser もしくはIID_IWebBrowserAppを
得て Navigate すればいいんじゃない?
335333: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
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が片づける。
351346:04/09/17 15:10:47
なるほど、色々ありがd。
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
ナンバー図は知らんが、株はサイトと直接ソケット接続してデータやり取りするものもあった希ガス.
368365:04/09/24 12:59:54
>366
ということは、まずHTMLのソースを元に配列化して、データを取得するということでしょうか?

取得の仕方だけが分からないんで・・・
369デフォルトの名無しさん:04/09/24 13:03:00
まずデータがどこにどういう状態/形式でおかれているか、によって話は全く違った方向に転がっていくだろう。
370366: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でクリアしようとするのは
> 問題ないんでしょうか?
> すごく抵抗を覚えるんですが・・・
そんなことよりも、初期値を指定しないで初期化する構造体の方に抵抗を覚えるな。
378375: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コントロール)による極簡単なサンプル
ttp://chikuma.sit.ac.jp/2003-zemi/0103124/ASP/programs.htm

DirectX9のDirectShowの.NETラッパ作成プロジェクト
ttp://www.codeproject.com/cs/media/directshownet.asp
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
何がしたいのか分からないので具体例を。
410408: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型で呼び出す。
412408: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#プログラミング 【基礎】
http://www.gihyo.co.jp/books/syoseki.php/4-7741-1767-6
を読んでタブ型メモ帳を作ろうとしていました。
この本は他のC#の解説書・サイトと比べるとかなり基本的なことだけでまとめられていて
自分にピッタリだなぁと思ったんです。
しかし質問するにつれてこの本に載っていない単語・表現・記述などがあるたび
検索してひとつずつ理解しながらまた質問していました。
やはりこれだけでは全然足りないみたいです。
これだけは読んでおけ!っていう本・サイトはありますか?
420デフォルトの名無しさん:04/10/19 22:37:28
>>418
>  「開く」「保存」「キャンセル」のボタンがあるやつです。

それくらいならFormから派生させたクラス書こう。
Buttonを3つ配置してそれぞれのClickイベントでDialogResultプロパティを適当に設定するだけだ。
421418:04/10/19 23:02:25
プログラムを書くのは簡単ですが、OS or IEで用意されている
ものがあるのであればそれを使いたい。
そもそもOS or IEのバージョンによっても表示が変わりますよね。
422418: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);
で良さそうだけど。

//開閉状態のチェックは色々難しいところがあるようだ……。
ttp://forums.belution.com/ja/vc/000/153/83s.shtml
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);
432429: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のほうで入力中でも、影響なくスクロールする方法があれば教えていただきたいです・・・。

434467:04/10/24 23:06:09
すいません自己解決しますた

Focus()ハズしてrichTextBox.1HideSelection = falseでうまくいきました
435433: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#によるコンポーネントプログラミング
ttp://www.amazon.co.jp/exec/obidos/ASIN/4274065340/
にはビジュアルなコントロールの作り方しか載っていませんでした。

よろしくお願いします。
443デフォルトの名無しさん:04/10/26 00:06:51
>>442
そりゃ漠然としすぎてて書きようがないからじゃないかなぁ。

ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vbcon/html/vbconComponentAuthoring.asp
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にあたるか、
見つける方法ないですか?
ソートされちゃうと順番変わってわけわかめ。でも自動ソート機能は欲しい。
447446: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
ふとどぼんを見に行ったらこんなのもあったが。
ttp://dobon.net/vb/dotnet/datagrid/currentrow.html
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と勘違い……。
458454: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
自分で気合で描画することを進めます。
462454: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();
464454: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などの解説本を探してみたのだが、全然見つからないね。

ヘルプだけ見て使いこなせということなんだろうか。
470466: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で回してやるとかしな。
477474: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の部分)を変えたほうがいいんじゃないか。

ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpgenref/html/cpconnamespacenamingguidelines.asp
482479:04/10/31 19:11:46
>>481
ちゃうちゃう

System.Windows.Forms と System.Windows.NetForms の中に、
型は同じだけど挙動の異なるクラスがあったときに、
using 文でどちらを採用するか切り替えるのは邪道かな?って事
483479:04/10/31 19:12:21
>>482
別に名前空間名はなんだって良いんだが
484デフォルトの名無しさん:04/10/31 20:48:00
>>482
そういうクラスが大量にあるソースを目の前にしたときに激しい絶望感に襲われるのでやめてください。
using書いてるのにnamespaceフルに書いて別のnamespaceのクラスを使用されたりして混沌に拍車がかかったりします、してます……
485479: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メソッドってのがあるんだけど。
490488: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 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/
現在ベータ版。非商用利用に限り無償。

代表的なところでは、こんなものか。見た目や動きが微妙に違うので、実際に使ってみて選んだ方がいい。
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("","");
にしても駄目?
508506:04/11/06 01:08:21
だめっぽいです
ブレークポイントしかけても反応してくれません。
Panelの上に張ってるのでPanelにもイベントハンドらを記述したのですが
どっちもイベントが発生しないみたいです。

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

PictureBoxやPanelはユーザの通常操作ではフォーカスを得る事はない。
510508: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ライブラリをみながら作るだけではちょっとムリがあるかなと思いました。
515495:04/11/06 20:36:09
>>496-497
亀ですがdくすです。

む〜。実際にデータ送らないと切断検出できないですか〜。
送信、受信が別スレッドに分かれているんで、リターンを待つ同期に一苦労^-^;
516デフォルトの名無しさん:04/11/06 20:44:40
>>515
送信と受信を一つのスレッドでやるとエライ事になるよw
あとTcpClientは結構ゴミだからクライアントアプリでもSoket使った方がいいかも。
517495:04/11/06 20:51:11
>>516
>クライアントアプリでもSocket
具体的にどのような点が優れているんですか?
ちょっとワカラン orz
518デフォルトの名無しさん:04/11/06 20:58:32
>>517
NetworkStreamでしか送受信出来ない、細かい制御(受信側のみ切断とか)も出来ない
ついでに非同期送受信も出来ない・・・
TcpClientで作っても後々書き直すことになると思うw
519495:04/11/06 21:00:06
>>518
ラジャ^-^;
520495:04/11/06 21:01:24
あ〜送受信系統を1つのクラスに押し込めて置いてよかったw
このクラスの中身だけ変えればおkだわ
521デフォルトの名無しさん:04/11/06 22:26:52
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1003826049&res=81&fi=no

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

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

あと(ぉ終了処理はShutdownの後でCloseしよーw
523521:04/11/07 01:12:53
了解です!(BeginRecieveするメソッドにソケット渡し忘れてた・・・(/ω\))
NetworkStream調べてみます〜

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

int recBytesSize = socket.EndReceive( ar );
↑で受信データサイズ抜いた時点で必要とするbyte配列は確定してない・・・ということですか?
524495:04/11/07 16:00:26
何か似たような事やっている人がいるなぁ ^-^;
おまいは俺か?
525杏仁:04/11/07 21:51:38
>>498-503
ありがとうございました。おかげで動作しました。
もう一つ質問なのですが、DLLの仕様を見ると
 BYTE *HOGE()
という関数があります。
この場合は、どうやって呼び出せばいいでしょうか?
よろしくお願いします。
526521:04/11/07 21:56:34
>>495
あなたの子よ!認知してよ!

非同期NetworkStreamのサンプル見つからない(MSDNのだと断片的でわからず・・・)
527デフォルトの名無しさん:04/11/07 22:04:54
ところで Bigin〜 したら必ず End〜 しなきゃいけないの?
やりっぱなしじゃ駄目?
528527: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++ やろうぜ!!
http://pc5.2ch.net/test/read.cgi/tech/1014486422/

//沈んでるなぁ……。
545536: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です。
http://www.geocities.jp/grs_hp/

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

最高の会社にするため、みんな頑張ってます!
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.再起動してアプリ側プロジェクトを操作する
という形でないと、僕の所では自働補完が機能しません。
これもちょっと気になるのですが、もしお邪魔でなければ試してもらえませんでしょうか?
572570: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ドキュメントを生成しない方が良さそう・・・
575570: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="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
こんな感じになります。ちなみに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
http://homepage3.nifty.com/midori_no_bike/CS/
上のページの、「実行時間の高精度な計測」というのを使ってみたくていろいろやってたのですが、
どうしても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 なので無視。
582581:04/11/11 20:05:50
首吊ります・・・ orz


583579: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
} がありません
って言うコンパイルエラーがなぜか出て
ファイル内のテキストを丸ごと切り取って貼り付けたら
正常にコンパイルできたことがあったなあ
586579: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()もセットで。

ttp://www.codeproject.com/bitmap/dibsection.asp?select=287473&df=100&forumid=56&exp=0
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ならできるよ
602600: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でダイアログもどき作った方が楽でっせ
605603: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
そうだな。それっぽい名前のを色々弄ってみるのは大事だと思うよ。
609603: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);
    }
}
611603:04/11/19 10:04:31
>>610さん
見事に動きました!
それにしてもインテリセンスで「TABキーを押してください」って
こんな指示始めてみましたよ。(^^;;
ありがとうございました。

MainFormがくっついて動いているのが嬉しくて意味もなく動かしニヤってしてみたり。。
612初心者:04/11/19 21:49:40
C/C++でマウスの座標を表示させるにはどうしたらいいでしょうか。
613デフォルトの名無しさん:04/11/19 21:53:40
>>612
スレ違い。
http://www.kumei.ne.jp/c_lang/sdk2/sdk_101.htm
でも読んでください。
614デフォルトの名無しさん:04/11/19 21:55:53
> 当ホーム・ページの一部または全部を無断で複写、複製、転載
> あるいはコンピュータ等のファイルに保存することを禁じます。

ブラウザのキャッシュ消すのまんどくせ
615初心者:04/11/19 22:10:41
ありがとうございました。とりあえず何とかなりそうです。
616デフォルトの名無しさん:04/11/20 16:24:44
Formにいろいろ描きたいので
private void Form3_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
に記述したのですが、
リサイズ時に再描画されるときとされないときがあるみたいです。
されないときは一度最小化してから元に戻すと再描画されるのですが
リサイズ時に確実に再描画されるほうほうってないでしょうか?
617デフォルトの名無しさん:04/11/20 16:26:47
ResizeRedraw
618616:04/11/20 23:58:04
>>617さん
ありがとうございました。 ぶじ動くようになりました。
619デフォルトの名無しさん:04/11/22 10:07:34
620デフォルトの名無しさん:04/11/22 17:00:39
クラスをいくつかのファイルの分割して記述する方法はあるんでしょうか?
もしあったら教えてください。
621デフォルトの名無しさん:04/11/22 19:32:31
>>620
partialキーワードがC# 2.0から追加される。
622デフォルトの名無しさん:04/11/26 13:13:34
C#って、アセンブリで言うgoto命令のような物ってありますか?
あれば教えてください。
623デフォルトの名無しさん:04/11/26 13:18:20
普通にgotoがある。
ネストループからの脱出以外に使うべきではないが。
624デフォルトの名無しさん:04/11/26 13:32:27
つうか言語仕様ぐらい大した量でもないんだから全部目を通せと。
625デフォルトの名無しさん:04/11/26 13:59:29
せめてキーワードくらいはなぁ・・・
626622:04/11/26 15:42:40
623-625
ありがとうございます
もっかい勉強しなおします…
627デフォルトの名無しさん:04/11/26 16:04:00
>>626
C#のgotoはswitch 文の case とかを飛び先としても指定できるように拡張されているので、
いろいろみてみると面白いよ。
どうせなら、gcc拡張的なgotoの拡張もついでにやってくれるといいんだけど・・・
628デフォルトの名無しさん:04/11/27 15:16:17
正直いって .NET って時期尚早って感じがする。
広くに使われるようになるまでに後5年はかかると見た。
629デフォルトの名無しさん:04/11/27 15:33:56
5年もかからないよ
後2年で半分は消滅する

WindowsFormクラスは消滅けってい
GDI+もいらなくなる

すべてロングホーンが悪い
630デフォルトの名無しさん:04/11/27 15:35:50
ロングホーンってヘヴィィそうだね。
使いたいと思わないな。
Windows 2000 が最高。
631デフォルトの名無しさん:04/11/27 15:47:45







C# と Java の違い教えろ。





// Java >>>>> C# なのは自明なんだがな。。。




632デフォルトの名無しさん:04/11/27 15:50:05
>>631
少しも自明じゃない。
633デフォルトの名無しさん:04/11/27 15:50:34
火病書き込みに反応すんなよ
634デフォルトの名無しさん:04/11/27 15:52:20
>>632

ライブラリの充実性からいって自明だろ。
それにJava のソースは公開されてるしな。
格が違いすぎるんだよ。
635デフォルトの名無しさん:04/11/27 15:52:35
自演に反応すんなよ
636デフォルトの名無しさん:04/11/27 15:53:47
>>634
そうかな。Java のほうが充実していると一概に言えるか?
ソース公開は確かによいが。
637デフォルトの名無しさん:04/11/27 15:54:20


                        お
                      い
                    は
                  や
                く
              し
            ろ
          よ
        
      C
    #
  


638デフォルトの名無しさん:04/11/27 15:55:40
公開されていない部分があったような...なんだったっけ
639デフォルトの名無しさん:04/11/27 15:56:17
残念ながらC#は仕様が公開されてますので
ソースがほしけりゃmonoのソースでもみてください

Javaはソースコード見た時点で
いろんなプロジェクトに参加できなくなるという恐ろしいライセンスつきですが?
640デフォルトの名無しさん:04/11/27 15:56:18
>>636
> そうかな。Java のほうが充実していると一概に言えるか?

言える。
641デフォルトの名無しさん:04/11/27 15:57:15
>>639
> Javaはソースコード見た時点で
> いろんなプロジェクトに参加できなくなるという恐ろしいライセンスつきですが?

見たって言わなきゃいーんだよ。そんぐれー考えろ
642デフォルトの名無しさん:04/11/27 15:57:18
まぁ速度はJavaのほうが2倍かかるけどな

あとはマ板でやってちょ

●なぜJava厨はそんなに劣っているのか? 8
http://pc5.2ch.net/test/read.cgi/prog/1101209533/
643デフォルトの名無しさん:04/11/27 15:59:59
>>640
C# のほうが充実している部分もあるのだが。
644デフォルトの名無しさん:04/11/27 16:00:15

  や
    く
      何
        か
          反
            論
              し
                な
                  さ
                    い
                      、
                        C
                          #
                            
                              厨
                                君
                                  w
                                    w
                                      w
645デフォルトの名無しさん:04/11/27 16:12:45
なんか盛り上がってますね
646デフォルトの名無しさん:04/11/27 16:35:49
いやべつに
647デフォルトの名無しさん:04/11/27 17:33:33
暴言語は冗談抜きで死滅寸前だからな
648デフォルトの名無しさん:04/11/27 22:03:04
言語としての機能は、後発のC#のが多少上。
ライブラリの充実度はjakartaやその他もろもろのオプソ集団を要するJavaのが上。
業務では、GUI作らないならJavaを用いるのが普通。

649デフォルトの名無しさん:04/11/28 01:52:43
シェアで言えばJAVAよりVB.NET2005にヤラレそうな気がする
650デフォルトの名無しさん:04/11/28 11:51:59
VBは今現在でもC#より上、将来は知らんがね。
651デフォルトの名無しさん:04/11/28 12:24:08
えぇぇぇぇ
652デフォルトの名無しさん:04/11/28 12:27:21
お前ら>>1読めと。
ここは言語の優劣を語るスレではないぞと。
653デフォルトの名無しさん:04/11/28 15:03:14
最高に頭悪そうな発言してください in ム板 (2)
http://pc5.2ch.net/test/read.cgi/tech/1090324689/

かと思ったじゃねぇか
654デフォルトの名無しさん:04/11/30 00:09:17
C#を学習する練習とおもい、メモ帳もどき+αを作成して
完成したのですが、巨大なファイルの表示に時間が
掛かります。
 秀丸エディタさんとまではいかないでも、少しは
早く表示できるようにするには、どうすればよいのでしょうか。
 textBoxを1から自分で作成し直すにしても、その考え方の
ヒントだけでも教えてください。
655デフォルトの名無しさん:04/11/30 00:21:03
VirtualModeみたいなもんか
656デフォルトの名無しさん:04/11/30 01:04:22
C#の学習のためなら、もっと他にやることあるんじゃないのか…

と思ったら負けですか?
657654:04/11/30 01:18:21
>>656
元々勝ち負けのない趣味のプログラムなのですが、
他にといわれても。文法から始めろと?
>>655
VirtualMode?を調べてみます。
ありがとうございます。
658デフォルトの名無しさん:04/12/03 06:51:53
>>654
ReadLineで処理してるんじゃない?
だったら、ReadToEndで読んでみては?

FileStream fs = new FileStream("ファイルのパス",FileMode.Open);
StreamReader sr = new StreamReader(fs);
textBox1.Text = sr.ReadToEnd();

ところでVC#.Net2005っていつ発売なの?
はやく.Net Freamwork2.0を使ってみたい・・・
659デフォルトの名無しさん:04/12/03 14:21:06
>>658
早くて来夏だろうねぇ。
環境があるなら、β1を試してみたら?
十分に正式版に向けて準備ができると思うけど。
それに、今ならAvalonのPreviewも出てて、楽しいと思うし。
660デフォルトの名無しさん:04/12/04 10:53:23
Avalon previewは現状MSDN会員のみだよね?
661デフォルトの名無しさん:04/12/04 19:44:57
フォームの最小化ボタンを押した時みたいに
this.Hide();
this.ShowInTaskbar = true;
と言う状態にしたいのですが何か方法があるのでしょうか?
662デフォルトの名無しさん:04/12/04 19:48:40
>>661
それで良いんじゃないのか?
663661:04/12/04 20:09:22
>>662
いや、やってみたら分かるけど
this.Hide();
とすると
this.ShowInTaskbarを弄っても反映されないみたい
Locationをどっか遠くに設定するしかないのかな?
664デフォルトの名無しさん:04/12/04 20:19:57
this.WindowState = FormWindowState.Minimized;
じゃいかんの?
665661:04/12/04 20:41:29
>>664
レスありがとうございます。
それでイケました。
666デフォルトの名無しさん:04/12/05 12:08:19
C#でC++でいうマクロのようなものってあるんでしょうか?
マクロとテンプレート使ってトリッキーなことしてたのでそれをC#で実現する方法がわからなくて困ってます。
667デフォルトの名無しさん:04/12/05 12:11:48
トリッキーな事はやらない方向にと言うのが言語の潮流。
668デフォルトの名無しさん:04/12/05 12:27:53
そんな正論言ってもしゃーないやん
669デフォルトの名無しさん:04/12/05 23:03:06
たぶん、むりぽ。次期バージョンでテンプレートはいるらしいけど。
670デフォルトの名無しさん:04/12/05 23:25:12
テンプレートはかなり期待。
671デフォルトの名無しさん:04/12/05 23:31:20
C++みたいなのだったらやだな。
へたに型とかみなくていいから、単にテンプレート変数を
自分の書いた文字で置き換わってコンパイルされるだけでいい。
そっちのがいろいろ使い道ある。
672デフォルトの名無しさん:04/12/05 23:37:01
>>671
単純置換は止めてくれ。C++ の如くアセンブリが肥大化する。
673デフォルトの名無しさん:04/12/06 00:02:58
>>671
むしろC++見たいなので、単純置換でないものがいいな、
もし型の置き換えだけであれば、テンプレートよりもメタクラスの実装の方が何倍も綺麗でいいと思うし。
てか、なんでメタクラスは実装されないんだろう……シクシクシク
674デフォルトの名無しさん:04/12/06 00:04:53
>>673
メタクラスはクラスのクラスだっけか
smalltalk やった事無いから分からん
675デフォルトの名無しさん:04/12/06 00:08:25
>>674
とどのつまり型を入れることのできる変数。
Metaclass a = int ;
a b ;

int b ;

たとえばこんな感じ
void Func( Metaclass T , int hoge , ... )
{
}

template 全くいらない
676デフォルトの名無しさん:04/12/06 00:08:28
>>673リフレクションじゃだめなのか?
677デフォルトの名無しさん:04/12/06 00:15:04
>>675
Type
678デフォルトの名無しさん:04/12/06 00:38:11
>>677
それは何かが違う C++ でいえば typedef と type_info 型ぐらい違うな
679デフォルトの名無しさん:04/12/06 00:40:21
もう型なんてなくていいよ
680デフォルトの名無しさん:04/12/06 00:44:47
スクリプト言語で型無しではまったことないの?
681デフォルトの名無しさん:04/12/06 01:22:42
C#(というか.NET)でLuaを使っているサンプルはどこかにないでしょうか。
当方で探しても見つかりませんでした。
682デフォルトの名無しさん:04/12/06 01:36:42
683デフォルトの名無しさん:04/12/06 02:09:29
ttp://www.codeproject.com/managedcpp/luanetwrapper.asp

> So what about executing Lua script in .NET applications?
> This should not be a major problem, just the matter of writing a managed C++ wrapper.
684デフォルトの名無しさん:04/12/07 03:49:48
かなり基本な質問です、C/C++で書かれたライブラリ
(.NETとか関係なけりゃクラスすらないような)を、C#で
使用する方法は無いのでしょうか

なんとなくムリかなとは思うのですが、あまりに基本な
ためかどこのFAQを読んでもハッキリした答えがなくて
モヤモヤしてます。C/C++で作られた資産を移植しようと
すると、やはり手作業が入るものでしょうか
ズバッと斬ってやって下さい orz
685デフォルトの名無しさん:04/12/07 04:11:39
P/Invokeという手法で使用できる。
例えばWin32API呼出もC用ライブラリの呼出と考えられる。
関数のエントリポイント、値渡し参照渡し、相互の型の対応などを考える必要はあるが、基本はこんな感じ。

[System.Runtime.Interopservices.DllImport("user32.dll")]
public static extern uint SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

詳しくはヘルプを見るべし。
ms-help://MS.VSCC/MS.MSDNVS.1041/cpguide/html/cpconconsumingunmanageddllfunctions.htm
686デフォルトの名無しさん:04/12/07 06:09:08
>>684
DLLなら>>685の言うようにP/Invokeで利用可能。
そうでないなら、COMやDLLにするかManaged C++でラッパを書いて利用する。

漏れはP/InvokeメンドクサイのでCOMコンポーネント経由でやったりするのが好きなんだけど、
Windows XP以外ではインストーラが必須になるので嫌う向きもあるみたい。
687デフォルトの名無しさん:04/12/07 16:32:28
>>675
おおーすげー便利そう・・・
C#2.0に欲しいなぁ

メタクラスで指定した型の戻り値が欲しい時はどうするの?
object Fanc( Metaclass T, int hoge, ...)
{
}
ならちとイヤーな感じw
688デフォルトの名無しさん:04/12/07 17:48:59
>>675
リフレクションのシンタックスシュガーか・・
どんなときに便利なの?
689デフォルトの名無しさん:04/12/07 18:08:09
>>675
それって実行時にすっ飛ぶんだよね
えらーしょりしにくくね?
690デフォルトの名無しさん:04/12/07 20:24:52
>>675
C#の設計思想と全然合わないな。異物を混ぜるなって感じ。
691デフォルトの名無しさん:04/12/07 22:09:54
>>675
悪くはないと思うけど、T 型を返すときはどうすんの?
692デフォルトの名無しさん:04/12/07 22:27:30
>>685さん >>686さん ありがとうございます。

てっきりC++のコードが使えないと思ってたので
助かりました。安心してC#を勉強できそうです。
さっそくDLL作成のほうに手をつけてみます。
693デフォルトの名無しさん:04/12/07 22:31:38
>>688
Type で reflection って面倒だから、シンタックスシュガーには意味あるんじゃない?
でもテンプレートの代わりにはならないような気が・・・

template <class T> T Max(T a, T b) なんてのから、型推論で T を導出してくれて
こそのテンプレートだし。若干 C++ マンセー入っちゃってるけど。
694デフォルトの名無しさん:04/12/07 22:33:24
先に予想してみるテスト。

>>692
ポインタもWindowsのハンドルもIntPtr型だ。
695デフォルトの名無しさん:04/12/07 22:35:21
漏れも

>>692
コールバックも書けるから安心してください(MSDN参照)。
696デフォルトの名無しさん:04/12/07 23:25:40
>>693,688
シンタックスシュガーではないと思われ
697デフォルトの名無しさん:04/12/07 23:42:59
>>691
boostとか見てると良く分かるけれど、戻り値が型推というのはバクダンになりやすいので、使わないというのは有りかと思います。
この形式ではやるとしたら構造体かなにかで型と実体のペアを作って返すしかないですね。

>>690
C#の設計思想など知りませんが、少なくともよりオブジェクト指向的ではあろうかと……
698デフォルトの名無しさん:04/12/08 12:56:45
>>696
いや、シンタックスシュガーだと思うよ。だって、
・変数宣言ができる
・メソッド等のInvokeが普通の書き方でできる
っていう、純粋に記法の追加でしかないし。
即値を渡せばコンパイル時に型を決定して最適化はできるだろうけど・・
関係ないけど全然Metaclassじゃなくて単にClassだよね。

>>697
型推論はともかく、T Max(T a, T b) 程度が書けないのでは記述能力不足・・・
699デフォルトの名無しさん:04/12/08 14:48:20
>>698
リフレクションをシンタックスシュガーということにしてしまうと、全てがシンタックスシュガーになってしまわないか?
それは何か違う気がするんだが・・・
700デフォルトの名無しさん:04/12/08 15:15:09
>>699
リフレクションをシンタックスシュガーだと言っているのではなく、
>>675の「Metaclass」なるものは単なるリフレクションのシンタックスシュガーに過ぎない
と言ってるだけ。

Type T; があったとき、 T a = new T() なんて書けるとリフレクション使うときには便利、
それには同意する。
701デフォルトの名無しさん:04/12/08 15:23:24
そうなのかな、どうにもこうにも拡大解釈としか捕らえられないのだが・・・
702デフォルトの名無しさん:04/12/08 15:29:41
だって漏れは「リフレクションをシンタックスシュガーだということに・・・」って主張してないじゃん。
だから一体何をどう捕らえられているのかサッパリわかんない。
ケチらないでもう少し言いたいことを書いてよ。
703デフォルトの名無しさん:04/12/08 15:37:49
>>702
ちょっと勘違いがあるかも、リフレクション機能を対象にしたシンタックスシュガーってのは変だと思うわけ。
リフレクションは基本的にこれがありとなると、もはや何でもありになってしまう。
何でもありな物をシンタックスシュガーだと主張するなら言語機能の全てがシンタックスシュガーということになってしまうが、
これは常識的なシンタックスシュガーの概念とは違うと思う。
シンタックスシュガーは元々定義があいまいなので、主観で貴方がそう思うというならそういう事としかいいようがないと思います。
704デフォルトの名無しさん:04/12/08 16:00:03
>>703
よくわかった。漏れが>>715をシンタックスシュガーだと思ったのは、現行のTypeとの違いが
局所的な記法の違いだけだってとこから。
主観だけど構文が違うだけで機能が同じなら、それはやはりシンタックスシュガーだと思う。

C++のテンプレートが型推論機構のおかげで普通のチューリングマシンとしての機能を完備していて、
単なるマクロの便利な記法を脱却しているのと比べてしまうからそう思うのかもしれないけど。
705デフォルトの名無しさん:04/12/08 21:21:52
ていうかシンタックスシュガーって何ですか。
706デフォルトの名無しさん:04/12/08 21:24:53
707デフォルトの名無しさん:04/12/08 21:27:26
シンタックスシュガーがあるのなら、シンタックスソルトとか、
シンタックスペッパーもあるのですか?
708デフォルトの名無しさん:04/12/08 21:35:24
>>706
ぐぐった可能性を微塵も考慮しないあたりがステキ。

>>707
正露丸糖衣があるなら正露丸塩衣もあるのですか?
709デフォルトの名無しさん:04/12/08 22:04:50
ていうか正露丸糖衣って何ですか。
710デフォルトの名無しさん:04/12/08 22:32:07
>>709
C#に対するIDEみたいなもの。
711692:04/12/09 00:02:44
>>692 >>695
ありがとうございます(T−T
間違いなくつっかえると思われます¢(。。;)

なお勉強はぼつぼつ進行しつつあり、予言の的中は
15日以降にスケジュールされております。
712681:04/12/09 19:00:32
>>682
亀レス失礼。
どうもありがとうございます。
713デフォルトの名無しさん:04/12/14 10:55:08
教えてください。
 C#でボタンをクリックすると指定したpdfファイルを印刷するような
プログラムを作成することはできますか?
 どうすればいいでしょうか?なにかヒントをお教えください。
714デフォルトの名無しさん:04/12/14 12:12:27
君はどのくらいプログラミングが出来るのか、なにかヒントをお教えください。
715デフォルトの名無しさん:04/12/14 12:13:50
・Process.Start
・"C:\Program Files\Adobe\Acrobat 6.0\Reader\AcroRd32.exe" /p /h "%1"
716713:04/12/14 12:43:25
>715
ありがとうございました。
おかげで印刷することができました。
複数枚を、印刷したい時や、ページを指定して印刷するときは
どのようにすればいいでしょうか?よろしくおねがいします。
717デフォルトの名無しさん:04/12/14 12:56:01
・・・少しは自分で考えろ
718デフォルトの名無しさん:04/12/14 17:45:54
>>716
馬鹿ハケーン
719デフォルトの名無しさん:04/12/15 17:27:53
ファイルをゴミ箱に送るにはどうすればいいのでしょうか
720デフォルトの名無しさん:04/12/15 17:33:12
721719:04/12/15 18:27:09
スミマセンデシタ orz
722デフォルトの名無しさん:04/12/17 18:46:13
そのスレッドの参照を誰も持ってない場合に
実行中のスレッドが勝手にGCされちゃうことってあるの?

void Start()
{
 Thread thread = new Thread(new ThreadStart(new MyThread()));
 thread.Run(); // 作りっぱなし
}
723デフォルトの名無しさん:04/12/17 19:48:34
>>722
ないから安心したまい。
実行環境が内部でスレッドを管理するので、参照は実は存在するから。
スレッドが行うメソッドが終了したらGCの対象になる。

細かい話だが、StartされないThreadオブジェクトは参照が無くなればGCの対象だが、
WeakReferenceでのみ参照を持っている状態でもGCの対象にならなくなるようだ。
724デフォルトの名無しさん:04/12/17 20:04:33
しかしMutexが勝手にGCされてアプリの多重起動防止が効かなくなるということはあるらしいぞ
そのためGC対象から外すよう明示的に指示してやるのが良いそうだ
GC.KeepAlive(mutex);
ってな感じで
725デフォルトの名無しさん:04/12/17 21:07:34
>>724
それはひょっとしたらSocketがListenした時にMutexが解放されてしまうと言うバグかな。
そうだとしたらGC.KeepAliveも無意味だよ。
そもそもGCの問題じゃないし。

.NET1.0はSP3では解決されてる。.NET2.0(のベータ)は初めから問題なし。
.NET1.1ではSP1でも未解決な、ちょっと頭の痛い問題だ。
TCPチャネルを使ったリモーティングですら解放されてしまうし。
726デフォルトの名無しさん:04/12/17 21:19:05
そういえばInsider.NETの会議室にもう一つMutex絡みの話が出てた。
スレッドが終了する時に自動的にそのスレッドが所有するMutexを解放するって話。
727デフォルトの名無しさん:04/12/17 22:03:08
フレームワークのクラスってたくさんあるじゃん。しかも意味不明。
728デフォルトの名無しさん:04/12/17 22:09:16
誤爆乙
729デフォルトの名無しさん:04/12/17 22:12:23
>>725
http://dobon.net/vb/dotnet/process/checkprevinstance.html
> ローカル変数として宣言したMutexを使った場合、うまく行かないことがあるようです(これに従い、
> ここで紹介しているサンプルも修正しました)。静的フィールドを使えば解決されますが、それ以外
> では、GC.KeepAliveメソッドを使用すれば解決できるようです。エントリポイントで二重起動を
> チェックする例を次に示します
730デフォルトの名無しさん:04/12/17 22:23:27
あ、静的変数にしたら問題なくなった。

でもローカル変数のMutexをGC.KeepAliveしてもやっぱりSocketがListenすると解放される……。
731デフォルトの名無しさん:04/12/23 09:39:14
Htmlをテキストとそのままと表示して、置換を使った簡単なエディタを作りたいなと思うのですが
WindowsアプリでローカルにあるHtmlファイルを表示することって出来るのでしょうか?
732デフォルトの名無しさん:04/12/23 10:06:14
うぇぶくらいあんとつかえばいいのでは?
733デフォルトの名無しさん:04/12/23 10:32:27
WebBrowserコンポーネントを使えばいいのでは?
734731:04/12/23 13:01:13
レス有り難うございます。
キーワードを元に検索して参考になりそうなHPを見つけました。
これから頑張って作ってみます。
735デフォルトの名無しさん:04/12/29 23:55:43
次期OSでの商用パッケージアプリってC#で開発されるのかな?
736デフォルトの名無しさん:04/12/30 12:29:00
VisualStudioとか
737デフォルトの名無しさん:05/01/03 00:26:06
つぎのofficeがC#ってのを聞いたことがある。
office2005の入ってる人は.netも入っていて
C#アプリも配布できるのだと。
738デフォルトの名無しさん:05/01/03 14:29:40
Office2003も.NETでプラグインを作れたような。
…って、C#とは限らないか。
739デフォルトの名無しさん:05/01/03 17:56:34
同一アプリケーションドメイン上に、同じキーを持つオブジェクトが1つしかない事を保証したい
singleton を変形し、同じキーで作成しようとしたら、以前作成したオブジェクトを返す
ただし、そのオブジェクトは GC に回収されるようにしたい

WeakReference を Hashtable 内に押し込むのが正解?
WeakReferenceTable オブジェクトとかって無いの?
740デフォルトの名無しさん:05/01/05 00:59:40
C#でRemotingを使いたいのですが、MSDNやGDN以外で参考になるサイトはありますか?
ぐぐったのですが、ほとんど見あたりません・・・
741デフォルトの名無しさん:05/01/05 01:09:35
>>740
慣れればそう複雑でも無い事が分かるから(奥は深そうだけど)、取りあえず自分で実際に試す事だね。
ttp://d.hatena.ne.jp/N0MURA/20040108
VB.NETだけど、こことか。
742デフォルトの名無しさん:05/01/05 01:15:19
>>741
ありがとうございます、試してきます〜
743デフォルトの名無しさん:05/01/05 02:07:36
>>740
本は丸ごと一冊リモーティングの本があったよね
お試しとかでなく実用として遣うなら買うことお勧め。時間の短縮分で元が取れると思う。
744デフォルトの名無しさん:05/01/06 00:52:02
かなり頭が悪いのですが、よろしくお願いします。
以下のようなメソッドがあると仮定します。

メソッド {
if (略) {
bool a
result1 = true;
}

if (略) {
bool result2;
result2 = true;
}

if (result1 == true || result2 == true) {
(終了);
}

}

result1 とresult2 がtrueになったときに
一番下の(終了)という部分を実行したいのですが、
ビルドをすると「未割り当てのローカル変数が参照されました。」と
表示されエラーになってしまいますが、何が原因なのでしょうか。
よろしくおねがいします。
745デフォルトの名無しさん:05/01/06 00:52:18
746デフォルトの名無しさん:05/01/10 19:53:24
C♯ソースコードのステップ数とかを評価してくれるソフトってない?
C++とかのは見かけるんだけど
747デフォルトの名無しさん:05/01/10 21:05:30
>>746
ドットネットのすてっぷカウント♪
ttp://www.vector.co.jp/soft/win95/prog/se327186.html
とかどうだろう。
748yuuteen:05/01/11 18:04:49
こんにちわ。
初めて書き込ませて頂きます。
C#のSystem.Diagnostics.Process.GetProcessesプロシージャが
Windows2000では失敗すると、下記のサイトにあるのですが、

http://support.microsoft.com/kb/823642/ja#kb3

何故、なのでしょうか?
それと、どうやったら、失敗しないのでしょうか?

誰か、助けて!!

749デフォルトの名無しさん:05/01/11 19:58:00
>>748

パフォーマンスカウンタに関する問題が原因だったような。
書いてあるように HotFix を入手するか、違う方法を考えればよし。

特に、二重起動防止をやりたいのなら、これじゃなくて、Mutex を
使うほうがいいよ。
750746:05/01/12 01:22:28
>>747
ズバリでした
探しそびれていたようで。
痛み入りますorz
751yuuteen:05/01/12 12:27:20
>>749
ありがとうございます。
確かにおっしゃる通りで、HotFixを入手する手も考えたのですが
そもそも、根本的に二重起動チェックの方法が悪いのではというところで 悩んでいました。
ちなみに、バッチの二重起動チェックなのですが...。
下記がMutexを使用した場合のソースなのですが こんな感じなのでしょうか?
また、"MyName"は他の文字列と置換え可能だと、サンプルを見る限り
書いてあったのですが、バッチの二重起動チェックの場合、何をここに
記述しなくてはいけないのですか?
二重起動チェック処理は共通関数化して行う予定です。 ご教授下さい。
///////////////////////////////////////////////////////////////////////////
bool exit = false;
System.Threading.Mutex m = new System.Threading.Mutex(false, "MyName");

if (m.WaitOne(0, false) == false)
{
//すでに起動していると判断する
m.close();
exit = true;
}
else
{
exit = flse;
}
//アプリケーションが終わるまでmへの参照を維持するようにする
GC.KeepAlive(m);
}
///////////////////////////////////////////////////////////////////////////
752デフォルトの名無しさん:05/01/12 13:03:14
>//アプリケーションが終わるまでmへの参照を維持するようにする
>GC.KeepAlive(m);
GC.KeepAliveはそういう仕様ではありません。

こんなクラスを使えば良いでしょう。

class Hoge {
 System.Threading.Mutex _m;
 boole _is_ok;
 public Hoge(string id)
 {
  _m = new System.Threading.Mutex(false, id);
  _is_ok = _m.WaitOne(0, false);
 }
 public ~Hoge()
 {
  _m.Close();
 }
 public bool IsOK { get { return _is_ok; } }
}

使い方
class YourApp {
 Hoge _hoge = new Hoge("YourAppName"); // メンバ変数等、アプリが終了するまで残る変数に入れること。
 public void Main()
 {
  if ( !_hoge.IsOK ) return;
  ...
 }
}
753デフォルトの名無しさん:05/01/12 16:11:06
>>751
よく動いてる仕組みもわからず使う気になりますね
全部を詳細に把握しろとは言いませんが。
754デフォルトの名無しさん:05/01/12 22:20:38
コマンドラインコンパイルの方法教えてください。
javac 〜.javaみたく扱いたいんで。
755デフォルトの名無しさん:05/01/12 22:22:51
>>754
知ってるけど秘密 c?c だな
756デフォルトの名無しさん:05/01/12 22:23:22
csc.exeでヘルプを調べる
757デフォルトの名無しさん:05/01/12 22:25:23
>>755
ば〜かww
758デフォルトの名無しさん:05/01/12 22:29:12
cscでやれば、ソリューションファイル、プロジェクトファイル、
アセンブリインフォファイルはいらないんだよ。
759デフォルトの名無しさん:05/01/12 22:31:51
ノリの悪い奴がいるな
ちぃー
760デフォルトの名無しさん:05/01/12 23:01:31
>>755
こういう奴、正直寒い。同じボケるにしてもボケ方ってものがあると思う。
761755:05/01/13 20:32:53
↑必死だなwwwwwww
762デフォルトの名無しさん:05/01/13 22:58:21
オマエモナー
763デフォルトの名無しさん:05/01/16 16:55:58
Bitmap bmp = new Bitmap(100,100);

Graphics g = Graphics.FromImage(bmp);
bmp.MakeTransparent(Color.Red); 
g.FillRectangle(Brushes.Aqua, 0, 0, 100, 100);
g.Dispose();

MakeTransparentを呼び出すと、その後のGraphicsオブジェクトを利用しての描画が出来ないのですが、どうしてでしょうか?
764デフォルトの名無しさん:05/01/16 17:52:13
Graphicsオブジェクトを作ってからbmpに変更を加えているコードに違和感を感じる。。。
765デフォルトの名無しさん:05/01/16 23:25:50
質問です。
マイク端子から音声を取り込むのってどうやるんですか?
766デフォルトの名無しさん:05/01/16 23:34:49
>>765
↓こっちで聞いた方がいいと思われ。
Managed DirectX vol.2
http://pc5.2ch.net/test/read.cgi/tech/1061285378/
767デフォルトの名無しさん:05/01/16 23:37:50
768デフォルトの名無しさん:05/01/17 11:14:41
>>766
>>767
ありがとん。
769デフォルトの名無しさん:05/01/17 14:41:07
static なArrayListのCountを覗こうとするとエラーがでるんですが

class Test
{
static ArrayList momo = new ArrayLIst();
static int Count { get { return Test.momo.Count; } }
}
こんな感じで何かしらAddしたものがあればエラーはでないんですが、
0だと駄目です。
trycatchでつかもうとしても駄目。

メッセージ
'System.ArgumentOutOfRangeException' のハンドルされていない例外が system.windows.forms.dll で発生しました。

追加情報 : 指定された引数は、有効な値の範囲内にありません。

770デフォルトの名無しさん:05/01/17 16:33:51
>>769
初期値をいれ時計
771デフォルトの名無しさん:05/01/17 19:27:43
すまんが、C#だと
catch(Exception e)で全部もれなく捕らえられるんでしょうか?
772デフォルトの名無しさん:05/01/17 19:38:16 ,
>>769
予言するけど、それは多分別の箇所でmomo[0]とかしているせい。
momo を static プロパティにでもして get に breakpoint 置いて見てみるべし。
773デフォルトの名無しさん:05/01/17 21:10:20
>771
できます。
throwできるのはSystem.Exceptionから派生したクラスのインスタンス、またはnullだから。
用途によってはcatchの後を省略してもオケー

private void Form1_Load(object sender, System.EventArgs e)
{
    try
    {
        Nullpo();
    }
    catch
    {
        MessageBox.Show("ガッ");
    }
}

private void Nullpo()
{
    throw null;
}
774デフォルトの名無しさん:05/01/18 19:54:35
ArrayL"I"st
775デフォルトの名無しさん:05/01/18 20:19:07
>>771
捕まえても逃げるものがあるから注意よん
ThreadAbortException とか
776デフォルトの名無しさん:05/01/18 23:08:21
>>775
確認のために聞きたいのですが、「捕まえても逃げる」っていうのは
> ThreadAbortException は、キャッチできても、 catch ブロックの末尾でもう一度自動的に発生する特殊な例外です。
ってことを言ってます?

ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfSystemThreadingThreadAbortExceptionClassTopic.asp
777デフォルトの名無しさん:05/01/19 12:06:00
>>775
とか?とかなのか?
778デフォルトの名無しさん:05/01/19 19:56:57
例外だけに例外がありました。
779デフォルトの名無しさん:05/01/19 20:19:45
( ´д)ヒソ(´д`)ヒソ(д` )ヒソ
780デフォルトの名無しさん:05/01/20 01:41:24
冷害
781デフォルトの名無しさん:05/01/20 21:02:08
Regex reg = new Regex(pat , ここのオプション );
というのが沢山在るんですが、オプション部分が全て同じなので、
変数を使いたいのですが、変数って使えますか?
RegexOptions option = RegexOptions..IgnoreCase | RegexOptions.ExplicitCapture;
のようにしてみたけどやっぱりエラーでした
782デフォルトの名無しさん:05/01/20 21:03:33
使えます。
783デフォルトの名無しさん:05/01/20 21:07:10
どんなエラーが出たってんだ?

> RegexOptions..IgnoreCase
ここがポイントか?
784デフォルトの名無しさん:05/01/20 21:22:12
そういう場合は、変に省略せずソース丸ごと貼り付けろ。すぐに分かる。
785デフォルトの名無しさん:05/01/20 22:08:51
コード見直してみたら成功シマスタ。スマンカッタ
786デフォルトの名無しさん:05/01/20 22:13:20
どこを見直したんだよ
787デフォルトの名無しさん:05/01/21 07:01:07
RegexOptions..IgnoreCase
        ↑まさかここではなかろうな
788デフォルトの名無しさん:05/01/21 10:05:31
C#でJPEGやGIF画像のプロパティ(ピクセルサイズ、色数など)を取得するプログラムを今日中に作れといわれたのですが、当方VB6.0しか使ったことがなく途方にくれています。。。
とりあえずVisualStudio2003のC#でテキストボックスにHELLO WORLDと表示させるところまできましたがもう限界です。
どこかにサンプルコードなどありますでしょうか?
なにとぞなにとぞよろしくお願いいいたします。
789デフォルトの名無しさん:05/01/21 10:16:17
採用時に大口でも叩いたの?

Image.FromFileでファイルを開けて、返値であるImageオブジェクトの各種プロパティをみれば済む話だが。
790デフォルトの名無しさん:05/01/21 19:01:06
VB6なんて雑魚い言語やってるからそーなるんだよな。
791最凶VB厨房:05/01/21 19:33:51
採用時に大口叩いてこれぐらいか。( ..)φメモメモ
792デフォルトの名無しさん:05/01/21 22:07:35
仕事なら「今日中に」なんてありえない。
数分から数十分でやれないと話にならんでしょ。
793デフォルトの名無しさん:05/01/22 01:38:44
>>792
SmalTalkで今日中に作れといわれてできるのか( ゚Д゚)ゴルァ!!
794792:05/01/22 02:18:58
できますよ( ̄ー ̄)
795デフォルトの名無しさん:05/01/31 11:59:50
SmalTalkで400件以上Googleに引っかかるのはどうだろうと思いつつ保守ついでのage
796デフォルトの名無しさん:05/02/03 13:32:35
>>237
CHKなんていう意味不明な略語(?)を使うのはやめましょう。
質問は平易な日本語(+正しい技術用語)で具体的に。

姉妹スレの↓もよろしく。

ふらっとC♯(Part5)
http://pc5.2ch.net/test/read.cgi/tech/1065196964/
>このスレッドは
>
>「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
>
>ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
>
>少しずつC#プログラマを名乗るものが現れました。みなさん一緒に勉強しましょう。
797デフォルトの名無しさん:05/02/03 13:34:39
2ちゃんで誤爆するような不注意なヤシ↑
書いているコードの品質も知れたものだな。。。
798デフォルトの名無しさん:05/02/04 22:54:42
お勧め本を知りたいのですが、このスレで良いでしょうか?
ildasm.exeの使い方を詳しくかつ読みやすく紹介している
本をご存知でしたら、どなたか教えてください。
799デフォルトの名無しさん:05/02/05 20:13:56
>>798
推薦図書/必読書のためのスレッド PART 22
http://pc5.2ch.net/test/read.cgi/tech/1106175218/
800デフォルトの名無しさん:05/02/06 18:16:53
vs.netを使ってるのですが、
"(" と ")" の二つの括弧のいろを変えたいのですが、
フォントおよび色のどの項目を変えればいいのでしょうか?
801デフォルトの名無しさん:05/02/06 18:45:23
なんでもできると思ったら大間違いだ
802デフォルトの名無しさん:05/02/12 00:07:31
同じ親を持つ兄弟関係の派生クラス間で、
親の持つ共通メンバのみコピーするには
ひとつひとつ代入するしかない?
803デフォルトの名無しさん:05/02/12 00:17:28
>>802
しかない

不便なら親クラスに CopyTo メソッドとか付けとけ
804デフォルトの名無しさん:05/02/12 00:22:45
リフレクションで手を抜く事はできるかもしれないがね。
805802:05/02/12 00:23:30
>>803
意外に楽できないんだな。かゆいところに手が届かないというか。
implicitにでも書いとく。ありがとう。
806デフォルトの名無しさん:05/02/12 12:33:29
フォームが始めて表示された直後にイベントを発生させる方法はありますか?
Loadの後にイベントを起こしたいのですが。
807806:05/02/12 13:03:20
いまはとりあえずFormにフラグをつくって
それをActivatedで判断するという方法を使ってますが、
ほかに正攻法はあるのでしょうか?
808デフォルトの名無しさん:05/02/12 17:37:41
>>807
それが正攻法だと思われます。
809デフォルトの名無しさん:05/02/12 17:44:58
Loadイベントの最後でRefreshさせて、その後とか。
行儀はよろしくなさそうだが。
810387:05/02/14 14:27:11
自作アプリケーションで
C# を外部スクリプトとして利用しようと思ったんだけど、
アセンブリ参照をソースに埋め込むってことできないの?
VC++ の #pragma comment( lib, "hoge.dll" )
みたいなやつ。
おしえてちょー。
811デフォルトの名無しさん:05/02/14 15:16:19
>>810
ソースには無理。プロジェクトファイルで指定して、ビルド時に参照。
もしくは、Reflection で茨の道・・・
812デフォルトの名無しさん:05/02/14 15:40:19
Reflectionはインタフェイスとか使おうとしないで完全に動的にやれば
そう難しくもないような気がする。
用途によってはアプリケーションドメイン単位でしかアンロードできないのが
何かと不便だけど。
813デフォルトの名無しさん:05/02/14 23:58:44
C#はじめました

ControlPaint.DrawReversibleFrame(new Rectangle(0,0,200,200), Color.Black, FrameStyle.Thick);
とやったら、デスクトップの左上にシカクがでました。
このシカクをフォームの中にいれたいんですが、どーしたらいいんでしょ
814デフォルトの名無しさん:05/02/15 00:40:09
FormのPointToScreen
815デフォルトの名無しさん:05/02/15 00:52:04
おお、ありがとさんです
816デフォルトの名無しさん:05/02/19 22:12:19
「デスクトップを表示」や「最小化」でタスクバーに収まったフォームを
元に戻すメソッドはどれでしょうか。
817デフォルトの名無しさん:05/02/19 22:17:46
メソッドじゃないが、FormのWindowStateプロパティ。
818デフォルトの名無しさん:05/02/19 23:32:02
>817
ありがとうこざいます。
819デフォルトの名無しさん:05/02/20 13:22:18
結局メソッドだけどね
820デフォルトの名無しさん:05/02/20 14:19:22
.NETはXML形式でオブジェクトをシリアライズできると聞きましたが
これは再コンパイルせずにテキストツール等で容易にパラメータの書き換えができるってことですか?
821デフォルトの名無しさん:05/02/20 16:46:22
あるオブジェクトのメンバにアクセスできる範囲を、利用するクラスによって変えたい。
たとえばAというクラスからは、プロパティで取得・変更ができるけど、
Bというクラスからは取得のみ可能、
Cというクラスはすべてのメンバにアクセスできるが、
Dというクラスは一部にしかアクセスできない、というふうに。
822デフォルトの名無しさん:05/02/20 17:11:14
それぞれのクラス用ラッパーを作る
823デフォルトの名無しさん:05/02/20 18:15:35
>>822
回答ありがとう。でも「ラッパークラス」で調べてみると
C++やアンマネージ、COMとかいった仰々しいものが続々出てきて手に負えそうにない。
あるいはもしかしたらこういうこと?
Originalの代わりにWrapperを公開して、メンバのabcはプロパティで取得のみ可。

class Original{
 private SomeClass abc;
 public SomeClass Abc{
   set{abc = value;}
   get{return abc;}
 }
}
class Wrapper{
 private Original org;
 public SomeClass Abc{
   get{return org.Abc;}
 }
}

これだとWrapperの内部では自由にOriginalにアクセスできてしまうし、
SomeClassのAbcの参照先は値が変更可能になっている。
Originalの持つメンバに関して、あるクラスからは完全に取得限定にしたいけど、
そういう都合のいい方法ってある?
824デフォルトの名無しさん:05/02/20 18:18:26
if(Environment.StackTrace.IndexOf("Class1"
825デフォルトの名無しさん:05/02/20 18:30:06
>>823
> SomeClassのAbcの参照先は値が変更可能になっている。

Original.AbcとWrapper.Abcで動作は等価と思うのだが。

それでダメなら属性で制御するくらいしか思いつかんな。
そうするとコンパイルエラーを出せないが。
826デフォルトの名無しさん:05/02/20 18:59:08
>>825
入れ子のクラスにする方法を考えてみた。
>>823のWrapperをOriginalのメンバにしてみるとか。
属性かー。それで工夫してみるよ。どうもありがとう。
827デフォルトの名無しさん:05/02/21 13:22:34
WIndowsアプリケーションのListView使ってるんだけど
列の非表示ってできる?やり方が見当たらなくて。
828デフォルトの名無しさん:05/02/21 14:41:54
>>827
無理なはず。
829デフォルトの名無しさん:05/02/27 03:17:43
ちょっと聞いてやるがローカルマシンにSQLserver(もしくはMSDE)がインストールされてるか判別したいんだが・・・
どなたか教えてください。






830デフォルトの名無しさん:05/02/27 03:32:30
DBがインストールされてるかどうかチェックする機能が必要って。
どんなのが対象なんだか。
831デフォルトの名無しさん:05/02/27 03:35:14
DB がダンボールに見えてしまった
もうだめぽ
832デフォルトの名無しさん:05/02/27 03:38:22
ボールしかあってないじゃねーか。
833デフォルトの名無しさん:05/02/27 03:42:35
ダンもあってるYO
834デフォルトの名無しさん:05/02/27 13:32:24
ドラゴンだろ
835デフォルトの名無しさん:05/02/27 14:00:01
接続しにいく、ってのがいいんじゃないか?
836デフォルトの名無しさん:05/02/27 15:24:28
質問です。

VC++6.0で作成したクラスライブラリ(.lib)を
C♯で使用したいと思っています。

VC++6.0で使っていたときは
.libファイルとともに梱包されていたヘッダーファイルを
インクルードしていたのですが、
C♯ではそんなことできないですよね?

ネットでいろいろ調べてみたものの、
解決策は見つけられませんでした。

申し訳ありませんが、どなたかよろしかったらご教示ください。
837デフォルトの名無しさん:05/02/27 16:14:08
838デフォルトの名無しさん:05/02/27 16:24:20
>>836
c++のクラスを呼び出したいならmanaged c++を使ってマネージコードから
呼び出せるマネージドクラスでラップする必要があります。
managed c++は禁断の世界だから手を出すときは自己責任で。
839デフォルトの名無しさん:05/03/01 17:34:27
C#からマウスやキーボードを操作したいのですが
JavaでいうRobotのようなものはありますか?
840デフォルトの名無しさん:05/03/01 18:05:56
自分では分かりやすいんだろうが、〜でいう〜という説明は説明になってないってことを肝に銘じておいてくださ〜い!

キーボードのエミュレートはSendKeysクラス。
マウスのエミュレートは.NETには無かったような気がするので、Win32APIのmouse_event/SendInputを挙げておこう。
841デフォルトの名無しさん:05/03/01 18:08:03
>>840
ごめんなさい。以後、気をつけます。
ありがとうございました。
842デフォルトの名無しさん:05/03/01 19:29:08
ASP.NET開発について調べています。

クライアントに新しいファイルを作って送るにはどうすればいいですか?
.csvみたいな簡素なファイルなら想像できますけど、
エクセルの.xlsファイルとかどうしますか?
843デフォルトの名無しさん:05/03/01 20:16:24
>>842
普通にファイルを生成してリンクしてやるかResponse.BinaryWriteしてやればいいんじゃね?
エクセルのバイナリを動的に作れないという話なら、そういう商用コンポーネントを買うのが早いと思うよ。
買わなくても出来るけど苦労する。
844デフォルトの名無しさん:05/03/01 20:17:29
1.ファイルを作る
2.送る
845デフォルトの名無しさん:05/03/01 22:07:21
>>842
Excel2003ならXMLで・・・
846デフォルトの名無しさん:05/03/01 22:31:12
2003なんて誰が使ってるんだ?
おれはまだ97だが?
847デフォルトの名無しさん:05/03/01 23:46:10
97はMSのライフサイクル的に死んだバージョンだろ。
修正プログラムの出ないMS製品なんて使ってられるか。
848デフォルトの名無しさん:05/03/02 00:19:10
でもAccess入ってたのこれだけなんだよね。
つーか金ねーよ。
849デフォルトの名無しさん:05/03/02 01:38:49
どっかの学生に買ってきてもらう
850デフォルトの名無しさん:05/03/02 22:33:11
ビル・ゲイツ氏に英王室が名誉ナイト称号
http://www.yomiuri.co.jp/main/news/20050302i314.htm
851デフォルトの名無しさん:05/03/03 00:10:52
>>850
そんなニュース、前にもなかったっけ?
852デフォルトの名無しさん:05/03/03 02:15:11
ウィリアム・ヘンリー・ナイト・ゲイツIII世
853デフォルトの名無しさん:05/03/04 20:21:06
VB.NETでの『ReDim Preserve ・・・』に相当するようなコードは
C#ではどのように書くのでしょうか?

配列の内容を保持したまま配列を増やしたいのですが、
今までは新しく配列を用意してコピーしていたのですがスマートにならないものかと。
854デフォルトの名無しさん:05/03/04 20:28:08
>>853
いや、C# でそんな文見たことない
おそらく無いんじゃないか?
855デフォルトの名無しさん:05/03/04 20:45:37
ReDimったってどうせ内部でArray.Copy呼んでるだけだしな。
これのせいでループの内部で毎回ReDimするようなアレなコード書く奴もいるし。
856デフォルトの名無しさん:05/03/04 21:13:37
http://dobon.net/vb/dotnet/internet/webrequestpost.html

ここを参考に、googleに用語をpostして結果を得ようとしています。
ところがこのうちの「 System.Web.HttpUtility.UrlEncode」でエラーが出ます
(エラーの説明)
>型、または名前空間名 'Web' は、
>クラスまたは名前空間 'System' に存在しません。
>アセンブリ参照があるか確認してください。

どうすればSystem.Webのクラスを使えるようになるのか教えて頂けますか。
857デフォルトの名無しさん:05/03/04 21:15:03
>>856
プロジェクトの『参照設定』を右クリック⇒『System.Web』を追加
これでおk
858デフォルトの名無しさん:05/03/04 21:15:31
あ、『参照の追加』が間に入ってましたごめぬ
859デフォルトの名無しさん:05/03/04 21:16:16
System.Web.dllを参照に追加すれ。
860デフォルトの名無しさん:05/03/04 21:27:51
高速回答ありがとうございました。
ぶじビルドできました。
861デフォルトの名無しさん:2005/03/29(火) 21:29:06
保守を兼ねてage
862デフォルトの名無しさん:2005/04/05(火) 14:48:28
純正の開発環境はシャープデベロッパーがあれば必要ないのでしょうか?
863デフォルトの名無しさん:2005/04/05(火) 18:33:16
>>862
なにも問題なし。
864デフォルトの名無しさん:2005/04/28(木) 05:05:00
推薦図書〜スレが荒れているようなので、よろしかったら教えて下さい。
初心者にお勧めなC#を教えて頂けますでしょえか。
スキルはPHPのみです。
よろしくお願いいたします。
865デフォルトの名無しさん:2005/04/28(木) 07:44:26
MSDNライブラリ
866 ◆kbky6C6xjY :2005/05/06(金) 06:16:18
>>864
 これでどうだ:

Schildt, Herbert
『独習C#』
2002年 翔泳社 ISBN 479810146x
http://www.amazon.co.jp/exec/obidos/ASIN/479810146X/
867デフォルトの名無しさん:2005/05/09(月) 01:36:37
メインフォームで定義したある変数、
例えば「string s = "XXX";」を
Form2 f2 = new Form2();
f2.ShowDialog();
で実体化したForm2でも使いたいのですが、
どのようにすればいいのでしょうか?
public string s = "XXX"としてForm2で
変数sを使ってみたけどダメでした。
868デフォルトの名無しさん:2005/05/09(月) 01:50:07
> 867
/* From1 */
private string s = @"XXX";
private button1_Click(....) {
  using(Form2 F = new Form2()) {
    F.SetValue(s); /* 変数sの値をForm2に渡す */
    F.ShowDialog(this);
  }
}

/* Form2 */
private string _value = "";
public void SetValue(string value) {
  this._value = value;
}

private void Form_Load(....) {
  this.Text = this._value;
}
869デフォルトの名無しさん:2005/05/09(月) 02:21:59
>>868さん
即レスありがとうございます。

何故そうなるのか等細かいところが理解出来ていないのですが、
Form2でSetValueメソッドをpublicで宣言しているところがミソなのでしょうが、
「public void SetValue(string value) 」メソッドの「this._value = value;」は
何時処理をしているのでしょうか?
とりあえず希望通りの動作は出来ました。
ありがとうございました。
870デフォルトの名無しさん:2005/05/09(月) 02:27:45
>>868さん
すいません。何となくですけど理解できました。
Form1の
>F.SetValue(s); /* 変数sの値をForm2に渡す */
で処理しているのですね。
ゴミカキコ、すいませんでした。
871デフォルトの名無しさん:2005/05/11(水) 20:56:00
>>867
Form1で
public static string s = "XXX"
としてForm2で
MessageBox.Show(Form1.s);みたいに使えるけど
>>868とどっちが良いんだろう・・・
872デフォルトの名無しさん:2005/05/11(水) 21:02:05
868の方が明らかに優れている。staticはできる限り避けるのがOOPの基本。
一番良いのはForm2のコンストラクタ引数として渡すことだと思うが(Form2でその値が必須なら)。
873デフォルトの名無しさん:2005/05/11(水) 22:36:32
Form1への参照を渡しちゃうとか
874デフォルトの名無しさん:2005/05/11(水) 23:42:06
ちょっと質問。
868で下のようにClosingイベントでForm2からForm1に戻すときはどうやったらいいの?
private void Form2_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
if (DialogResult == DialogResult.OK)
{
ここで変数をForm1に戻す
}
}
875デフォルトの名無しさん:2005/05/11(水) 23:47:09
>>874
戻すというか、データを共有したいならデータを管理するクラスを作ってそれを共有したらいいんじゃないか。
876デフォルトの名無しさん:2005/05/12(木) 00:08:27
そうしてできあがるpublic staticフィールド全開のクラス

まあそれはおいといて、OpenFileDialogの実装も一つの回答だ。
877デフォルトの名無しさん:2005/05/13(金) 07:56:11
Form1でstring _value = "";として
public void SetValue(string value)
{
_value = value;
}

Form2でstring s = "XXX";として
Form2を閉じるイベントハンドラに
using (Form1 f1 = new Form1())
{
f1.SetValue(s);
}
と書いてもForm1に戻ると_valueは空のままです。

public class SetValue
{
public string _value;
}
を作って上と同じくForm2が閉じるときに
SetValue sv = new SetValue();
sv._value = s;
と書き込んでもForm1に戻って_valueを使おうとすると空です。
とりあえずざっと試しただけなので、
週末に休みが取れれば改めて試行錯誤します。
でもその前に何かヒントが有れば教えて欲しいな・・・。
878デフォルトの名無しさん:2005/05/13(金) 08:13:55
newってのは字義通り新しく作るんだよ?

using (Form1 f1 = new Form1())
{
 f1.SetValue(s);
}

f1を新しく作ってそれのSetValueを呼んで、そのメソッドが終了したらそのまま捨てられるだけ。
当然新しく作ったForm1に対して操作したわけだから、既存のForm1には何の影響もない。
879デフォルトの名無しさん:2005/05/14(土) 22:16:54
>871
872も言ってるがカプセル化がOOPの基本。
それにstaticだと全てのインスタンスで共有になっちまうよ。

>873
Form2がForm1に依存する事になるからそれもまずいだろ。
880デフォルトの名無しさん:2005/05/14(土) 22:52:09
>874
OpenFileDialogと同様の実装サンプル。
秀丸で書いたので動作確認はしてない。

/* From1 */
private string s = @"XXX";
private button1_Click(....) {
  using(Form2 F = new Form2(s)) {
    if(F.ShowDialog(this) == DialogResult.OK) {
      MessageBox.Show(F.getValue());
    } else {
      MessageBox.Show(@"キャンセルされますた。");
   }
  }
}
881880:2005/05/14(土) 22:52:41
private string _value = "";

public Form2(string initValue) {
  this._value = initValue;
}

private void Form_Load(....) {
  this.textBox1.Text = this._value;
}

private void btnOK_Click(....) {
  this._value = ths.textBox1.Text;
  this.DialogResult = DialogResult.OK;
}

private void btnCancel_Click(....) {
  this.DialogResult = DialogResult.Cancel;
}

private string getValue() {
  return this._value;
}
882880:2005/05/14(土) 22:54:35
あ、881はForm2ね
883880:2005/05/14(土) 23:01:30
>874
つまり考え方としてはForm2でOK押された時に
「Form2がForm1に値を返す」のでは無く「Form1がForm2に値を貰う」
ってこと。

こういう実装にすればForm2はForm1に依存しないので、
Form2が使い回せるようになる。
884デフォルトの名無しさん:2005/05/14(土) 23:10:19
>>881
おいおい、getValue()はよしとくれよJavaじゃあるまいに。

//privateは単純な誤字としてw
885デフォルトの名無しさん:2005/05/15(日) 20:57:07
>>880さん
returnを使うのがミソですね。
おかげさまで上手いこといきました。
ところでC#的には
public string getValue{
get{
return this._value;
 }
}
みたいな感じでプロパティを使った方が良いと偶然見た
「C#ルールブック」って本に書いてありました。
一応こっちを使ってみようかなと。
どっちでも動くし、大して違いが分かっていないのですが・・・。
それ以前にgetとかsetとかプロパティってよく分かっていないのですが・・・。

それにしても「値を返す」がダメってのは目から鱗です。
なるほど、依存せずに使い回せるようにするですか。
>>883は大変参考になりました。

ホントにありがとうございました。
886デフォルトの名無しさん:2005/05/15(日) 22:06:18
今回のサンプルではget/set用メソッドでもプロパティでも同じこと。
ただ.netではプロパティにしとくと自動でシリアライズの対象になるので、
プロパティにする方が無難かも。

サンプルではわかりやすいかと思ってメソッドにしてみますた。
メソッドが先頭小文字なのは完全に好みw
887885:2005/05/16(月) 00:09:28
>>885で書いたプロパティですが
Form2で
private string _value;
public string Value
{
 get{
  return _value;
 }
 set{
  _value = value;
 }
}
としてForm1で
private string s = "XXX";
Form2 f2 = new Form2();
f2.Value = s;
f2.ShowDialog();
if (f2.DialogResult == DialogResult.OK){
 s = f2.Value;
}
手な風にForm2のValueプロパティにget setを書いて済ましても良いのでしょうか?
888デフォルトの名無しさん:2005/05/16(月) 00:21:52
渡すのと受け取るのが同じ物を指してるのならそれで良いけど?
例えばOpenFileDialogならFileNameはget; set;だけれど、
事前にsetすれば自動的に指定したディレクトリが開いてファイルが選択されてる状態になる。

……まさか本当にValueなんて名前のプロパティを作ってないだろな。
//クラスによってはありかもしれないが、一般的ではないぞ。
889デフォルトの名無しさん:2005/05/16(月) 01:33:10
>>888さん
レスありがとうございます。
OKってこと出安心しました。
すこしget setについて分かってきたような気がします。
実プログラムではネーミングに苦労はしていますがValueは使っていません。
ですが、一般的ではないとは知りませんでした。m(_ _)m
890デフォルトの名無しさん:2005/05/16(月) 01:41:32
>>889
>  ですが、一般的ではないとは知りませんでした。m(_ _)m

一般的でない、ってのは名前からどんな物を指すのか分からない(から普通使わない)ってこと。
一般的すぎる、という表現の方が良いかも。
たとえばOpenFileDialogにValueプロパティがあっても意味不明だろう。

勿論Valueという名前を決して使っちゃいけないとか言うことじゃないぞ。
891デフォルトの名無しさん:2005/05/16(月) 22:19:00
>>890さん
了解です。丁寧な返信ありがとうございました。
892デフォルトの名無しさん:2005/06/04(土) 14:32:43
保守あげ
893デフォルトの名無しさん:2005/06/04(土) 15:02:08
MediaPlayerやクイック起動バーのように
タスクバーの中にフォームを配置したいのですが
どうすればいいでしょうか?
894デフォルトの名無しさん:2005/06/04(土) 15:07:57
>>893
よくわかんないが、タスクバーの中に配置されているのはフォームじゃないんじゃない?
895デフォルトの名無しさん:2005/06/04(土) 15:14:25
クイック起動バーはタスクバーの中にツールバーが
配置されていてそれにアイコンが表示されてます。
そのツールバーのようにタスクバーの中にコントロールを配置したいのですが・・・

なんかわかりにくいですね。
896デフォルトの名無しさん:2005/06/04(土) 15:17:29
とりあえず Spy++ でも使え
897デフォルトの名無しさん:2005/06/04(土) 15:33:30
Spy++は使い方がよくわからんのですが。
GoogleDeskbarのようなものを作りたいのですが
無理でしょうか?
898デフォルトの名無しさん:2005/06/04(土) 15:52:20
BandObjectでも使えば。
899デフォルトの名無しさん:2005/06/04(土) 16:29:23
>898
こんな物があったんですか・・・
ありがとうございます。
900デフォルトの名無しさん:2005/06/23(木) 08:30:13
Nullableの実用例を教えろ
901デフォルトの名無しさん:2005/06/23(木) 23:20:25
>>900
データベースとかかな。
902デフォルトの名無しさん:2005/07/09(土) 04:06:16
あげ
903デフォルトの名無しさん:2005/07/09(土) 17:53:20
どうも、はじめまして。
プログラム初心者で、どなたかにお助け願いたいことがあります。

C#からCOMコンポーネントを使いたいと思っています。
COMの関数から配列を受け取りたいのですが、
どうすれば良いのでしょうか?
COMの方はC++で書いています。

COMの引数はVARIANT型にして、
それをC#ではobject型で受けてみましたが、
受けたobjectの値はどうやって見たらいいのでしょうか・・。
904デフォルトの名無しさん:2005/07/09(土) 18:09:08
905デフォルトの名無しさん:2005/07/09(土) 18:10:19
906903:2005/07/10(日) 23:52:13
904さん、ありがとうございます。
VisualStudio.NETで、
COMの引数を選択するタブの中にSAFEARRAY*がないので、
VARIANTのSAFEARRAYを作り、
引数はVARIANT*にしました。
これをC#から呼んで使いたいのですが、
objectとして受けた配列から要素の値を取り出す方法が分かりません。
object.ToStringではエラーになってしまいます。
ちなみに、配列の要素の型はlongです。
907デフォルトの名無しさん:2005/07/11(月) 00:03:37
Hogehoge イベントと OnHogehoge メソッドってどういう関係?
908デフォルトの名無しさん:2005/07/11(月) 05:35:39
イベントの条件発動→OnHogehoge呼ばれる→Hogehogeイベント呼ばれる
909デフォルトの名無しさん:2005/07/11(月) 18:57:13
>>906
MarshalAsAttribute と UnmanagedType (enum) をチェックすべし。
910デフォルトの名無しさん:2005/07/12(火) 16:25:41
リストボックスに、「みかん」が登録されると削除するというものなのですが。
ソースが長いので
http://upload.squares.net/upload/src/file0105.txt //Form1.csの内容です
http://upload.squares.net/upload/src/file0106.txt //AlarmList.cs(自作のクラスAlarmDataクラスとAlarmListクラス)の内容です。

timer1_Tickメソッドの中の
this.report.Remove(item); がどうやらネックになっていて困っています。

これを実行すると
http://upload.squares.net/upload/src/file0107.jpg
ようなエラーが表示されてしまいます。

エラー表示を続行すると、ちゃんとみかんが消されているのですが。
なんとかこのエラー表示が出ないようにできないでしょうか。
見たところ自分には何も問題ないコードに見えるのですが。
タイマーのメソッドの中にArrayListクラスのRemoveメソッドが実行されるとあまりよくないということなのでしょうか。
何かエラー表示がでないようになる書き方がありましたら助言いただけるとうれしいです。

911デフォルトの名無しさん:2005/07/12(火) 16:40:42
列挙中、つまりforeachやIEnumeratorを使ってるときに、肝心の列挙対象のリストに変更があっちゃまともに列挙できないのはわかるだろ。
912912:2005/07/12(火) 16:45:28
>>911
助言ありがとうございます。
なるほどwhile(it.MoveNext())中に、リストを変更するようなRemoveなどの記述は書いちゃだめということ
なのですね。
どうもありがとうございます。
別の方法を考えてみようと思います。
913デフォルトの名無しさん:2005/07/12(火) 17:17:48
C#.NETでも
http://wisdom.sakura.ne.jp/system/winapi/win32/win9.html
にあるような、下のようなメッセージループというやつを使うことはできるのでしょうか。

while (TRUE) {
GetMessage(&msg , NULL , 0 , 0);
if (msg.message == WM_LBUTTONUP) break;
DispatchMessage(&msg);
}
914デフォルトの名無しさん:2005/07/12(火) 17:29:16
Windowsアプリケーションを作ったときのMainメソッドの中の、Application.Runでメッセージループが回ってる。
実際に受け取ったメッセージを処理したい場合は、WndProcというメソッドをオーバーライドする。
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemwindowsformscontrolclasswndproctopic.asp
915913:2005/07/12(火) 17:32:22
>>914
アドバイスありがとうございます。
C#.NETでもメッセージ処理できるんですね。
WndProcメソッド調べてやってみようと思います。
916デフォルトの名無しさん:2005/07/12(火) 21:59:32
TabControlのTabPageを切り替えたいのですが。
tabPage1がアクティブになっているところを、ボタンを押すと、tabPage2がアクティブになるようにするにはどのように記述すればいいのでしょうか。

tabPage2.Select(); とか
tabPage2.Show(); とか
tabPage2.Focus(); とか
tabPage2.SelectNextControl(); とか

やってみましたが、どれも意図したとおりにtabPage2は表示されませんでした。
tabPage2. とやってみてインテリセンスに出てくる項目を全部チェックして見ましたが、上に4つ
以外にそれらしいものは見つかりませんでした。
何か書き方がよくないのでしょうか。それともそういったことはできないのでしょうか。
917デフォルトの名無しさん:2005/07/12(火) 22:02:42
タブを管理してるのはTabControlであって、TabPageは飽くまでGroupBoxみたいなもの。
tabControl1.SelectedTab = tabPage2;
918デフォルトの名無しさん:2005/07/12(火) 22:07:44
タブを右クリックしたらそのタブをアクティブにするにはどうすりゃええ
919916:2005/07/12(火) 22:11:19
>>917
どうもありがとうございます。
tabControl1.SelectedTab = tabPage2;
でできました。ありがとう。
920デフォルトの名無しさん:2005/07/12(火) 22:11:39
>918
右クリックのイベントハンドラでそのタブをアクティブにすりゃええ。
921デフォルトの名無しさん:2005/07/12(火) 22:25:25
>>920
TabPage で Click イベントが起きないのじゃよ
922デフォルトの名無しさん:2005/07/12(火) 22:28:02
タブを管理するのはTabControlだっつってんだろが
923デフォルトの名無しさん:2005/07/12(火) 22:38:28
TabContol で Click が発生しても
どのタブ上で右クリックしたのか分かんねえだよ
924デフォルトの名無しさん:2005/07/12(火) 22:47:44
GetTabRect
925デフォルトの名無しさん:2005/07/12(火) 23:03:01
一個ずつチェックするのまんどくせ
926デフォルトの名無しさん:2005/07/12(火) 23:05:29
次のお悩み相談の方どうぞ。
927デフォルトの名無しさん:2005/07/12(火) 23:32:54
右ダブルクリックで DoubleClick イベントが起きるのを何とかしろよ( ゚Д゚)ゴルァ!!
928デフォルトの名無しさん:2005/07/13(水) 00:08:01
ダブルクリックされてんだからダブルクリックイベントが発生するに決まってんだろモルァ
MouseDown、MouseUpでどうにかしたほうがマシだな(^Д^)ハハハハ
929デフォルトの名無しさん:2005/07/14(木) 12:04:32
サブウィンドウでテキストボックスに入力した文字を、メインウィンドウのpublicなstring型の変数に渡す
ということをしたいのですが、エラーが出てしまい困っています。

エラー内容は
オブジェクト参照がオブジェクト インスタンスに設定されていません。
なのですが、googleで検索してみると、要するに、nullを参照しようとしました。という意味らしいので

メインウィンドウ側の
public string test1;
public string test2;

public string test1 = "";
public string test2 = "";

に変えてみたりしたのですが、相変わらす同じエラーが出てしまい。アプリの方は固まってしまいます。

http://upload.squares.net/upload/src/file0115.txt //Form1.cs(メインウィンドウ)の内容
http://upload.squares.net/upload/src/file0110.txt //setup.cs(サブウィンドウ)の内容
http://upload.squares.net/upload/src/file0112.jpg //エラー画面
http://upload.squares.net/upload/src/file0111.jpg //このアプリの外観

どのように書いたらこのエラーを回避できるでしょうか。
930デフォルトの名無しさん:2005/07/14(木) 12:22:18
>>929
まずなにがnullなのか確認したのか?
ブレークポイントを有効に使うんだ。

つかsetupクラスの方がForm1の参照を持つ必要がどこにもない。
いつもいってるんだが、ダイアログを出してその結果を取得する、というのは、
OpenFileDialogクラスを基本的な設計として考えると良い。
ダイアログ側がメインフォームのプロパティやフィールドに値を入れるんじゃなくて、
ダイアログ側は値をプロパティとして公開するだけ。その公開された値をメインフォーム側が利用する。

・メインフォームがダイアログを出す
・OKが押された場合は、ダイアログ側の適当なフィールドaに値を入れる。
 自身のDialogResultプロパティをDialogResult.OKなりYesなりに代入することでダイアログを閉じる
・ダイアログはaをプロパティAとして公開する
・メインフォームはShowDialogメソッドの返値を調べ、有効な値(OKなりYesなり)ならダイアログのプロパティAを取得する。
 必要なら自身のフィールドなどに格納する。
931デフォルトの名無しさん:2005/07/14(木) 12:25:54
あうち、微妙に方向が逆になってましたよ。

×自身のDialogResultプロパティをDialogResult.OKなりYesなりに代入することでダイアログを閉じる
○自身のDialogResultプロパティにDialogResult.OKなりYesなりを代入することでダイアログを閉じる
932929:2005/07/14(木) 12:40:29
>>930-931
助言ありがとうございます。
とにかく参照の方向が逆だったのですね。
メインフォームからサブフォームの値を参照するように変えて今いろいろいじってます。
933デフォルトの名無しさん:2005/07/14(木) 12:50:08
なぜあのコードは例外を吐くのか、原因追及もしとけよー。
934929:2005/07/14(木) 13:05:38
できました。どうもありがとうございます。
http://upload.squares.net/upload/src/file0118.txt //Form1.cs(メインウィンドウ)
http://upload.squares.net/upload/src/file0118.txt //setup.cs(サブウィンドウ)

上のようにコードを書き換えたところ、サブウィンドウのテキストボックスに入力した文字列が
メインウィンドウに表示されました。
が、しかし、今度はサブウィンドウのOKボタンを2回押さないとサブウィンドウが閉じないんです。
コードは短いし単純だと思うんです。どこをどう間違って2回押さないと閉じないのか、いろいろいじって
考えてみようと思います。
何かこれじゃないのかというのがありましたら助言いただけるとうれしいです。
935デフォルトの名無しさん:2005/07/14(木) 13:09:34
ShowDialogを2回やったらダイアログが2回開くのは当然なのだがどうか。
936929:2005/07/14(木) 13:12:50
>>935
まさか、そんなことだったとは。
ちょっと目から鱗が落ちました。
どうもありがとうございます。ちゃんと1回でサブウィンドウが閉じました。
かなりすっきりしました。
例のコードの原因究明もしようと思います。ありがとうございました。
937デフォルトの名無しさん:2005/07/14(木) 17:48:11
VB.netとかですと
tryって打つだけで
catch, End tryまで 書いてくれるんですけど

C#にそんな機能はないのでしょうか。
938デフォルトの名無しさん:2005/07/14(木) 18:27:50
つか、必ずしもcatchとは限らないわけで。

catch(Exception e)
{
 // 例外をcatch
}

catch
{
 // 例外の種類によらずcatch
}

finally
{
 // tryを抜けるときに必ず実行される
}
939デフォルトの名無しさん:2005/07/14(木) 18:29:42
try {
}
finally {
}
って書きたいこともあるな。
940デフォルトの名無しさん:2005/07/14(木) 20:04:11
そういえば
catch (Exception ex) {
    return;
}
って書くと警告が出るのはどうにかならんかなと思ってたら、
catch (Exception) {
    return;
}
と書けることに最近気付いた。
941デフォルトの名無しさん:2005/07/14(木) 21:46:28
throw e;
だけでなく
throw;
ってのもかけるよ
942903:2005/07/14(木) 23:07:49
909さん、アドバイスありがとうございます。
どうもなかなかうまくいきません。
もう少しねばってみます。
943デフォルトの名無しさん:2005/07/14(木) 23:26:37
フォームが最大化されていたり最小化されていたとしても
通常時のウィンドウの大きさを取得する方法ってない?
944デフォルトの名無しさん:2005/07/15(金) 10:53:52
255255255
とか
25500
のような数値型からコンバートして
System.Drawing.Colorを作成する方法を教えてください
945デフォルトの名無しさん:2005/07/15(金) 11:03:39
後者の理屈がわからんが、まあ自分で数値解析してColor.FromArgbすれ。
946デフォルトの名無しさん:2005/07/15(金) 21:48:39
>>943
Layoutイベント辺りでWindowState==FormWindowState.Normalの時のサイズをフィールドに保存しとけ。
947デフォルトの名無しさん:2005/07/17(日) 00:38:01
IListを継承してクラスを作るとき、
AddとかRemoveの引数をobjectじゃなく特定のクラスにしたいんですが、
そうすると、コンパイルエラーになります。
どうにかできないものでしょうか?
TreeNodeCollectionとか、ライブラリレベルのクラスで、IListを持っているものは、
ちゃんと引数をobjectではなく、特定の型になってますけど・・・
948デフォルトの名無しさん:2005/07/17(日) 00:43:50
C# 言語の仕様  13.4.1 インターフェイス メンバの明示的実装
949デフォルトの名無しさん:2005/07/17(日) 01:02:01
>>947

void IList.Add(object value)
{
}

public void Add(Hoge value)
{
}
950デフォルトの名無しさん:2005/07/17(日) 01:06:03
>>949
IList.Addの返値はintだぜお前さん。
951947:2005/07/17(日) 20:48:47
おお、なるほど〜
ありがとうございます。IList以外でも道が開けそうです!
952デフォルトの名無しさん:2005/07/18(月) 15:22:14
>>951
CollectionBaseクラスの解説に実装例があるよ
953デフォルトの名無しさん:2005/07/18(月) 17:58:15
自アプリ以外のアクティブなウインドウの
ウインドウハンドルを取得するにはどうすればいいの?
954デフォルトの名無しさん:2005/07/18(月) 18:06:21
>>953
それはこっちで聞いたほうがいい。

Win32API質問箱 Build33
http://pc8.2ch.net/test/read.cgi/tech/1120153520/
955デフォルトの名無しさん:2005/07/18(月) 18:15:24
むしろこっちで聞いた方が良い。
ttp://www.google.co.jp/
956953:2005/07/18(月) 18:32:45
>>954-955
レスありがとう。
GetForegroundWindow で出来るようですね。
くだらないこと聞いてごめんなさい。
957デフォルトの名無しさん:2005/07/18(月) 22:04:31
ちょっと質問ですっ
ExpressBeta2で、DataGridViewやってます。
今、DataSourceとDataMemberをそれぞれ、dataset 及びそのtable
に設定し、且つユーザーの削除を有効にしています。
AllowUserDelete True
でも、マウスクリックによりセルを選択状態にし、
キーボードより、デリートキーを押しても
そのセルを含む行が削除されてくれません。
これは何が原因と考えれらるでしょうか。
ずっとネット検索してるんですけど、
いまだ解決できません・・・(T_T)
よろしくお願いします。
                以上

WinXPsp2

なお、この投稿は他の掲示板からの二重投稿になります。
前の掲示板(C#関係)でスルーされてしまいました。
資源を浪費してすみません、偉い人。
958デフォルトの名無しさん:2005/07/18(月) 22:15:45
そのプロパティ名をよく見て見ろ。
AllowUserToDeleteRows
だろう。
セル=Column(s)じゃなくて行=Row(s)を選択せにゃならんよ。
959デフォルトの名無しさん:2005/07/18(月) 22:19:30
Column はセルじゃなくて列じゃなかったかなぁ……
960デフォルトの名無しさん:2005/07/18(月) 22:23:27
おうそうだ
まあ細かいことは気にするなニュアンスだニュアンス
961957:2005/07/18(月) 22:26:13
SelectionModeをFullRowSelectとなるように
プロパティを変更したらうまくいったじゃねーかよ(><

列が1つしかなかったから、気づかなかった○rx

ありがとな、えろいひと。
962957:2005/07/18(月) 22:28:53
1浪(row)2浪(row)の方々は、上下に積み重なって死んでいくから、
ROWは、上限に重なるもの、つまり行だよ☆

覚えた??
963デフォルトの名無しさん:2005/07/18(月) 22:33:41
まあなんだ、空気読もうな。
964957:2005/07/18(月) 22:38:50
ごめん
965デフォルトの名無しさん:2005/07/19(火) 02:54:39
>>962
感動した
966デフォルトの名無しさん:2005/07/19(火) 08:14:30
2つ程質問させてください。
今、いらないファイル(logファイルとか)を

勝手に消してくれる常駐ソフトを作ろうと
しているのですが、最小化したときにタスクバー
に突っ込むのはどうしたらよいのでしょうか?
ぐぐっても全然出てこないので困っていますorz
2つめは、監視するところを、複数のスレッド
に分けて処理しようと思ったのですが、試しに
threadを使ってみると、なんか変なエラーが
出て来てしまいます(只今外出中につき正式な
名称は不明 スマソ)。
そいつをtry catch文を使って回避しても、
別のエラーが出て来てしまいます。
それだけならまだ自分の入力ミスで済まされる
のですが、本や他のHPに載っている例題を
使ってもこのエラーが出て来やがります。
これはどうしたらよいのでしょうか?
長文ダラダラすいません orz
967966:2005/07/19(火) 08:17:37
追記
使っていたのは2005のベータ1でした。
ベータ2はまだ試してません。
連投スマソ
968デフォルトの名無しさん:2005/07/19(火) 08:23:37
一つ目はタスクトレイに格納するって事だな?
NotifyIconクラスを使う。

二つ目はコード出せ。最低限、例外名出せ。
969966:2005/07/19(火) 13:22:50
>>968
ただいま外出中のため無理でつ orz
夜あたりに帰ったらベータ2で試したあとに
コードと例外名上げるので・・・
970デフォルトの名無しさん:2005/07/19(火) 14:34:48
> なんか変なエラーが出て来てしまいます
神レベルの質問者だな
971966:2005/07/19(火) 23:51:40
>>968
とりあえず試しに作ってみたやつのコード

using System.Threading;


Thread thread_1;
private void button1_Click(object sender, EventArgs e)
{
thread_1 = new Thread(new ThreadStart(start));
thread_1.Start();
}

private void start()
{
for (long i = 0; ; i++)
{
textBox1.AppendText(i.ToString());
   }
}

private void button2_Click(object sender, EventArgs e)
{
thread_1.Abort();
}

てので、button1をおすとInvalidOperationExceptionという例外が出てきてしまいます。
本についてたサンプルも、開始ボタンを押すとこれが出ます
972デフォルトの名無しさん:2005/07/20(水) 00:06:56
>>971
例外を書くときは例外メッセージを余すところ無く書くように。

で、WindowsのGUIにおいて、コントロールを作ったスレッド以外のスレッドからのコントロールの操作は、動作が「保証されない」。
だから別スレッドからコントロールを操作する場合、コントロールを作ったスレッドに操作を依頼するのが正しい。
それを実現するのがControl.Invoke/BeginInvokeメソッドだ。
973966:2005/07/20(水) 06:38:51
寝てしまった…orz
>>972
Control.Invoke/BeginInvokeメソッド…
聞いた事がないな orz

いろいろぐぐってみますが、また分からなかったら
質問させてください。

ありがとうございました。
974デフォルトの名無しさん:2005/07/20(水) 08:09:29
Control.Invoke/BeginInvokeで思い出した。

とっとと2.0の匿名メソッドとパーシャルクラスщ(゚Д゚щ)カモォォォン
975デフォルトの名無しさん:2005/07/20(水) 18:39:36
リテラル文字列の前にあるアットマークにはどんな意味があるのでしょうか?
@"C:\ABC.txt"

これ
976デフォルトの名無しさん:2005/07/20(水) 18:51:13
>>975
"C:\\ABC.txt"
977デフォルトの名無しさん:2005/07/20(水) 21:02:52
構造体への参照をメンバに持つには、ポインタを使うしかないんですか?
978デフォルトの名無しさん:2005/07/20(水) 21:09:38
Object にボクシングしとけば一発解決
979デフォルトの名無しさん:2005/07/20(水) 22:44:50
>>978
int i = 0;
object o = i;

とやると、oにはiの参照ではなくて値のコピーが代入されてしまうようです。
iをobject型にすれば参照渡しできそうですが、それだとちょっと不便です。
980デフォルトの名無しさん:2005/07/20(水) 22:52:56
ああ。構造体への参照じゃなくて変数への参照か
………やりかたはいろいろあるけど、なんとなく設計そのものが奇妙な気がする

とりあえず、『構造体を持つオブジェクトを作り、それを持つ』 のが適当かつ簡単かと
981 :2005/07/20(水) 23:58:27
質問したいことがあります
よろしくおねがいします

public override void scanEntry()
{
  string[]myComputer = Directory.GetLogicalDrives();

  foreach (string strDrives in myComputer)
{
  bool IsExist = false;
  foreach (DriveComposite drive in lstDriveEntry)
  {
    if (drive.FileName == strDrives)
    {
IsExist = true;
break;
    }
    if (!IsExist)
    {
      addFolder(new DriveComposite(strDrives));
    }
  }
}
情報不足であることは勘弁してください
上記のような処理にすれば問題はおこらなくなるのですが
IsExist みたいなフラグを持たないコーディングにはできないでしょうか?
キーワードだけでいいのでご教示ください
982デフォルトの名無しさん:2005/07/21(木) 00:09:15
メソッドに切り出し
983デフォルトの名無しさん:2005/07/21(木) 09:33:42
はじめまして、C#を初めてまだ3ヶ月の初心者です。
質問ですが、C#でOLEDRAWを利用するサンプルってあるのでしょうか?
http://www11.plala.or.jp/acaccelerator/programming/cstips.html#DrawControlImage
のコードを使った下記のようなコードを書いてみましたが動作しませんでした orz
何が悪いかご教授して頂けないでしょうか?

-----------------------------------
Graphics grfInst ;
Point pntLocation = new Point( 0, 0);
//
grfInst = pictureBox1.CreateGraphics();
grfInst.Clear(Color.White);
//
//ここでpictureBox1にaxWebBrowser1の内容が表示されるはず・・・
DrawControlImage(grfInst , axWebBrowser1 , pntLocation);
//
grfInst.Dispose();
-----------------------------------
984デフォルトの名無しさん:2005/07/21(木) 10:16:17
AxWebBrowserならそのすぐ下にコードがあるが。
985デフォルトの名無しさん:2005/07/21(木) 10:18:43
わざとだろ
986デフォルトの名無しさん:2005/07/21(木) 11:13:40
イベントを追加する簡単な方法はないでしょうか?
VB.netだと上のコンボボックスから選択するだけで簡単に追加できますよね。
987デフォルトの名無しさん:2005/07/21(木) 11:19:44
プロパティグリッドの雷マーク
988977:2005/07/21(木) 11:20:59
>>980
そうですね。設計を見直してみます。
ありがとうございました。
989986:2005/07/21(木) 11:22:11
>>987
目から鱗とはまさにこのことですね。

ありがとうございます。
990デフォルトの名無しさん:2005/07/21(木) 11:45:59
983です
「DrawControlImage」と「DrawWebBrowserImage」の間違いに今気がつきました。
こんな単純な事に気がつかないとは・・・申し訳ないです。

現状ですが、「DrawWebBrowserImage」でJPEGなどの画像ならイメージを作成できたのですが
WORDやEXCELだと、イメージが作成されないのですが、OleDrawではWORDやEXCELのイメージ
は作成する事ができないのでしょうか?
今考えているのは、WORDやEXCELの印刷時の1ページを、JPEGなどの画像で保存できるか?
という事なのですが・・・
991デフォルトの名無しさん:2005/07/21(木) 22:10:39
「WORDやEXCELの印刷時の1ページを、JPEGなどの画像で保存」したいなら、FinePrintの体験版を使え。
992デフォルトの名無しさん:2005/07/22(金) 01:13:14
>>991
なるほど、こんな便利な物があるんですね。

素人的な考えなのですが、このような機能を作るの
はかなり難しいのでしょうか?

素人の戯言ですが、他のソフトができている事が
自分にはできないってのが非常に悔しいです。
993デフォルトの名無しさん:2005/07/22(金) 01:34:37
それで金が取れるほどには難しいと考えるのが自然だろ。
作ろうと思えば実際に存在する以上作れるのは間違いないんだし。
994デフォルトの名無しさん:2005/07/22(金) 08:34:53
>>993
そうですよねぇ・・
今回はFinePrintを使ってみます、ありがとうございました。
995デフォルトの名無しさん:2005/07/22(金) 11:08:38
ume
996デフォルトの名無しさん:2005/07/22(金) 11:09:36
ume
997デフォルトの名無しさん:2005/07/22(金) 11:10:08
ume
998デフォルトの名無しさん:2005/07/22(金) 11:10:43
998
999デフォルトの名無しさん:2005/07/22(金) 11:11:25
999
1000デフォルトの名無しさん:2005/07/22(金) 11:18:31
新スレマダー?
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。