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

C#, C♯, C#相談室 Part55

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

前スレ
C#, C♯, C#相談室 Part54
http://pc12.2ch.net/test/read.cgi/tech/1250911923/

Visual C# 2008 Express Edition 日本語版
http://www.microsoft.com/japan/msdn/vstudio/express/vcsharp/

その他テンプレ>>2-5くらい
0153デフォルトの名無しさん2009/10/20(火) 18:41:46
きも過ぎるだろ。
0154デフォルトの名無しさん2009/10/20(火) 18:52:48
Form2のコンストラクタにでも引数追加してやれば
0155デフォルトの名無しさん2009/10/20(火) 19:22:59
>>コンポーネントの人たち
そもそも、ツールボックスに表示されているのは殆どコンポーネントだし
[コンポーネント]にあるのは明確なカテゴリのない残り物

てか、適当な事書く前に.NETでのコンポーネントの定義を確認してくれよ
0156デフォルトの名無しさん2009/10/20(火) 20:59:56
>>152
きもすぎワロタw

//Form1.cs

public string Data
{
get;
set;
}
private void button1_Click(object sender, EventArgs e)
{
Form frm = new Form2();
frm.Show(this);
}
//Form2.cs
private void Form2_Load(object sender, EventArgs e)
{
var frm = this.Owner as Form1;
if (frm != null)
frm.Data = "kimosu";
}
01571522009/10/20(火) 21:39:46
>>156
駄目だw理解出来ないw
var frm = this.Owner as Form1;
これは一体何してるの?

if (frm != null)してるなら、どのタイミングでfrmをdisposeすればいいの?
Form2のClosingでdisposeしとけばいい?
まさか俺はdisposeの意味を全く理解して無いだけか

get; set;
これってgetとsetの処理分けて書かないと駄目なんじゃないの?

多分スルーされて涙目になるんだろうけど、
誰でもいいから教えてよ;w;
0158デフォルトの名無しさん2009/10/20(火) 21:51:38
なんつーかまずはふらっと行ってこい。
get;set;については匿名係長でググれ
0159デフォルトの名無しさん2009/10/20(火) 21:54:18
というかForm2からForm1の値を弄るとかキモイな
0160デフォルトの名無しさん2009/10/20(火) 21:55:28
仕様からキモイから仕方ない。
0161デフォルトの名無しさん2009/10/20(火) 21:58:54
え?
じゃあ例えばForm2からForm1の背景色を変更するときとか普通はどうするの?
0162デフォルトの名無しさん2009/10/20(火) 22:02:51
イベント使う
0163デフォルトの名無しさん2009/10/20(火) 22:04:48
そんなイベントある?

Form2に設置したボタンを押された回数を
Form1で宣言した変数に入れたい時もイベントで出来るの?
0164デフォルトの名無しさん2009/10/20(火) 22:09:29
カウントしてけばいいんじゃね?
0165デフォルトの名無しさん2009/10/20(火) 22:09:33
その変数ほんとにForm1に宣言するのが自然ですか?
別の独立したクラスに持たせて,Form1とForm2の両方から参照した方がスマートではありませんか?
0166デフォルトの名無しさん2009/10/20(火) 22:11:13
フォームがクラスであるとこを理解できないのとグローバル変数が大好きなのが合わさるとごらんの有様だよ
0167デフォルトの名無しさん2009/10/20(火) 22:13:09
>>158
var frmは理解しました。
varってクラスの型なんですね

disposeの件は勘違いしてました。
今までのソース見てもそんなのしてねぇや、俺アホす

匿名係長でググってもめぼしい物が見つからない・・・

>>165
やべえ、感動した。
まだほんの小規模なツールしか作ったこと無くて、クラスも1つしか使ってなかった
そうか、それで別のクラス作ればいいのかw
0168デフォルトの名無しさん2009/10/20(火) 22:15:16
>>166
「Form1の変数を弄るためのイベント」みたいにForm1を意識して作るんだったら
直接Form2からForm1を触るのと変わらん
どうせ意識するんだったら意識する範囲を別のクラスに括り出す
0169デフォルトの名無しさん2009/10/20(火) 22:19:43
クラスの概念が理解出来てなかった
未だにnamespaceとかの概念も分からないわ
新規にクラス作るときは、Form1.csの中に書いても良いのかな?
namespace app1
{
public partial class Form1 : Form
{ public Form1 }
//ここに、public partial class aho{ }ってすればクラス追加したことになるの?
}
というか、ここで聞けるほど簡単な所でひっかかってるんじゃなさそうだから
ソースの構造体とかの概念を説明してるサイト無いのかな
ググってもサンプルとかはいくつも出てくるけど、そんなサイトのほうが少ないし
どうするかな・・・
0170デフォルトの名無しさん2009/10/20(火) 22:23:38
>169
ここで聞いちゃいけないほど簡単なことをきいてんだよお舞は(´・ω・`)
0171デフォルトの名無しさん2009/10/20(火) 22:24:39
>>169
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/index/index.html
行ってらっしゃい
読破するまでは戻ってくるなよ
0172デフォルトの名無しさん2009/10/20(火) 22:26:29
どうも。読破するまで戻りません。
ありがとう
0173デフォルトの名無しさん2009/10/20(火) 22:30:52
>>167
君が特命係長のファンだというならば、
次は自動プロパティでぐぐることをお勧めいたします。
0174デフォルトの名無しさん2009/10/20(火) 23:07:04
ComponentModel.Componentのサブクラスの
BackgroundWorkerはどうやってWinFormのControlや
WPFのUIElementに同期してるんだろ。
コンストラクタなどでフォームのthisを渡しているふうでもないし、
DelegateのTargetを使ってるふうでもない。
0175デフォルトの名無しさん2009/10/20(火) 23:11:03
いや同期したら意味ないから
イベントは全部非同期コールバック
0176デフォルトの名無しさん2009/10/20(火) 23:15:11
まだ読み終わってないけど、>>173見て
最後一つだけ質問させてくだはい
class plex{
   private int clickcount=0;
   public int ClickCount
    {
      set { clickcount = value; }
      get { return clickcount; }
    }
}
---
Comp c = new Comp();

if (c!=null)
      { c.ClickCount++; //0に1追加
       MessageBox.Show(c.ClickCount.ToString()); } //毎回1が返される

何度setしてもカウントがgetするたびに0になってます
上手くsetされていないのかもしれないんですが、どこがおかしいか指摘もらえませんか?
0177デフォルトの名無しさん2009/10/20(火) 23:17:39
プロパティに++は使えない
0178デフォルトの名無しさん2009/10/20(火) 23:17:45
あ、class名はCompですね、書き間違えました
0179デフォルトの名無しさん2009/10/20(火) 23:20:15
++が使えないなら0が返るのでは?
c.ClickCount=c.ClickCount+1;
こうしてみましたけど、これでも毎回1しか返してきません
0180デフォルトの名無しさん2009/10/20(火) 23:23:04
Comp c = new Comp();をクラス直下に移動する
0181デフォルトの名無しさん2009/10/20(火) 23:23:14
エスパーしてみる。
おそらくButton_Clickなんかの中でnewしてるんでしょ。

var c = new Comp(); // ←新しく作ったので、値0から
   : なんか処理

var c = new Comp(); // ←また新しく作ったので、値0から
0182デフォルトの名無しさん2009/10/20(火) 23:25:55
一番いいのはイベントを飛ばすのだけれど、この分だとForm1のインスタンスを渡すのも辛そうだ。
staticなclassにpublicフィールドもta
せればいいと思うよ。
0183デフォルトの名無しさん2009/10/20(火) 23:26:14
>>180,181
見事、それが原因でした
そういうものなのね、少しそれも疑ったけれど
毎回clickcountに++されていってると思ってて
newごとにそうなるとは思わなかった。
ありがとうございます。
0184デフォルトの名無しさん2009/10/20(火) 23:28:24
>>175
説明が足りなんだ。DoWorkじゃなくて
ProgressChangedとRunWorkerCompletedのこと。
0185デフォルトの名無しさん2009/10/20(火) 23:28:26
>>177
嘘付くな
0186デフォルトの名無しさん2009/10/20(火) 23:31:49
小間苛やさしいなw
0187デフォルトの名無しさん2009/10/20(火) 23:32:52
>>184
コンポーネントなんだから自分の親が誰かくらいは知ってるんじゃないの
01881832009/10/20(火) 23:34:17
あー・・・
>>176のソースで、
Comp c = new Comp();を使うと、clickcount=0になるんですよね?
この場合、値をリセットせずにプロパティを参照することはできませんか?

何度かそのフォームを表示させて、ボタンをクリックさせるたびに、
以前のクリックした回数は保持させておきたいのですがそんなことは出来ませんか?
0189デフォルトの名無しさん2009/10/20(火) 23:34:32
>>174
AsyncOperationつーもんがある
0190デフォルトの名無しさん2009/10/20(火) 23:40:07
>>188
毎回インスタンス生成してるんだから、カウントをリセットしているわけじゃなく、毎回新しいCompのプロパティを0→1にしている。
0191デフォルトの名無しさん2009/10/20(火) 23:47:26
>>184
WinFormsやWPFがグローバルなSynchronizationContextを提供してるみたい
Componentは特に関係なさそう
0192デフォルトの名無しさん2009/10/20(火) 23:47:54
>>190
あー、毎回1になる原理は分かりました。
しかし、毎回インスタンス生成しないと、参照出来ないのでは?
0193デフォルトの名無しさん2009/10/20(火) 23:54:27
>>189,191
ありがとう。AsyncOperationは少し調べてみます。
0194デフォルトの名無しさん2009/10/20(火) 23:56:03
>>192
レス全部読んでる?
0195デフォルトの名無しさん2009/10/21(水) 00:00:30
>>194
何か重要なレス見逃しました?
一応全部目を通してるんですが・・・
0196デフォルトの名無しさん2009/10/21(水) 00:02:15
>>195
>>180
Comp c = new Comp();
private void button1_Click(…
0197デフォルトの名無しさん2009/10/21(水) 00:08:26
変数のスコープをもっと考えなさいってこと。
0198デフォルトの名無しさん2009/10/21(水) 00:11:23
>194
そもそも読んだところで理解出来ないと思われ
0199デフォルトの名無しさん2009/10/21(水) 00:11:59
>>196
あ、じゃなくて、直下に移動させてその問題は解決したんですが
Form1からForm2出して、Form2のボタンをクリックすると、
>>176使ってclickcountにクリックした回数を++した後でForm2をClose
このあと、2回目以降にForm2を呼んだとき、
どうしても毎回Comp c = new Comp();通りますよね。
このときclickcountに格納された値も0になってしまうのを回避する方法は無いですか?

わかりづらくてすいません。
0200デフォルトの名無しさん2009/10/21(水) 00:29:15
生存期間を考えて、ふさわしい方法を考えようぜ
0201デフォルトの名無しさん2009/10/21(水) 00:44:51
おまえはもうこっちにいけ。
http://pc12.2ch.net/test/read.cgi/tech/1255658236/
スレを汚すな。バカチンが。
0202デフォルトの名無しさん2009/10/21(水) 01:05:20
はじめての言語がC#、いま2ヶ月たちました。
結構簡単ですね。簡単な業務用ツールいくつか作れました。

って感じがするw
0203デフォルトの名無しさん2009/10/21(水) 01:16:18
>>199だけ教えて貰えませんか
この方法あれば終われますので;
0204デフォルトの名無しさん2009/10/21(水) 06:39:16
あきらめろよ
0205デフォルトの名無しさん2009/10/21(水) 09:56:43
最初に答えるときに、ふらっと誘導しようと思ったんだが
ここまで引っ張るとは思ってなかったわ・・・
0206デフォルトの名無しさん2009/10/21(水) 12:22:52
HTMLをネット上から取得した場合
画像や、リンクがフルパスではなく

../img/image.jpg
/help.htm

のように、なっていることが多いのですが
これをどうにか、フルパス指定にする方法はないでしょうか
0207デフォルトの名無しさん2009/10/21(水) 12:27:01
base要素か現在のurlからUri作るだけ
0208デフォルトの名無しさん2009/10/21(水) 12:27:11
C#一切関係ないなそれ
BASEでも指定すればいいんじゃないの。何に使いたいのかは知らんけど
0209デフォルトの名無しさん2009/10/21(水) 12:48:36
>>207,208
ありがとうございます
教えていただいたもので考えた結果

string url="http://google.com";
Uri base=new Uri(url);

HTMLをサーバーから取得し、htmlというstring変数に入れる

html内を検索し、../や/で始まるものを置換するという方法で一応できる・・・のでしょうか
こういう処理しか思い浮かばなかったのですが
最初から、フルパスで取得したりはできないですよね・・・・
この処理すごく煩雑になると思うのですが、もうちょっとスマートな方法はないでしょうか?orz
0210デフォルトの名無しさん2009/10/21(水) 12:53:22
あ、ちなみにやりたいことは
ネットを見る際特定の広告などを表示しないなど、直接ではなく少し改変して表示するブラウザの作成です
0211デフォルトの名無しさん2009/10/21(水) 13:12:30
現在のページのUriはわかってるわけだから、
このタイプのコンストラクタを使う。
Uri (Uri baseUri, string relativeUri)
0212デフォルトの名無しさん2009/10/21(水) 13:42:37
>>211
それを調べてみたのですが
BaseUriの後にRelativeUriをくっつけてるだけですよね?
つまり、RelativeUri(/index.htmlなど)が分からなければいけないので
取得したソースから[/***.html]や[../***.jpg]などを検索、取得しRelativeUriにいれて一個ずつ置換しなければなりませんよね?
自分が勘違いしているだけかもしれませんが
そうなると、ソースの中から上記のものを取得しなければならない作業があるわけですが
それを簡単に行うことはできますでしょうか?
自分が考えついたのは
ソースないで「"../」や「"/」で始まる部分を検索し、そこを置換という方法だけだったのですが
すごく煩雑でしかも、/で始まらない場合には対応できないので
何か他にいい案がないものかな。と思いまして・・・
0213デフォルトの名無しさん2009/10/21(水) 13:48:50
正規化
0214デフォルトの名無しさん2009/10/21(水) 15:17:25
>>212
言ってる意味が分からないな。
urlを食わせればそのページからのリンクをフルパスで
一覧してくれる便利な関数やライブラリはないかという話なら標準のBCLにはない。
だいたい、相対URLが ../ や /で始まってるとも限らないだろ?
0215デフォルトの名無しさん2009/10/21(水) 15:23:35
それから、これはURLの正規化をしてくれるよ。
>Uri (Uri baseUri, string relativeUri) 

base=http://www.xxxx.com/xxx/yyy/aaaa.html
として
relativeUri=../zzz/xxx.html
なら、ちゃんとこうなる。
http://www.xxxx.com/xxx/zzz/xxx.html

relativeUri=/bbb.html
なら、こうなる。
base=http://www.xxxx.com/bbb.html
0216デフォルトの名無しさん2009/10/21(水) 17:54:17
リストビューで、非フォーカス時に選択されている行の背景色は淡いグレーですが、
まるでフォーカスが当たっているように青にするにはどうすれば良いでしょうか?
0217デフォルトの名無しさん2009/10/21(水) 18:05:59
グローバルな設定はできたと思うけど混乱するのでやめた方がいい
リストビューだけ変えるにはオーナードローしかないんじゃね
0218デフォルトの名無しさん2009/10/21(水) 18:14:15
フォーカスの外れたタイミングでSelectedItemsのBackColorとForeColorかえてやるとか
0219デフォルトの名無しさん2009/10/22(木) 20:37:24
すいません。教えてください。

クライアント複数(C#でWinアプリ)→サーバー(SqlServer2005Express)というアプリを作りたいです。
このアプリを配布する前提なのですが、どのように作成したらよいでしょうか。
「サービスベースのデータベース」で作成してサーバーでのデータベース運用にできるのでしょうか?
また、どのように配布するのでしょうか。

よろしくお願いいたします。
0220デフォルトの名無しさん2009/10/22(木) 21:47:28
>>219
1)ASP.NETでつくる。
2)WebServiceでプレゼンテーション層を作り、ClickOnceでクライアントに配布。

便乗で質問してよろしいでしょうか?
XmlWebサービスでDataTableを取得し、コンボボックスのデータソースにしようとしています。
DataTableを取得するまではできたのですがDataSourceにつっこんでも欲しい値がでません。
コンボボックスには〜.DataViewみたいな型情報が出てしまいます。
XmlWebサービスで取得する値は、DBからSelect文で1列だけ取得したものです。
for eachで値が取れていることは確認し、Items.Add()で追加することもできました。
だけど、ComboBox.DataSourece = datatable;の形で値を表示したいです。
なぜ正しくでないのか、そして正しくでる方法を知っている方がいましたら教えてください。

よろしくお願いします。
0221デフォルトの名無しさん2009/10/22(木) 21:49:59
>>220 はぜんぜんわかってないとみた。
0222デフォルトの名無しさん2009/10/23(金) 08:32:58
>>220
DisplayMember と ValueMember を指定
0223デフォルトの名無しさん2009/10/23(金) 12:17:45
>>222
thx。試してみるわ。
0224デフォルトの名無しさん2009/10/23(金) 15:50:21
すまん、どっかにオブジェクト参照残ってるぽくて、強制ガベコレしてもデストラクタまでこないんだがどんな風に掴まれてるのかオブジェクトグラフを辿る方法とかない?
0225デフォルトの名無しさん2009/10/23(金) 18:14:33
知るか禿げ
0226デフォルトの名無しさん2009/10/23(金) 21:33:32
アルゴリズムとデータ構造を勉強しようと思っているんだけれど、言語はC#でいいかな?
本はC言語の方が充実しているみたいだが、C#にも強くなりたいと思っているので。
他にC、Java、JavaScriptの文法ならわかる。
0227デフォルトの名無しさん2009/10/23(金) 21:35:18
>>226
今からC++覚える意義は何もないのでC#でいいよ
0228デフォルトの名無しさん2009/10/23(金) 21:36:10
Rubyがいいよ
0229デフォルトの名無しさん2009/10/23(金) 22:02:00
Haskellにしとけ
0230デフォルトの名無しさん2009/10/23(金) 22:12:56
>>228-229
ふざけんな
0231デフォルトの名無しさん2009/10/23(金) 22:17:11
ふざけんなとは、どういう意図で言ってるんだ?
0232デフォルトの名無しさん2009/10/23(金) 23:10:52
C#スレで別の言語すすめんな!スレ違い!って意味じゃないのかね。
まあ Ruby も Haskell も別にふざけた言語じゃないと思うけど。

ちなみにC#でアルゴリズムの勉強するとしても
Cとほぼ同じレベルの文法しかつかわないと思うよ。
使い方じゃなくて実装の方の勉強をするんでしょ?
0233デフォルトの名無しさん2009/10/23(金) 23:18:18
おまえに答えろと言ってねえよ
すっこんでろ
0234デフォルトの名無しさん2009/10/23(金) 23:19:46
>>232
うん。
使い方なら、(言語は何であれ)そもそもライブラリが充実しているのでそちらを使えるようになればいいと思っている。
目的はそのための基礎づくり。
0235デフォルトの名無しさん2009/10/23(金) 23:21:18
C#のすれでC#でいいかなとかもうばかかと
0236デフォルトの名無しさん2009/10/23(金) 23:42:15
なにこのうんこな流れ
0237デフォルトの名無しさん2009/10/24(土) 11:36:29
うんこは水に流すしかないな
0238デフォルトの名無しさん2009/10/24(土) 12:03:47
別のExeのプロセスをフックするにはどうしたらいいんでしょうか?
0239デフォルトの名無しさん2009/10/24(土) 12:40:01
プロセスのフック、なんてものはない。
別プロセスの何をフックしたいんだ?
02402382009/10/24(土) 13:08:39
自己解決しました
0241デフォルトの名無しさん2009/10/24(土) 13:14:38
よかったね。
0242238 2009/10/24(土) 13:28:53
してません。
サブクラス化?って奴だと思うんですが、自身のウィンドウしかできないもので。
0243デフォルトの名無しさん2009/10/24(土) 13:32:41
>>238
おれは優しいので教えてあげる

API
0244デフォルトの名無しさん2009/10/24(土) 17:59:42
自己解決しました
0245デフォルトの名無しさん2009/10/24(土) 20:09:21
サブクラス化ってことは、ウィンドウメッセージね。
あれは C# じゃ無理。グローバルフックが必要だから。
0246デフォルトの名無しさん2009/10/24(土) 22:23:07
C#でグローバルフックできるよ。
0247デフォルトの名無しさん2009/10/24(土) 23:08:43
へー。どうやってやるの? LL じゃ意味がないのはわかってるよね?
0248デフォルトの名無しさん2009/10/24(土) 23:14:46
>>247
ggrks
http://www.google.co.jp/search?hl=ja&source=hp&q=C%23+%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB%E3%83%95%E3%83%83%E3%82%AF&lr=&aq=f&oq=
0249デフォルトの名無しさん2009/10/24(土) 23:19:50
LL じゃん。ウィンドウメッセージをフックしてくれよ。グローバルフックで。
0250デフォルトの名無しさん2009/10/24(土) 23:22:03
まぁ、意味がわかってないバカってことだな。
02512432009/10/24(土) 23:25:50
おれのことスルーしてる?
0252デフォルトの名無しさん2009/10/24(土) 23:27:01
お前ははなから相手にされてない。
■ このスレッドは過去ログ倉庫に格納されています