3 :
931==936:05/01/23 23:50:10
4 :
デフォルトの名無しさん:05/01/23 23:50:29
4様
ムッハー
おっつー
6 :
デフォルトの名無しさん:05/01/24 01:06:14
このすれの主題は、やぱーり2005かな?
1.0でも2.0でもよい気がしますけども
2.0はリリースまだなので聞かれて答えても
MSの修正入ったりなんなりする予感。
まぁそれでもかまわないでしょ。それを気にする人はそもそも2.0なんか触らんわけだし
9 :
デフォルトの名無しさん:05/01/24 06:14:48
Stackを使っているのですが、以下のようなプログラムで0~9999までの数字をPushして、
次はPopを行いながらファイルに書き込むと5000~9999までしか書き込まれません。
以下のプログラムで何か間違っていますでしょうか。
using System;
using System.IO;
using System.Collections;
using System.Text;
namespace ConsoleApplication1
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
Stack tmpStack = new Stack();
Stack syncedStack = Stack.Synchronized(tmpStack);
for (int i=0; i<10000; i++)
{
syncedStack.Push(i.ToString());
}
StreamWriter sw = new StreamWriter(@"C:\Out.txt", false, Encoding.Default);
for (int i=0; i<syncedStack.Count; i++)
{
sw.WriteLine(syncedStack.Pop().ToString());
}
sw.Close();
Console.WriteLine("終わりました。");
}
}
}
>>9 すいません、事故解決しました。
POPしながらfor (int i=0; i<syncedStack.Count; i++)ではできないのも当たり前でした・・・
11 :
931==936:05/01/24 09:08:24
オブジェクトブラウザでDeleteメソッドのあるクラスを探せ
13 :
931==936:05/01/24 11:14:56
オブジェクトブラウザって、なんですか・・・。
クラスを探してほしいですが、
それ以前に、オブジェクトブラウザの使い方を・・・。
ツール>OLE/COM オブジェクト ビューア
使い方はぐぐるなどして自分で調べれ。
15 :
931==936:05/01/24 11:21:36
サンクスコ
16 :
デフォルトの名無しさん:05/01/24 11:32:20
グレープシティのTrueDBGridなんだけど
C1TrueDBGridのオブジェクトから行番号取得したいんだけど
どなたかわかりますでしょうか?
ヘルプに載ってるだろうし聞くならグレープシティに問い合わせりゃいいと思うんだけど。
SelectedRowsプロパティ辺りじゃね。
18 :
デフォルトの名無しさん:05/01/24 11:56:26
はい。SelectedRowプロパティだろうとヘルプは見たのですが、
その下がわかりません。
教えていただければ幸いです。
> ヘルプに載ってるだろうし聞くならグレープシティに問い合わせりゃいいと思うんだけど。
私自身はグレープシティのFAQざっとみてそれっぽいプロパティを挙げただけだからなー。
大体その下って何よ。
//コレクションにはそれぞれRowが入っていて、そのプロパティにはIndexなんてのがあったりするのか?
20 :
931==936:05/01/24 12:18:16
>>14 ワード→Alt+F8→VB起動
ライブラリ=Word
クラス=Find
Parent見つけました。
Property Parent As Object
読み取り専用
これしか書いてないっす・・・●rz...
オブジェクトブラウザでDeleteメソッドのあるクラスを探せ
>19
すいません下というのは
MessageBox.Show (c1TrueDBGrid2.SelectedRows.???);
???の部分なんです。
グレープシティに問い合わせですが、まだトライアル版で使用しているので聞けないんです。
つまり以下のことをTrueDBGridでやりたいのです。
int a = dataGrid1.CurrentCell.RowNumber;//行番号取得
txtBox1.Text = dataGrid1[a,0].ToString();//選択レコードの内容をテキストボックスにコピー
色々説明不足ですみません。
それ行番号を取得したいんじゃなくて選択レコードの内容を取得したいんじゃないの?
>>16 int a = c1TrueDBGrid2.Row;
txtBox1.Text = c1TrueDBGrid2.SelectedText;
こんな感じ?
>24
結果的にはそうです。選択行の0列目の値を取得したいのです。
>>25の訂正。
int rowNum = c1TrueDBGrid1.SelectedRows[0];
string colName = c1TrueDBGrid1.SelectedCols[0].Caption;
MessageBox.Show(c1TrueDBGrid1[rowNum, colName].ToString());
>27
ありがとうございます。
行をセレクトすると
int rowNum = c1TrueDBGrid1.SelectedRows[0];
の部分でインデックスが範囲を超えています。とエラーが・・・。
もし0列目のみであれば
int rowNum = c1TrueDBGrid1.SelectedRows[0];
MessageBox.Show(c1TrueDBGrid1[rowNum, 0].ToString());
でいけますよね?
29 :
デフォルトの名無しさん:05/01/24 15:24:38
重たい処理をするときはスレッドクラスを使って処理を分散させたほうが良いですか?
その重たい処理が一つだけなら大体YES。
重たい処理が複数あるなら、シングルCPU環境においては順次やっていった方が早いかもしれない。
いずれにせよUIスレッドは処理スレッドとは分けるべき。
31 :
デフォルトの名無しさん:05/01/25 00:42:55
宇宙仮面に掲載されているNotifyIconを2005でやってみたのですが、
うまくいきません。
①NotifyIcon追加しました。
②アイコンを自作し、NotifyIconのIconPropertyに割り当てました。
③ShowInTaskBarをfalseにしました。
そして、F5後に、フォームの右上の最小化ボタンを押しました。
すると、画面の左下のスタートボタンすぐ上にちっこくなりました。
最小化とは、SystemTrayにのみ表示される状態 だと思うのですが、
Systemtrayのみならず、小さいながらもデスクトップ領域に残ってます。
当然TaskbarにはShownされていません。
原因はなんでしょうか。よろしくNE.
最小化されてからShowInTaskbarをfalseにする。
33 :
デフォルトの名無しさん:05/01/25 00:53:22
>>32 最小化されたことを検出するには、どうすればいいのでしょうか。
SizeChangedでも一応ひっかかりますが、これは他用途で使用しているので
専用のがあったらいいな。
private void myform_minimized(object sender, e){
this.ShowInTaskbar = false;
}
復帰用
private void myform_*****(object sender, e){
}
お願いします。
無いので……ってSizeChangedなんてあったのか。
私はもっぱらResizeイベントでやってる。
35 :
デフォルトの名無しさん:05/01/25 01:00:15
プロパティ変更にSizeCHangedがあります。
SizePropertyの値がControlで変更されたときに発生sらしい。
Resizeやってみます。
Resizeである値以下に小さくなるのを監視すればいいんですか?
36 :
デフォルトの名無しさん:05/01/25 01:03:11
>>34
でも、それでは、
通常使用時(sisytemtoryに格納されておらず、Form見えている状態)
では、タスクバーに表示されてしまいます・・・。
37 :
デフォルトの名無しさん:05/01/25 01:09:02
private void notifyIcon1_Click(object sender, EventArgs e)
{
this.WindowState = System.Windows.Forms.FormWindowState.Normal;
}
private void Form1_Resize(object sender, EventArgs e)
{
if (this.Height < 30)
this.ShowInTaskbar = false;
else
this.ShowInTaskbar = true;
}
こんな感じでそれとなくできましたが、
より好ましい形態がありましたら、教えていただけますでしょうか
お願いします。m(_ _)m
WindowStateがFormWindowState.Minimizedかどうか見ればいい。
で、>36については最小化時に一旦ShowInTaskbarをtrueにしてすぐfalseにするとか。
39 :
デフォルトの名無しさん:05/01/25 01:12:22
>>38 今気づきました。minimizedをみることを。
アドバイスさんくすこー!
一旦、それやてみるよ。
40 :
デフォルトの名無しさん:05/01/25 01:18:56
private void notifyIcon1_Click(object sender, EventArgs e)
{
this.WindowState = System.Windows.Forms.FormWindowState.Normal;
}
private void Form1_Resize(object sender, EventArgs e)
{
this.ShowInTaskbar = true;
this.ShowInTaskbar = false;
// if (this.WindowState == System.Windows.Forms.FormWindowState.Minimized)
// this.ShowInTaskbar = false;
// if (this.WindowState == System.Windows.Forms.FormWindowState.Normal)
// this.ShowInTaskbar = false;
}
なんとも、ばかばかしくて、意味不明。
はぁっ?って感じ。これでうまくいきました〇rz...
41 :
デフォルトの名無しさん:05/01/25 01:19:36
42 :
デフォルトの名無しさん:05/01/25 01:28:27
フォームに貼り付けるのはProgressBarで、
StatusStripに追加するのはToolStripProgressBar。
別物なので混同しない。
コードで変更した場合はどうなの?
>>43 似て非なるものだけど、まぁ同じようなものだと思う。
画像には、誤ってFormに貼り付けたプログレスバーのプロパティ
だしてしまってるけど、
StatusStripに貼り付けたToolStripProgressBarも
全く同じように、ForeColorをRedに、BackColorをSystem.Desktop
にしています。
だから、デザイナからじゃなくてコードから色を変更したらどうなの?
ちなみに私の所では問題なく色が変わってる。
VS2005は入れてないからそっちのチェックはできないが。
46 :
デフォルトの名無しさん:05/01/25 12:03:55
あのー
ShowInTaskBarをfalseにすると、
HotKeyって使えないんですか?
falseにしたら使えませんでした。
2005 C#
参考ソース
[DllImport("user32.dll", EntryPoint = "RegisterHotKey", CallingConvention = CallingConvention.Winapi)]
public static extern int RegisterHotKey(IntPtr hwnd, uint HK_ID, uint MOD_KEY, uint KEY);
[DllImport("user32.dll", EntryPoint = "UnregisterHotKey", CallingConvention = CallingConvention.Winapi)]
public static extern int UnregisterHotKey(IntPtr hwnd, uint HK_ID);
そんなことはないな。
と思ったらちょいと勘違いだった。
ShowInTaskbarを変更するとフォームのウィンドウハンドルが作り直されるのね。
そうするとホットキーを送出するウィンドウ先が不明になって無効になると。
HotkeyをControlとかから継承した独自クラスにすればいい。
WM_HOTKEYを受け取ったらイベントを通知するようにして。
//と言う作業を私は既にやっていたから……。
sampleきぼん抜 (>_<)
50 :
42-44-46:05/01/25 15:12:32
プログレスバーのforecolorうまくいったですたい。
form_load内で、設定したらうまくいったですたい。
でも、どうしてですたい。
それじゃ、プロパティウィンドウでの設定は
なんのためにあるとですたい。
52 :
42-44-46:05/01/25 16:35:36
>>51
49 サンクスコ!!!
50 報告の仕方のサンプルきぼん抜(>_<)
そろそろこのバカどうにかなりませんかね?
54 :
42-44-46:05/01/25 17:03:05
とりあえず前スレを使い切りませう
>>52 インストールしたディレクトリ(ex. C:\Program Files\Microsoft Visual Studio 8)の
readme.htmを参考に。
58 :
デフォルトの名無しさん:05/01/25 22:12:17
ntpサーバーにアクセスが許可されておらず、
一方、HTTPプロトコル(通常のネット)は許可されている環境において、
NTPサーバーが提供している時刻、あるいはそれに準ずる時刻を
取得する方法はございませんか?
>>58 某独立行政法人のページに、負荷がでかくなりすぎたからサービス止めたって書いてあった。
というかそんな環境なら、外側と繋がってるPCだけNTPを許可して、そこから時刻を供給するようにするのが普通。
管理者にでも文句を言って下さい。
61 :
デフォルトの名無しさん:05/01/25 22:52:04
>>60 ソース見ましたが、これってwebrequestで取得できそうなんですか?
どうも無理なような・・・
機械的なアクセスはご遠慮下さい、とは書いてあるがみなかったことにして。
62 :
デフォルトの名無しさん:05/01/26 07:48:58
円周率の計算をしたいのですが、計算途中でCPU
などの温度を取得して、計算を止めた時に書き出す
事はできますか?
π
65 :
デフォルトの名無しさん:05/01/26 10:29:03
webrequestを利用して、HPのformとかに書き込みすることは可能ですか?
ひゅーれっとぱっかーどのふぉーむってなんですか。
直接送信したいってことなら可能。
67 :
デフォルトの名無しさん:05/01/26 11:10:03
>>66 どのように取り組んだらいいのでしょうか。
お願いいたします。
継承していくと、どんどんパブリックメソッドが増えて行くのですが、これを隠してしまいたいです
なにか良い方法はありますでしょうか。
public class MyForm1 : System.Windows.Forms.Form
{
public string MyProperty { ... }
}
public class MyForm2 : (System.Windows.Forms.Form)MyForm1
{
public string NewMyProperty { ... }
}
として MyForm2 のインスタンスから見えていて欲しいのは System.Windows.Forms.Form のメンバのみ
MyForm1 のプロパティーは全部または一部を protected にしてしまいたい
無理。
集約を使うなどしてあまり無闇に継承させないというのが最近のOOP。
>>70 集約でも構わないです、System.Windows.Forms.Form の継承をしたまま
MyForm1を利用できるか調べています。
単にインテリセンスにでてくんなってことならEditorBrowsableAttibute属性で制御できるが。
プロパティウィンドウの表示はBrowsableAttribute属性で。
74 :
デフォルトの名無しさん:05/01/26 13:06:46
文字コードが誤っているサイトとかありますか!?
……誤ってるサイトってのは難しいな……。
76 :
デフォルトの名無しさん:05/01/26 13:09:38
>>75 意外と多く存在すると、聞いたのですが‥
どうでしょうか!?
すいません、もうひとつ質問なんですが、
何桁まで円周率を求めることができますか?
時間さえあればほぼ無限と考えていいのでしょうか?
スレ違い。
てかそれ知ってどうする。
79 :
デフォルトの名無しさん:05/01/26 13:12:15
レポートがありまして‥
ああ、書き込みがあった。
78 は
>>76 へのことなので。
まあ77もスレ違いだわな。
82 :
345:05/01/26 17:25:45
>>77 あまりにも低レベルな質問するな!
3で、いいじゃねーか、3で!!
「およそ」3、ですよ。
もまいら、教えてちょんまげ。
RichTextBoxでHideSelectionをfalseにしたときに、
AppendText()やると自動的に最下行までスクロールしてくれる。
だけど、キャレットの位置が末尾以外の時にはスクロールしたくない。
どうすればいい?
Text += を試してみてくれ。
.NETで動的プロパティでコンフィグレーションを設定するのに
読み込みはできるのですが、書き込みはできないのでしょうか?
簡単にiniファイルなどの設定を保存する機構を実現するためには
独自のオブジェクトをXMLでシリアライズするしかないのでしょうか?
(レジストリ保存意外の方法の場合)
>>86 できるけどやらない方がいいって
MVPの連中が言ってた。
俺も別のファイルに保存したほうがいいと思う
>>85 キャレットが末尾以外の時は、スクロールが動かないようにしてほしいんですよ。
Text += hoge;
ってやり方だと、スクロールが先頭にいってしまいます。
キャレットが末尾以外の時の動作ってのは、HideSelectionがtrueの時の動作がいいのです。
でも、
HideSelection = true;
AppendText("ほげほげ");
HideSelection = false;
ってなやり方でやってもうまくいかないんですよね。
他にやり方ありますかね?
>>68
さんくすこ!!
検索文字列すら思い浮かばなかったんだ・・・
IME文字列取得('A`)マンドクセ。メッセージとか調べ中。
キャレットも('A`)マンドクセつーかShowCaret読んでも表示されませんヽ(`Д´)ノウワァァン
>>92 ありがとです。みてみます。
何で最初っからFormsにないんだ( ゚Д゚)ゴルァ!!
94 :
デフォルトの名無しさん:05/01/27 12:40:45
[Operation on the form with .Net]
i tried [
http://ukamen.hp.infoseek.co.jp/Programming1/HTMLPost/] then i found the webRes throw exception,
"受信時に予期せぬエラーが発生しました"
WebResponse webRes = webReq.GetResponse();
meanwhile,
an warning occurs at
webReq.Proxy = System.Net.WebProxy.GetDefaultProxy();
it says this expression is an old style.
thereafter,
parameters += HttpUtility.UrlEncode( "111-");
Thereis no System.Httputility.urlenc in .NET2.0
Thank you.
webReq.Proxy = System.Net.WebProxy.GetDefaultProxy();
>>92 だめですだ。文字コードの樹海にさまよいこみました・・・orz
DllImportと取得した文字をUnicodeにすることで2000では動きました。
Win98とかだとうごかねーんだろうなぁ・・・
>>96 Win2000 + ATOK17だとそのままで動くな~。
C# で下記のようなアプリケーション(Windows Forms)を作ろうとしています。
バックグラウンドで動き続けて、数秒単位であるフォルダを監視します。
その時、そのフォルダにファイルが存在した場合、そのファイルを読み込み
適宜処理します。
という感じなのですが、上記のような処理を行なうには、
スレッドにて処理を行なうほうがよいのでしょうか?
(スレッドを勉強する所から入らないといけませんが)
それとも Timer コントロールの Tick イベントで処理する方法でも
問題ないのでしょうか?
いまいち、スレッドというものの概念というか使うべき所が理解できません。
上記、アドバイスを頂けますとうれしいです。
まあ別スレッドでやった方がいいだろうね。
System.Timers.Timerで定期処理すれば?
FileWatcher使えばできるぞ。
derige-to,BeginInvoke あたりを押さえておけ。FileWatcherにはUI用のコールバック考慮されてるからそこも見るべし
FileSystemWatcherですた
102 :
デフォルトの名無しさん:05/01/28 01:03:40
WebRequestでPOSTしようとしてるんですが、
hiddenタイプはどう設定するんですか?エロいひと。
他の要素と変わらないが?
コードアクセスセキュリティまわりを手っ取り早く解説してる本無いですかね?
ドキュメント読んでるけど脳が腫れそうだ
>>104をみてふとおもったんだが(
>>104を馬鹿にしてるとかじゃ決してないので!)
何ツーかこの業界、人の作ったルールばかり読まされて自分で考えることしない人にはある意味天国(後で取り返しのつかないことになるんだが)、な世界だな。
そうやって廃人になったひとも多いいんじゃなかろうか。
そこらへんがスーパープログラムーとVB厨の違いなんだろうな。
106 :
デフォルトの名無しさん:05/01/28 14:23:07
>>105
自分で考えてたら、規格統一がままなりませんからね。
向き不向きが強く現れるのでしょうね。
>>105 104ですが一応自分でも考えてるんですよ
でも馬鹿なんでドキュメント以外の言葉でも書かれている物読んだり
単刀直入な部分から入っていったり他の人がどう考えてるか知りたいんですよ
自分が無能だと分かってるから自分の考えだけで走ると取り返しに付かなくなることの方が多いから
「手っ取り早く解説してる」という表現は間違ってました
入り口の違う解説書がもしあったら紹介して欲しいなということです
DateTimePicker に日付が表示されていない状態を作りたいのですが、
.Value には 空白を設定できないし、どのようにやればいいのかわかりません。
DateTimePicker に日付が表示されていない状態を作る方法を教えて
いただけないでしょうか?
DateTimePicker.Format
110 :
デフォルトの名無しさん:05/01/28 21:23:45
2005でWebrequestでPOSTしてるんですが、
'System.Net.WebProxy.GetDefaultProxy()' は古い形式です :
'This method should not be called, please rely on the
proxy selected for you by default.'
C:\Documents and Settings\Administrator\Local Settings
\Application Data\Temporary Projects\ConsoleApplication1\Program.cs
3331
といわれてしまいます。代替メソッドとかございませんか?
参考サイト
http://ukamen.hp.infoseek.co.jp/Programming1/HTMLPost/
111 :
デフォルトの名無しさん:05/01/28 21:26:19
また、Consoleでの出力文字列が
以下のように文字化けしてします。
<HTML><HEAD>
<meta http-equiv="content-type" content="text/html;charset=SHIFT_JIS">
<title>郵便番号 [111-] の検索結果</title>
<style TYPE="text/css">
ともって貼り付けたら、文字化けしてませんでした。
なぜ、僕の2005のコンソール画面だけ
<HTML><HEAD>
<meta http-equiv="content-type" content="text/html;charset=SHIFT_JIS">
<title>□□□□ [111-] □□□□□</title>
<style TYPE="text/css">
になってるんだろう・・・
そもそもこの[111-]ってなんですか?
参考サイト
http://ukamen.hp.infoseek.co.jp/Programming1/HTMLPost/ 度々すみません。緊急の宿題なんですが、
かれこれ数時間悩んでいます・・・・丸rz。
>>104 ごめんなさいそういう意味じゃないの・・・一般論です・・・
いやなんかこの業界(いやどこでもそうかもしれないが)技術の進展が早くて、無駄になる知識も多いかと。
この業界廃人になる人が多いのもそういうのが関係してるんじゃないかと。
>>110 WebRequest.ProxyはデフォルトでIEのプロクシ設定になってる。
2005のコンソールって、.NET Framework SDK コマンドプロンプトだよね?
別に文字化けはしないなー。
114 :
デフォルトの名無しさん:05/01/28 21:56:11
115 :
デフォルトの名無しさん:05/01/28 22:02:50
116 :
デフォルトの名無しさん:05/01/28 22:03:48
リモート サーバーがエラーを返しました: (404) 見つかりません。
117 :
デフォルトの名無しさん:05/01/28 22:04:22
む、先頭のhが自動的に消されてしまった。
120 :
デフォルトの名無しさん:05/01/28 22:24:38
private static void Post()
{
System.IO.Stream stream = null;
System.IO.StreamReader sr = null;
Uri uri1 = new Uri("
http://www.occn.zaq.ne.jp/cueay508/test.html");
Uri uri2 = new Uri(uri1, Action<"/cgi-bin/tools/formdecode">);
try
{
System.Net.WebRequest webReq = HttpWebRequest.Create(uri2);
webReq.Method = "post";
うまくいきません(T_T
121 :
デフォルトの名無しさん:05/01/28 22:27:49
……もうちょっとこうなんというか自分の頭で考えるとかこれって文法的におかしくね?とか思わないのか。
Uriクラスのコンストラクタを調べる事すらしないのか。
コンストラクタの第二引数に要求されてるのは文字列だろ? C#で文字列はどう書くよ。
<form ......>の中で実際にUriを指してるのはどの部分よ。
124 :
デフォルトの名無しさん:05/01/28 22:32:25
Uri uri2 = new Uri(uri1, [action="/cgi-bin/tools/formdecode"]);
これだと、エラーが出るんです・・・
で、ActionっていうクラスのSummaryにAction<>って書いてあったから
<>ってGenerics?とりあえず、書いてみたのが、120でした。
125 :
デフォルトの名無しさん:05/01/28 22:39:43
読み方 : ユーアールアイ
フルスペル : Uniform Resource Identifier
インターネット上に存在する情報資源の場所を指し示す記述方式。インターネットにおける情報の「住所」にあたる。URIは包括的な概念であり、現在インターネットで広く用いられているURLはURIの機能の一部を具体的に仕様化したものである。
〇rz。。。わからん。。。
……C#で文字列ってのは" "でくくった中身だよな?
" "の前になんか変な文字がくっついてたりしたら当然エラーだよな?
127 :
デフォルトの名無しさん:05/01/28 22:45:33
public sealed delegate void Action<T>
なんかデリゲートみたいですね。なんだろう・・
129 :
デフォルトの名無しさん:05/01/28 22:48:42
>>126
はい、そうです。
文字列は、""でくくるか、
文字列を返り値とするメソッドを利用します。
例えば、"mytext"や、String.vbConv(string str,vbConv.Narrow,0x0411);
や、mynumber.ToString()などです。
131 :
デフォルトの名無しさん:05/01/28 22:56:45
132 :
デフォルトの名無しさん:05/01/28 22:58:31
@"c:\system"とかのように@いらないんですか?
133 :
デフォルトの名無しさん:05/01/28 23:00:16
>>130方々
あえて、すぐに答えを教えずに
考えさせよう、という教育的な姿勢を感じました。
おかげで、さまざまなサイトを訪問し、
ちょっと知識もつきました。ありが10.
そして、最後の最後に教えてくれましたね!でも
試行錯誤でなんとか・・
というか、試行錯誤の前に
[action="文字列"]ってそのまま書くっていう意味じゃなかったのね・・・
〇rz。。。
134 :
デフォルトの名無しさん:05/01/28 23:01:47
でも[Marshall Struct]とかのように
たまに[ ]ってみかけたから、例外的にStringなのかと
思ってた。(ぜんぜん意味わかんないけど)
[DllImport **]も、[]だし。
だからといって、[]がStringだとは思わなかったけど、
交錯していました。すみません。そして、ありがとう、みんな。
135 :
デフォルトの名無しさん:05/01/28 23:06:29
質問というより気になってることですが。
.NET2.0のC#をみてたらyieldって命令が増えてますが、
これって内部でスレッド使ってるのかコンパイラが賢いことしてるのか気になります。
public System.Collections.IEnumerator GetEnumerator()
{ foreach (string day in m_Days) yield return day; }
どうなのでしょう?
136 :
デフォルトの名無しさん:05/01/28 23:08:20
137 :
sage:05/01/28 23:12:36
スクロールバーの移動で発生する、Viewの再描画を自分で実行する方法はない
でしょうか?
例えばListViewに新規項目が追加された場合は一番したまでスクロールし
再描画をするという処理を実現したいです。
138 :
デフォルトの名無しさん:05/01/28 23:17:42
>>137
myListView.Item[myListView.Count-1].Select();
myListView.Invalidate();
あるディレクトリ内で重複しないファイル名を作成する方法はないでしょうか?
Unix でいう mktemp のような事を行ないたいのですが、方法があれば教えてください。
CGIにPOSTしようとする香具師が「URLエンコード」を知らないのは何かの間違いですか?
>>139 情報ありがとう。コンパイラが賢いことをしてたのですね、安心しました。
スレッドが変わってないのは確認してたのでもしかしたら
あのレア機能のNT Fiberを使ってるのかとあらぬ想像をしてたのです(笑)
C#って、構造体の初期化で
Point p = { 0, 0 };
これが使えないですよね?
Point p;
p.x = 0;
p.y = 0;
こう書くように解説してる人が多いけど、
やっぱコンストラクタを使いたいので
Point p = new Point( 0, 0 );
こう書くと、スタック上に未初期化のpを作って
コンストラクタで作った{ 0, 0 }なPointを
コピーするみたいですが、激しく無駄が気持ち悪いです。
C++みたく
Point p( 0, 0 );
って書ければいいのにって思います。
お前らは構造体の初期はどうやってますか?
C#のコンパイラが、
Point p = new Point( 0, 0 );
これをきちんと、無駄なコピーをしないように
最適化してくれればいいのに。
重い処理をスレッドを立てて処理をするようにしたのですが、
join()でスレッドが終わるまで待つようにしたところフォームが応答なし状態になってしまいます。
こんな感じです
↓
Thread ThreadTest = new Thread(new ThreadStart(ThreadTestMethod));
ThreadTest.Start();
ThreadTest.Join();
MessageBox.Show("end");
これでは何のためにスレッドを立てたのか分かりません。
回避方法はありますか?
>>146 Joinしなきゃいいじゃん。
コールバックメソッド使え。
>>144 > Point p = new Point( 0, 0 );
ILを見ればわかるけどこれでコピーもポインタの代入も発生してないから安心していい。
固定の領域に対してコンストラクタを呼んでるだけ。値をそれぞれ代入するのと
コンストラクタを呼ぶのにそんなに差はないと思うからどっちでもいいのではないかな。
ついでだけどSystem.Drawing.Pointがnewでないと使えないのはX, Yがプロパティの
せいだろうか。
>>148 ザンクス
あとは、自作のメソッドで構造体を頻繁に引数にする時は
ref渡しにすればいいのかな。
ListViewItem へのドラッグアンドドロップについて教えてください。
ListViewに2つのListViewItemを配置します。これを A, B とします。
あるファイルXをドラッグして、A 、B どちらかにドロップさせます。
A、Bどちらにドロップされたかによって、ファイルXへの処理を決定します。
explorerなんかで、ファイルをつかんで、フォルダツリーにもっていくと、
マウスが乗ったフォルダのフォルダ名の色が反転して、
ファイルを離すと、そのフォルダにファイルがコピー or 移動されますよね。
見た目的にはああいうことをやりたいんですが、よくわかりません。
ListView にたいしてのDrag&Dropの通知はわかるんですが、
ListViewItemへの通知の仕方がわかりません。
やりかた、参考になるサイト等あったら是非教えてください。
よろしくお願いします。
DragEventArgsのX, YからListView.GetItemAtでどれにドロップされたかチェック。
//PointToClientも必要かな?
>>149 やってみればわかるがstructの参照渡しはできない。
void sub1(ref Point p)はエラーになる。
void sub2(object p)ならできそうに見えるが、実はbox, unboxが発生していて
やっぱりできてない上にもっと効率が悪い。
値渡しで効率が悪いような大きなデータはclassにするべきということだ。
c#のstructはvaluetypeと呼ばれるものでc++のそれとはだいぶ違うということを心得るべし。
>>152 意味がわからんのだが。
static void sub1(ref Point p) {
p.X = 123;
}
static void Main() {
Point p = new Point(12, 12);
sub1(ref p);
Console.WriteLine(p.X); // 結果は123
}
普通にできますよ?
まあ大きなデータはクラスにすべきなのは間違いないけど。
>151
ありがとうございます。
DragEventArgs が e として、ListView( listView )のDragDropイベント中で、
ファイルXがドロップされたItemを下記コードで無事取得できました。
Point point = listView.PointToClient( new Point( e.X, e.Y ) );
ListViewItem item = listView.GetItemAt( point.X, point.Y );
if ( item != null )
{
textBoxLog.Text = item.Text;
}
ドラッグ中のListViewItem名の色の反転はまだできてませんが、
ここまでこれればなんとかなりそうです。
DragOver でするのかなぁ?とか思ってます。
サーバサイドなJavaコーダで食ってるんだけど、
VSゲットでなんとなくC#勉強し始めてみた。
Windowsアプリは面白い!と結構感動中。
>>153 むむ、System.Drawing.Pointだとできますね。もっちと調べてみます。
スレの流れ的にはマニュアルの例題にあるこれを使ってると思う。
struct Point
{
public int x, y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
できるってば。
どのアセンブリのものかによって動作が変わったら困る。
ref/outが参照渡しにならなかったらP/Invokeがめんどくさいし。
>>156 すまそ、できますね。どうでもいいところでポカミスやってました。
152の記事は無効ということでお願いします。
158 :
136:05/01/29 22:34:17
>>139
>>141
HTTPの勉強がしたいです。
ばかな質問をしてすみません。
「とりあえず、ここでも読んどけ、あふぉ!」といったような
サイトをご紹介願えませんでしょうか。
重ねてお願いします。
160 :
136:05/01/30 02:05:20
質問なんですが、デバッグで立ち上げたときだけ'System.NullReferenceException' を出して
Exe直接起動すると出ないってどういうことなんでしょう?
デバッグで走らせてても位置特定できないし。
ContextMenuが出そうになると固まります。その後'System.NullReferenceException' エラーが出て、その後は別に続けても問題なし・・・・
ワケワカメ
続けて問題ないってことはどこかでcatch
されてるんだろうから、別にいいんじゃない?
場所の特定は非マネージドコードのデバグをonにすれば可能だと思う。
Streamの位置を移動する場合、
Positionを直接設定するのとSeekメソッドを使用するのでは
何か速度的な違いがあるのでしょうか?
気にするようなもんじゃないよ。
サンクス
167 :
160:05/01/30 19:22:02
サンクスコ!
それにしても、すごい分量ですね。
僕は ただ、FormのPostで全角な文字列を
僕のメールに送りたいだけなのですが・・。
あぁ、すごい量だ。
前スレの812です。
ボタンをマウスでクリックした時のイベントつかまえて処理をしています。
この時マウスを連打するとクリック回数分連続でイベントが走ってしまいます。
最初の一回のイベントのみ実施してその後のイベントをキャンセルしたいのですが、
いい方法ありませんか?
マウスポインタを砂時計にしてもだめでした。
それなりに重たい処理を行うので連打を許したくないのです。
クリックイベントの中でボタンのEnabledをfalseにすればいいと思っていましたが、
それではうまくいきません。
.netではイベントの開始から終了までの間にクリックしても前回のイベントが終了しないと
次のイベントが発生しないようなので。
Windowsのメッセージを捕まえて何とかしないとだめなんですかね。WndProcとかで。
>>167 Form云々はHTTPでメール云々はSMTPだが、大丈夫か?
>>170 ボタンのクリックイベントの中でフラグ持っても結局
イベントの最初でフラグをチェックしてONなら抜けてOFFならONにするって
やり方はVB6.0とかではできましたが、.netでは無理でした。
それなりに重い処理なら別スレッドでやればいいじゃん。
UIスレッドはワーカスレッド起動するだけですぐ解放されるわけだから、ボタンをEnabled=falseにすればいい。
ワーカスレッドが終了時にInvokeでボタンのEnabled=trueを実行する。
174 :
160:05/01/30 22:16:31
>>169 プロバイダから提供されているPostにおいて、
投稿内容送信先に僕のEメールを設定するだけです。
だいじょうぶです。なんとか理解しています。
ただ
HttpUtility.UrlEncode
がよくわかりません。
StreamWirteとか、Streamreaderとかで
Encoding.getEncodeing("shift\jis")とか("EU_**")とか
適宜設定してやれば、文字化けが回避できることは
わかたんですが、
>>174 http に関する知識を増やしてくれ
なんでそこで躓くのかよく分からん
安心しろ、君は何も分かってない。
つかちょっとは自分で調べろ。
UrlEncodeでぐぐっただけでもトップ20以内に有用な情報が見つかったっての。
177 :
160:05/01/30 23:32:28
ちょっとわかりました。
ようは円コードすると、
スペースが+になったり、
漢字が2バイト(16*4)になったりするんですね。
で、フォームのテキストボックスに
「渡辺」とではなく「%4b%80」なんて入れたら、
当然、そのまま「%4b%80」と解釈されるわけだから、
渡辺っていう漢字は消えてしまうのね。
で、URLEncodeは、URLに対してのみ利用されるものなのね。
当然、そのEncoding.GetEncoding()も、
サイトによって異なるけど、少なくともFormのActionを使って
送信する分には、エンコードする必要はないのね!!
179 :
デフォルトの名無しさん:05/01/31 10:22:04
>>160 せめてとほほのWWW入門ぐらいは(ry
180 :
160:05/01/31 10:46:12
本買うお金ないので、>>179さんありがとう。
>>178さん申し訳ない。
Windows.Forms で GroupBox の中に GropBox を入れて、両 GroupBox の
FlatStyle を System に変更し、XP スタイルで表示させると、
内側の GroupBox の Text のフォントが指定した値より大きく表示
されてしまいます。
この現象を御存知の方、回避する方法を御存知の方がいらっしゃいましたら
方法を教えて頂けないでしょうか?
ありがとうございます。
Resolved as Fixed by Microsoft on 2004-12-10 at 02:53:10
となっているので次期では解決するんでしょうね。
教えて頂いた先に解決させるコードがあったので頂きました。
助かりました。どうもありがとうございました。
184 :
160:05/01/31 22:36:19
>>179 前から思ってたんだけど、その最後の)ryってなに?
185 :
デフォルトの名無しさん:05/02/01 01:50:08
>>184 お前はまず自分で考え自分で調べると言う事を
身に付けたほうがいい
略
187 :
160:05/02/01 12:17:52
>>185 僕もそう思った。
ryってぐぐったら、すぐに出てきたよ。
どうしていつも僕って(ry
初歩的な質問ですいません。
TreeNodeをコピーしたいのですが、
TreeNode ClonedNode = (TreeNode) treeView.SelectedNode.Clone();
とすると
'System.MissingMethodException' のハンドルされていない例外が mscorlib.dll で発生しました。
追加情報 : このプロジェクトで、引数なしコンストラクタは定義されていません。
と例外が発生して、うまくいきません。
どのようにすればいいのでしょうか?
VC++で作成したDLLをC#で呼び出したいのですが
引数に指定した構造体内の値(配列やポインタ)がうまく
ひきつげません。
どうしたらよいのでしょうか?過去にも同様の質問やサン
プルコードがあればどのあたりを参考にすればよいか教えて
下さい。
190 :
160:05/02/01 16:26:14
>>189
検索能力0か?(ry
>>188 Clone は出来ないってことです。新しく作ってアレコレ設定しましょう。
193 :
160:05/02/01 22:55:38
ワラ
>>192 逆ギレ?池沼?
MSDN 読めば実例付きで載ってるだろ。
Web で検索するまでも無い。
Windows Media Format SDK 最新版も Managed コードとの
相互運用サンプル付いてるし。
池沼ってなんですか
イヨウ池沼君、元気か?
199 :
160:05/02/02 09:01:49
おまえら、少し落ち着けよ。(ry
200 :
デフォルトの名無しさん:05/02/02 09:39:21
VisualC#を使用しているのですが、
「コードの表示」と「デザイナの表示」を切り換えるタブがいつの間にか表示されなくなってしまいました。
再表示させる方法を教えてください。
201 :
デフォルトの名無しさん:05/02/02 09:42:01
ごめんなさい。みつからなかったので質問させてください。
TextBoxでコピーや貼り付けなどを行わせないようにし、
通常の入力は行えるようにしたいのですが
どのようにすればいいでしょうか。
203 :
160:05/02/02 10:41:03
204 :
デフォルトの名無しさん:05/02/02 10:52:50
質問1
C#.NETじゃWin32APIは使えんのかね?
質問2
WebFormでフレーム組む方法はわかる。で、
2ちゃんねるの左の窓で「プログラマー」をクリックすると
右の窓が他のURLへ飛ぶだろ
これどうやるの?
>>203,160さん
DrawStringは描画のメソッドだとおもうのですが。
通常の入力はさせたいのです。
>>204 1)できる。DllImportAttribute属性を調べてみな。
2)name属性とtarget属性で指定するものだが。
>>205 コンテキストメニューを空のContextMenuにして、
Ctrl+VとShift+Insを殺せば良いんでない?
……WindowsFormsの話だよな?
>>206さん
ふむふむ。ありがとうございました。WindowsFormsです。
189です。
195さん、丁寧にありがとうございました。
質問の意図はマーシャリングすればなんとか取得出来ると
思ったのですが、うまく行かなかったので同様の議論が
あればさくっとルーティングしていただけたらと思ったので。
C#初めてでどうにもやっていることの方向性が合っている
かもわからずだったので質問してしまいました。
自力でやってみます、ありがとうございました。
ちなみに192は自分ではありません。でも探索能力0は当
たっていますね(汗)。
210 :
デフォルトの名無しさん:05/02/02 17:21:49
プロパティとpublicフィールドの違いをおせーて下さい。
>>210 こ~いうのとか
class Class1 {
public Test PublicField = new Test();
public Test Property { get { return PublicField; } set { PublicField = value; } }
[STAThread]
static void Main(string[] args) {
Class1 class1 = new Class1();
class1.Property.Data = 1;
class1.PublicField.Data = 1;
}
}
struct Test {
public int Data;
}
>>211 それだと違いがわからないと思うが。
典型的には get しかない property なんかは、public field じゃ実現できない。
>>210 プロパティだと例えば public string Value { get; set; } とかで
setする時に決まった入力文字列以外はthrowするとかの処理が挟めるし、
getするときも適当に整形して返せたりします。
>>210 一言でいえば全然違うとしかいいようがない。
アクセスするときのシンタックスが似てるだけで。
全然違うものだから
>>211 とか
リフレクション時動作の違いとか
あげればきりがないだけの違いが出てくるし。
その質問は「メソッドとフィールドってどう違うんですか」っていうのと
同じぐらい変な質問に思える。
ただ、publicフィールドを使わないほうがいいと思う。
>>212 すまぬ
public field と、変数のエイリアスとしての public property の違いを聞いているのかと思ったよ
昨日、後輩から普通に聞かれたもんで
っていうか、property って、内部的には set_ or get_ メソッドを作っているんだよなぁ
メソッドと変数の違いに近いかもしれない
>>216 いや、それでも実現できないやん
公開するプロパティは弄らせないが、自分だけは弄りたい場合とか
RichTextBoxで行の終端の座標を取得する方法はないでしょうか?
EOFとかCRLF等を描画しようと思いますが、どうにも行の終端の位置座標が
取れないため苦戦しています。
.NETだとフィールド公開するより
プロパティのほうが速度が速いみたいですね!!
220 :
210:05/02/02 23:14:24
みなさんどもども。
>>214 publicフィールドなんて使いません。
>>215 内部的にgetter、setter作ってるならますます違いが分からない…orz
ま、便利なメソッド=プロパティってことにしときます。
ありがとう。
>>220 俺は public readonly のフィールドは頻繁に使うけどな
状態変化するオブジェクトは余り作りたくない性分なんで
(けどそうするとプロパティにして内部へのアクセスを
>>211 みたいに禁じたほうが確実か?)
プロパティはコンポーネント指向で出てきた概念
ほら、フォームデザイナで編集するときに色々と便利やん
222 :
210:05/02/02 23:28:20
>>221 漏れはもともとJavaやってたんでgetter、setterをしこしこ書く派。
プロパティはコードが見にくくなるんで使いたくないなぁ。
ま、アクセサ書いても一緒なんだけどね…。
フィールドとプロパティの違い
public struct Square
{
public double Width = 0;
public int Area
{
set
{
Width = System.Math.Sqrt( value );
}
get
{
return Width * Width;
}
}
}
Widthがpublicフィールド、Areaがプロパティ。
Square square;
square.Width = 2.0;
Console.WriteLine( square.Area.ToString() );
square.Area = 9.0;
Console.WriteLine( square.Width.ToString() );
実行結果
4.0
3.0
>>223のAreaの型を間違えた。
×public int Area
○public double Area
手元の本に、アクセサ使うより、プロパティ使った方が便利みたいなこと書いてあった。
たしかに、
obj.setFoo(obj.getFoo() + bar)
より
obj.Foo += bar
の方が便利だ。
>>222 俺ももともとJavaやってたけど、プロパティアクセサを
言語機能でサポートしてるのはJavaよりC#が明らかに優れている点だ。
もともとpublicフィールドなんて使わんし。
読み出しと書き込みのシンタクスや型を自動的に統一してくれるから
本来は不要なコーディングの手間が大幅に削減される。
俺はpublicフィールドはconst付きのものだけ扱ってる。
余談だが、MSDNではconst付きpublicフィールドも
パブリックプロパティとしてメンバリストに載ってるな。
>>227 そりゃconstならフィールドでもプロパティでも同じだからな。
タイプセーフなマクロ扱いだし。
C#でグローバルIP取得する方法ってある?
231 :
160:05/02/03 00:42:52
>>230 iphlp.dll
string[] str = myiphlp.GetGlobalAddress()
publicな書き換え可能なフィールドは絶対に作るな。メンテする人のことも考えてくれ。
せめて、propertyだったら互換性を維持したまま手を加える余地があるのに……
233 :
デフォルトの名無しさん:05/02/03 02:08:24
ListViewで複数アイテムのドラッグはどうすればできるんでしょう?
MouseDownからやると、1クリックの後に矩形の範囲選択が出てきてしまうんですが、
これを回避する方法って何かないでしょうか?
>>232 そのフィールド自体を、同じ名前のプロパティに書き換えればいいじゃんw
フィールドにできてプロパティにできない事って
unsafeコンテクスト内での&によるアドレス取得くらいのもんだろ
>>229 public constはできるだけ使わないで。
ILをみるとわかるがconstの場合コンパイル動作が埋め込みになるので
アセンブリのバージョンリダイレクトで不整合が発生したり問題あり。
>>234 静的にアクセスしているのだと問題ない場合も多いのだけども、
リフレクション時の動作も違う。例えばDataBinding系の処理で
publicフィールドとpublicプロパティはまったく違う動作をする。
簡単な実験は、ListBoxのDataMemberにpublicフィールドと
publicプロパティを指定してみればわかる。
結局のところコンポーネントの基本要素が
プロパティとイベントのみとして設計されているので、
どっちにしろpublicフィールドは作るべきでない。
getter/setterメソッドも同じ理由でだめ。
>>234 取り合えずそのDLLを参照しているアセンブリ全てリビルドが必要になる。
refやoutの引数として直接渡されてたりする。
リフレクションをくらって挙動が変わったりする。
publicなフィールドを宣言してる時点で他にもいろいろとまずいことやってる。
237 :
160:05/02/03 13:19:36
やはり、ここで質問するからには、
先行してどのサイトをCHKしたか示すべきなのでしょうか。
例えば、
「~がわかりません。
CHK済みサイト:httq://www.yahoo.ne.jp/
とか」
httqプロトコルにひどく興味を引かれるな。
>>237 CHKなんていう意味不明な略語(?)を使うのはやめましょう。
質問は平易な日本語(+正しい技術用語)で具体的に。
姉妹スレの↓もよろしく。
ふらっとC♯(Part5)
http://pc5.2ch.net/test/read.cgi/tech/1065196964/ >このスレッドは
>
>「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
>
>ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
>
>少しずつC#プログラマを名乗るものが現れました。みなさん一緒に勉強しましょう。
httq
CHK
w
CHK=中国香港韓国統合漢字コード
242 :
160:05/02/03 17:55:12
やべ、今までhttqって覚えてた・・・○rz...サンクスコ
243 :
160:05/02/03 17:55:51
>>241
そうそう、それだよ、それ。ないすFLW
そろそろカエレ
245 :
デフォルトの名無しさん:05/02/03 18:49:50
それだけじゃ答えようがないな。
エラーメッセージでぐぐってみたらどうだ。
247 :
デフォルトの名無しさん:05/02/03 19:41:42
#include <stdio.h>
main(){
printf("Hello!");
rewind(stdin); //追加行:標準入力を初期化する
getchar(); //追加行:1文字入力を待つ
return0;
}
実行すると
エラー E2206 sample2.c 6: 不正な文字 ' ' (0x8140)(関数 main )
エラー E2206 sample2.c 6: 不正な文字 ' ' (0x8140)(関数 main )
エラー E2206 sample2.c 6: 不正な文字 ' ' (0x8140)(関数 main )
エラー E2206 sample2.c 6: 不正な文字 ' ' (0x8140)(関数 main )
エラー E2206 sample2.c 6: 不正な文字 ' ' (0x8140)(関数 main )
エラー E2206 sample2.c 6: 不正な文字 ' ' (0x8140)(関数 main )
エラー E2206 sample2.c 6: 不正な文字 ' ' (0x8140)(関数 main )
エラー E2206 sample2.c 7: 不正な文字 ' ' (0x8140)(関数 main )
エラー E2206 sample2.c 7: 不正な文字 ' ' (0x8140)(関数 main )
エラー E2206 sample2.c 7: 不正な文字 ' ' (0x8140)(関数 main )
エラー E2206 sample2.c 7: 不正な文字 ' ' (0x8140)(関数 main )
エラー E2206 sample2.c 7: 不正な文字 ' ' (0x8140)(関数 main )
エラー E2206 sample2.c 7: 不正な文字 ' ' (0x8140)(関数 main )
エラー E2206 sample2.c 7: 不正な文字 ' ' (0x8140)(関数 main )
エラー E2451 sample2.c 7: 未定義のシンボル return0(関数 main )
警告 W8070 sample2.c 8: 関数は値を返すべき(関数 main )
*** 15 errors in Compile ***
と表示されてしまい、実行できません、ずーっとやり直していますが
何処がどう違うか解らないんです、ご教授お願い致します。
#include <stdio.h>
main(){
printf("Hello!");
rewind(stdin); //追加行:標準入力を初期化する
□□□□□getchar(); //追加行:1文字入力を待つ
return0;
}
250 :
デフォルトの名無しさん:05/02/03 19:52:00
ありがとうございました。
251 :
160:05/02/03 22:16:57
252 :
デフォルトの名無しさん:05/02/03 22:23:40
253 :
デフォルトの名無しさん:05/02/03 22:26:10
>231
iphlp.dllとは?MSのサイト(米)で検索しても出てこなかったんですが・・・
ぐぐったらWinsockの一部みたいな感じだとわかったんですが。
Interopなしではできないんでしょうか?
>>254 グローバルIPを取得する統一的な手法は、外部(確認くんとか)に問い合わせるしかないよ。
>>254 100% Pure .Netでやるには、これしか方法はない。
IPHostEntry entry = Dns.GetHostByName( Dns.GetHostName() );
foreach( IPAddress address in entry.AddressList )
{
byte[] addr = address.GetAddressBytes();
if ( addrがプライベートIPじゃない )
{
return address;
}
}
258 :
245:05/02/03 22:52:32
259 :
デフォルトの名無しさん:05/02/03 22:55:04
[DllImport("iphlpapi.dll", ExactSpelling=true)]
>>254 間違えた。
260 :
160:05/02/03 23:11:15
261 :
デフォルトの名無しさん:05/02/03 23:22:35
262 :
デフォルトの名無しさん:05/02/03 23:31:45
プライベートIPをググった結果
Class A ×1 10.0.0.0~10.255.255.255
Class B ×16 172.16.0.0~172.31.255.255
Class C ×256 192.168.0.0~192.168.255.255
が出てきたので、
>>257をもとにできました。
MFCでつくれたような
カスタムセーブファイルダイアログを作成にするにはどうすればよいでしょうか。
OpenFileDialog/SaveFileDialogを継承して作るのは無理そう。
.NETじゃかなり目に無理ぽ。
ですよねぇ
C++で作ったスタティックライブラリをC#で使えると思う?
そのためのMC++,C++/CLIだろうが
269 :
200:05/02/04 13:27:40
Ctrl+F7押しましたが表示されません。
Cntl = Ctrl ですよね?
270 :
160:05/02/04 17:59:56
>>269
F7おすと、コードがあらわれて
Cntoオスと、デザイナが現れて、
デザイナの詳細なバーチャルクラスは、
ソルートンウィンドウから、適宜探す。以上 がんがーら。
C#.NETでFrameWorkがインストールされてなくても動作するようにできないんかね?
272 :
デフォルトの名無しさん:05/02/05 01:07:15
>>271 できないよ。
利用者には、再頒布版を印すコしてもらえるようにお願いしてね。
AppSettingsReader って EXE ファイルからしか利用できないの
でしょうか?
DLL から .config を読み込ませようとしているのですが、
キーが見つからない、といってどうしても読み込んでくれません。
同じコード、同じ内容の .config で Exe ファイルから読み込めましたので
DLL の場合だと駄目なのかな、とおもいまして。
もし DLL では駄目な場合、DLL で外部の設定ファイルの扱いは
自分で XML を読み込むなり、独自に実装するしかないでしょうか?
アドバイスよろしくお願いします。
>>265,266
ファイル保存のダイアログで、保存するファイルの種類変えると、ファイル名にくっついてる拡張子
がその場で変更されるのって、ごく当たり前の処理だと思うんだけど、.NETのダイアログだとこれが
できなくない?
275 :
デフォルトの名無しさん:05/02/05 03:44:12
Terrarium でC#勉強しようと思うけど、
今でもできる?
276 :
デフォルトの名無しさん:05/02/05 17:53:08
277 :
デフォルトの名無しさん:05/02/05 21:23:11
printerDialog()等の
プリントに関して入門者向けのサイトご紹介賜りたく存じます。
microfostのサイトはすでにCHKしました。
またCHKか。
280 :
デフォルトの名無しさん:05/02/05 23:36:01
>>278
ばれたか・・・〇rz..=3
281 :
デフォルトの名無しさん:05/02/05 23:39:56
TabPageを継承したクラス(MyTabPage)を作ったんですが、
タブコントロールのプロパティ tabControl.SelectedTab は、
TabPage型しか返してくれず、
継承したクラスで追加した機能が使えず困ってます。
ヘタレな質問ですが、何かアドバイスをください。
イベントハンドラのメソッドの仮引数は大体(object sender, EventArgs e)だよね。
senderはToString以下5つぐらいしかメソッド・プロパティを扱えないから役に立たない?
それじゃイベントハンドラの共有もできないじゃないか。
このsenderはMenuItemだったりFormだったりForm1だったりTabPageだったりするんだから……
キャストすればいい。
void OnMenuItemClick( object sender, EventArgs e ) {
MenuItem mi = (MenuItem)sender;
// 以下略
}
>イベントハンドラの共有もできない
た、たしかに。。
senderをどうにか使えばいいのですね。
だほぁぁー。。VB6房の俺にはオブジェクト指向はムズすぎる・・。
>>283 うおー。
ありがとうゴザイマシタ。
これは色んなところで使いそうです。
あー。やっぱダメだぁ・・。
キャストする部分で例外がでてしまう・・。
もっと基礎的な部分から出直してきます。
すみませんでした。
C# で、ネットワーク上で稼働している SQL Server を探す方法があれば
その方法を教えてください。
アプリケーションを起動すると同時に立ち上げ、外部からメッセージを受け取る
ようなスレッドではwhileループを使わないほうがいいのでしょうか?
すぐにCPUが100%になり困り果てています。
Thread.Sleep(10)でもはさんどけば?
いやそれでも、負荷かけると100%まで速攻であがるし描画が止まってしまったし
応答無しになるのでコーディング悪いと思うのですがどうなんでしょうか?
291 :
デフォルトの名無しさん:05/02/06 01:12:23
初心者の質問で申し訳ありません。
C#で作ったプログラムをVectorなどで配布する場合は、.net frameworkも添付すべきなのでしょうか?
なんせ重いモノなので・・・使うDLLだけで良いのでしょうか?
あと、C#のプログラムをLinux上で動かすmonoというソフトを聴いたのですが、
実際、どのようなくらい互換性があるのでしょうか?
先輩方、どうかご教授宜しくお願い致します。
ソースコードのタブが、フォルダ別にソースを分けると、その階層パスまでついてタブ名が読みにくくなるんですが、
この設定って変える方法ありますか?
281のはtabControl.SelectedTabの帰り値の問題であって
senderやキャストでどうにかなることかな?
結論から言うと、”無理”でFA
SelectedTabがTabPageを継承したクラスTabPage1のインスタンスなら、TabPage1へのキャストは当然成功する。
……ひょっとして例をそのまま受け取った勘違い?
実はTabControl辺りのsenderをTabPage1にキャストしちゃった?
senderはあくまで見た目の型と実際の型は違う場合があるって例だったんだが……。
>>290 まさかとは思うが、メッセージのあるなしに関わらず
ループが動いてたりしないよな?
while( true )
{
if ( メッセージがある )
{
メッセージを処理;
}
}
こんなループだったら、利用率が100%になるのはアタリマエ
Thread.Sleepにわけのわからない数字を入れるより、
Monitor.WaitとMonitor.Pulseを使ってメッセージ処理を同期させろ。
>>286 senderがFormになっているとかいうオチは?
そうならFormのControlsから該当のコントロール引っ張り出すとか
色々方法はありそう。
ちなみに
if (sender is MenuItem) { MenuItem mi = (MenuItem) sender; }
とか
MenuItem mi = sender as MenuItem;
とかやっておけば例外出さずに済むかも。
ただし後者はsenderがMenuItemクラス(あるいはその派生)じゃなければ
nullが返るからチェックの手間が増えることがあることも注意。
キャストよりasのが高速なんじゃねーの?
必ずキャストできる事が分かってるなら変わらない。
キャストの正否を確かめるのはasが一番早い。
あるプログラムへのドラッグドロップと同等の処理を行うことって出来ますか?
例えばBSPlayerというソフトの再生リストを作ろうと思ったとき、このソフトはExe本体へのファイルドロップだと
再生に適応してくれないんですが、ウィンドウへのドロップだと再生してくれます。
GetProcessesByNameとか使ってみてるんですが、ウィンドウが前面に出るだけで再生が始まりません。
何か方法はないでしょうか。
302 :
デフォルトの名無しさん:05/02/06 10:52:04
簡単なファイル転送ソフトを作ってみたいのですが、UDPで送る場合、勿論ポートを空ける必要がありますよね?
ネットワークゲームなどをやる場合やMessengerなどもポートを空けないでファイルを送受信している訳ですが、
ポートを空けないでファイルのやりとりをする方法はあるのでしょうか?
もしくは、C#上からポートを空けることは可能でしょうか?
303 :
デフォルトの名無しさん:05/02/06 10:53:27
DrawStringで質問です。
ある文字列をある矩形に描いたとき、そのうちの一部の文字を色を変えて描画する際の位置はどのようにしたらいいんでしょうか?
いま下のようにして試してみたのdせうが、2ピクセルほど右に色つき文字がずれてしまいます。
FormatFlagあたりがくさいんでしょうか?
Graphics g = Graphics.FromImage(m_buffer);
g.FillRectangle(whBrsh, ClientRectangle);
SizeF size = g.MeasureString(sb.ToString(), font, 500);
Rectangle rect = new Rectangle(0, 0, (int)size.Width, (int)size.Height);
StringFormat format = new StringFormat();
//draw string
g.DrawRectangle(pen, rect);
g.DrawString(sb.ToString(), font, brbrsh, rect, format);
CharacterRange[] crArray = new CharacterRange[1];
for (int i = 0; i < sb.ToString().Length; i++)
{
crArray[0] = new CharacterRange(i, 1);
format.SetMeasurableCharacterRanges(crArray);
Region[] rgns = g.MeasureCharacterRanges(sb.ToString(), font, rect, format);
Rectangle crect = RectFToRect(rgns[0].GetBounds(g));
g.DrawRectangle(redpen, crect);
}
for (int i = 0; i < sb.ToString().Length; i++)
{
crArray[0] = new CharacterRange(i, 1);
format.SetMeasurableCharacterRanges(crArray);
Region[] rgns = g.MeasureCharacterRanges(sb.ToString(), font, rect, format);
Rectangle crect = RectFToRect(rgns[0].GetBounds(g));
g.DrawString(sb.ToString().Substring(i, 1), font, brushes[i % 3], crect, format);
}
Visual Studio.NET 2003 のソリューションエクスプローラから、
追加-新しい項目の追加-Windowsフォームとして、新しいフォームを
追加しようとすると、
'C:\Program Files\Microsoft Visual Studio.NET 2003\VC#\CSharpProjectItems\LocalProjectItems\..\CSharpAddWinFormWiz.vsz'ウィザードを実行できません。
と表示され追加できなくなってしまいました。
これを回避する方法を御存知の方、教えていただけないでしょうか?
306 :
デフォルトの名無しさん:05/02/06 13:06:00
>>305 5時間悩む前に、
3時間で2003を再インストしてください。m(_ _)m
307 :
デフォルトの名無しさん:05/02/06 14:36:26
フォームの表示画面のことについてお聞きしたいことがあります。
実現したいことは、スクロールバーのような機能をボタンに持たせる事です。
今、フォームに等間隔に3個の画像を配置しています。実際にフォームを表示
した時にはフォーム上には画像が1個だけ表示されていて、他の2個は見切れ
させている状態です。AutoScrollはfalseにしているので、スクロールバーは
表示させていません。このフォームにボタンを用意して、このボタンを押す度に、
スクロールバーをある程度移動させたのと同じといった効果を持たせたいのです。
が、これがどういった風にコードを記述したらいいのか分かりません。
実現方をご存知の方がいましたら教えてください。よろしくお願いします。
3個の画像とやらはどう表示させてるの?
3つのPictureBox?
ならボタンが押されるごとにそれぞれの座標をずらしていけば良いだけだけど。
こんなスレッド処理をMonitorクラスを利用してかスレッドプールを利用して
書き換えるとどうなるのですか?
private void ListenStart()
{
TcpListener listener = new TcpListener( IPAddress.Any, 10000);
listener.Start();
bAlive = true;
while( bAlive){
if( listener.Pending() == true){
TcpClient tcp = listener.AcceptTcpClient();
System.Diagnostics.Debug.Write( "接続!!");
}
Thread.Sleep( 100);
}
}
>>309 Pendingを使うのは、接続を待たずに何かやりたい場合だけ。
whileループを使って接続を待つのなら、Pendingなんか使わずに
AcceptTcpClientをひたすら実行してればいいだけ。
これなら、接続があるまでスレッドが止まるから、
CPUを無駄にまわさない。
アホですか?
>>308 Σ(゚Д゚ )その発想が自分にはなかったです。
ありがとうございます!!
>>302 デフォルトでポートは開いてるし、
閉じてるって事は他のファイアウォールソフトで閉じられてるって事なんだから、
利用者に***番ポートを開ける必要があるとお知らせすればいい。
閉じてるポートを勝手に開けられちゃたまらん。
313 :
デフォルトの名無しさん:05/02/06 18:40:09
>>312 あ、けど、実際私の環境だとポートはしまっているのですが、
ネトゲーなどは普通にできるんです。
どうなってるのかなぁって・・・
本当にすみません。
>>313 ポートは向こうからつないでくるのに必要でこちらから接続するには関係ないぞ。基本的に
>>314 必要だよ。起点を指定する必要がないというだけで
316 :
デフォルトの名無しさん:05/02/06 20:10:03
317 :
デフォルトの名無しさん:05/02/06 21:00:31
これはよい
゚・ 。 ・。
チャーハン! 。・゚・⌒)
チャーハン! _ _ o━ヽニニフ ))
(゚∀゚ )彡。・゚。・⌒)
⊂ o━ヽニニフ )
( ⌒) ≡=-
し'c ≡=-
スレですね
Windows.Forms で、
[STAThread]
static void Main()
{
TestForm c = new TestForm();
c.TopMost = true;
c.ShowDialog();
のように、アプリケーションのメイン エントリ ポイント?で
別の From を表示させようとしているのですが、
上記のようにした場合、フォーム自体は表示してくるのですが
そのフォームがアクティブになりません。
これをアクティブにするにはどうしたらよいでしょうか?
Main でわざわざ別のフォームを表示させるのは、アプリケーション起動時に
あるファイルの存在の有無を調べて存在しない場合、そのファイルを
作成するフォームを表示させたいからです。そのファイルが存在した場合
その画面の表示を行なわずに自分自身を起動してきたいからです。
よろしくお願いします。
質問です。
WebBrowserコントロールからPOSTされるデータを取得したいのですが、どうすればいいのでしょうか?
BeforeNavigate2イベントでe.postDataをstringにキャストしようとしたのですが、できませんでした。
>>320 ありがとう。
System.Byte[] bytesPostData = (System.Byte[])e.postData;
とすればいいんですよね?
この場合、bytesPostDataをstringにするにはどうすればいいんでしょうか?
>>318 私の所では普通にアクティブになるが、
まあVisibleChangedでSetForegroundWindowをしたらどうだ。
>>321 わるい。もしかしたら必要ないかも知れん。
家に帰ったら Socket.LocalEndPoint の Port に何が入るか調べてみるよ。
String resultStr =
SysSystem.Text.Encoding.GetEncoding(932).GetString(bytesPostData);
ってやれば任意のエンコーディングで文字列が取得できるからためしてちょ
932とかは文字コードの指定方式でたしか””で囲まれた方法で指定もできたはず。
がんばってみてちょ。
ところで、C++のアンマネージドにByte型の配列を渡す場合のサンプルって
どこかいいとこ知りませんか?
>>325 > ところで、C++のアンマネージドにByte型の配列を渡す場合
普通にbyte[]を渡してやれば良いんだが。
渡した先で書き換えられる場合は[In, Out]の2つの属性をつける。
>> 323
アクティブになりますか…。私の所では全面に表示されますがアクティブに
なりません orz.
SetForegroundWindow も考えましたが、呼び出し先の Form は
自身の Exe から呼ばれるので同一プロセスになりますよね?
どうやって SetForegroundWindow すればよいのでしょう?
すみませんがアドバイス頂けるとうれしいです。
[DllImport("comtest.dll")]
public static extern int receive(
IntPtr handle,
[MarshalAs(UnmanagedType.LPArray)] byte[] buffer ,
);
byte[] byteArray = new byteArray[1000];
receive(handle,buffer);
System.Text.Encoding.GetEncoding(932).GetString(byteArray);
これでいいみたいだけどfixedはかけたほうがいいのでしょうか?
>>327 普通に自身のハンドルをSetForegroundWindowする。
>>328 固定はマーシャラが上手い事やってくれるから別に要らない。
Out属性が無くてもbyte[]の内容が書き変わってる?
お,out必要でした。すんません。
>>329 むは、そういう事ですかー。とやってみようとしましたが、
static void Main()
{
の中で処理する必要があるのですが、this.Handle のように、
自身のハンドルを取得する事ができません。
何度もすみませんが、上記状態で自身のハンドルはどのように
取得すればよいのでしょうか? よろしくお願いします。
senderがあるじゃないか。
>> 331
c.Handle は気付きませんでした OTL
ばっちりできました。ありがとうございました。
メソッドをstaticにする場合としない場合の切り分けってなんかありますか?
変数だとstaticにする意味は分かるんですが・・・
例えば、インスタンス変数をstaticにした場合、
そいつのメソッドはどういう扱いになるんでしょう?
>>335 そのメソッドの内部で this を使用しないのなら、
そのメソッドは static になれる。
具体的には System.Math クラスなど。
FxCop を導入すれば機械的に調べることができる。
> static インスタンス変数のメソッド
基本的には、インスタンスの所在によって、
そのインタフェイスが変化することはない、と考えよ。
337 :
デフォルトの名無しさん:05/02/07 07:31:46
画面をキャプチャするにはどうしたらいいんでしょうか?
339 :
デフォルトの名無しさん:05/02/07 07:53:04
C#でプログラムを作っても直ぐに逆コンパイルされてしまう。・゚・(ノ∀`)・゚・。
なんか対策ないのでしょうか?
シリアルナンバーを入れるようにしたんですが、半日でシリアルが掲示板に晒されました・・・
341 :
デフォルトの名無しさん:05/02/07 08:24:41
>>340 あ、ソレは既に使っています。
ただ、製品版で暗号化までしないと余り意味がないんですよね・・・
製品版が商用利用可能なら製品版を購入しようかとも思っています。
一応、以前C++をかじったことがあるので出来ると云えばできるのですが、
他の部分をC#で作る為に、全体を難読化した方が手っ取り早いかなっと・・・
有り難う御座います。
>>341 既に使ってるのか。
俺は製品版使ったことがないからわらかないや。個人で買うには高すぎて買えし。
MSがVSに同じような機能をつけてくれればいいのに。
丸見えになるのは本当にどうにかならないものか。
>>341 友達のスーパーハッカーに頼めばこれぐらい朝飯前だぞwwwwww
ildasmで逆アセンブルする
↓
ILコードを読んでシリアルナンバー関連のコードを探す
↓
ちょこっと書き換える
↓
書き換えたILをコンパイルする
↓
(゚Д゚)ウマー
344 :
デフォルトの名無しさん:05/02/07 10:19:51
逆コンパイルしても意味不明になるように、複雑にするとかかな。
まぁ限度があるしパフォーマンスも落ちるだろうけど。
_
ミ∠_)
∧_∧/ \\
(,, ・∀/) | |
( つつ | |
Y /ノ 人
/ ) < >_∧∩
_/し' //. V`Д´)/
(_フ彡 / ←
>>343
>>325 ありがとうございます。
そのようにしてEUC-JPでエンコードされたページでテストしてみましたが、日本語が化けてしまいます。
(まだShift_JISなどではテストしていません)
対処法を教えてください。
>>346 >>325を読んだりテストしてみたりしている間に、ドキュメント等で
Encoding.GetEncoding の説明を見ようという気は全く起きなかった?
化けてるんじゃなくてURLエンコードされてるだけ。
ドキュメントのcharsetのEncoding (GetEncodingメソッドは文字列もOKだ) を使って
System.Web.HttpUtility.UrlDecodeしな。
>>348 いや、それはやりました。
>>347 UTF-8にしてもEUC-JPにしてもだめだったんだすけど。。。
その「やりました」ってコードをちょっと書いてみて?
>>351 System.Byte[] bytesPostData = (System.Byte[])e.postData;
string strData = System.Web.HttpUtility.UrlDecode(System.Text.Encoding.GetEncoding("EUC-JP").GetString(bytesPostData));
これです。
EUC-JPをSHIFT_JISやUTF-8にしてもだめでした。
(自動変数では豆腐に、シフトJISでファイルに書き込んだらに?になる)
byte[] bytes = (byte[])e.postData;
label1.Text = Encoding.ASCII.GetString(bytes);
label2.Text = HttpUtility.UrlDecode(bytes, Encoding.GetEncoding("shift-jis"));
あと
> ドキュメントのcharsetのEncoding (GetEncodingメソッドは文字列もOKだ) を使って
も。
>>353 >label2.Text = HttpUtility.UrlDecode(bytes, Encoding.GetEncoding("shift-jis"));
これは常にshift-jisでいいんですか?
飽くまで
> ドキュメントのcharsetのEncoding (GetEncodingメソッドは文字列もOKだ) を使って
は無視かよ。
357 :
341:05/02/07 19:32:02
あぁ・・・
やはり根本的解決法はないですか・・・
そうですね、折角VS2003なのでシリアル関係の部分だけC++で書いてみることにします。
本当に有り難う御座いました。
もう嫌だこんな質問者・・・
359 :
デフォルトの名無しさん:05/02/07 20:08:25
return CIMM.ImmRegisterWord(hKL, str1, buffers[0].Style, str2);
が、
Attempted to read or write protected memory. This is often an indication that other memory has been corrupted.
を返しました。
AccessViolationException
どうすればよいのでしょうか。
str[0]="34";
str[1]="復水器34";
>>359 buffers[0].Styleがあり得ない数字を指してるか、
既に登録済みか、
をまず疑うかな。
ところでCIMMってなに?
362 :
359:05/02/07 20:39:04
>>361
レスさんくす。
IMMは、すでに登録済みの単語でもばぐらずに重複登録を自動で回避できるように設計されているみたい。
styleがありえない数字・・・そんなことってあるんですか?
今まで、うまくいってたんだけど、急なことで、びびってます。
CIMMは、imm.dllAPIが有するメソッドや、それらメソッドを容易に利用できるstatic methodを含む自作クラスです。
すいません。また質問です。
>>356氏の方法というのはWebBrowserのcharsetを取得して
それをGetEncodingに渡して、UrlDecodeをするということでしょうか?
WebBrowserにそれらしきプロパティが見つからなかったもので。
364 :
デフォルトの名無しさん:05/02/07 20:50:23
>>365 ドキュメントというのは何を意味しているのでしょうか?
webBrowser1.Document
368 :
359:05/02/07 21:49:24
調査しました。
>>
>>359 >>buffers[0].Styleがあり得ない数字を指してるか、
>>既に登録済みか、
>>をまず疑うかな。
>>
buffers[0].Styleは正常値(名詞)
登録済みではない。
str1が"34"の時だけ、なぜかエラー
Attempted to read or write protected memory. This is often an indication that other memory has been corrupted
>>367 すいません。
Documentをどのようにすればいいんでしょうか?
370 :
359:05/02/07 21:58:24
>>339 いまさらだが。
シリアルナンバーのMD5ハッシュとかだけをコード埋め込みにして、
ユーザーの入力のハッシュ値と見比べればいいんでないかい?
372 :
デフォルトの名無しさん:05/02/07 22:02:37
373 :
359:05/02/07 22:03:40
>>370 うん、もうコーディングでどうこうできるエラーじゃないと思う。
せいぜい例外を捕まえてユーザにメッセージを出しとくぐらいだね。
//私の環境(IMEはATOK15)で同様の事をやっても例外は投げられないし。
>>371 ハッシュ演算部分をディスアセンブルすれば一目瞭然。
>>374 お前バカだろ。
ハッシュコードがわかったって、そのハッシュコードを生成できる
元のデータを知る方法はこの世に存在しないんだよ。
>>371 自分の入力した値が生成するMD5に埋め込みなおしておく。
完璧な解決法
・パスワードを埋め込むのではなく、パスワードのハッシュを埋め込む
・パスワードを比較するのではなく、パスワードのハッシュを比較する
・プログラムの.exeファイル自体のハッシュコードを記録しておき、
実行時に.exeファイルのハッシュコードを計算し、改竄されていたら実行しない
以上。
>>375 埋め込まれたハッシュを書き換えれば……。
>>376 やっぱアホだなお前。
改竄前提なら、C++で書いたってチートされて終わりですよ
>>378 そういうのを突き詰めていくと、難読化だって何の解決にもなってないんだがな。
ダイジェスト認証と、プログラム改竄チェックを組み合わせれば
難読化の必要すらない。
381 :
370:05/02/07 22:57:03
>>380 僕のソフトは、あらかじめ偽シリアルをネットにさりげなく流しておいて、
正規の手順で手に入れたシリアル以外を入力したと同時に、
あぼーんするように配布してるよ。
今のところ、表立った苦情はない。あたりまえか・・・w。
ロジックボムはマジやめとけ
384 :
370:05/02/07 23:38:56
あぼーん、といいつつも、軽微な罰則だよ。
マイドキュのファイル焼失とか、そのくらい。
すんまそん
google Deskbarみたいにタスクバーにアプリを埋め込みたいんですが可能ですか?
ぐぐったんですけど見つけられません
タスクトレイばかり引っかかってしまいます
ヒントをキボンヌ orz
386 :
370:05/02/07 23:44:37
RichTextBoxのSelect()メソッドを走らせて、文字列の範囲を選択すると
範囲が色突きで反転すると思いますが、あれを不要なので無効化したいのですが
SendMessage(richTextBox1.handle, EM_SETSEL, -1, -1)とやっても
色が変わってしまった困ってるのですがうまい方法ご存知ないでしょうか?
最後にもう1つ、<aaa>test</aaa>という文字列をRegexをしようして
string[0] = "<aaa>" string[1] = "test" string[2] = "</aaa>"
という風に分割することのできる正規表現を教えてくれませんか?Perlの正規
表現でやると括弧がとれたはちゃめちゃな産物ができて困っています。
390 :
デフォルトの名無しさん:05/02/08 00:42:46
アセンブリに埋め込んだリソースの使用について質問です。
現在ProjectAから、ProjectDLLで作ったDLLを使用するとして、
DLL側でProjectDLL自身のアセンブリのリソースを使用したいです。
System.Reflection.Assembly assembly = System.Reflection.Assembly.GetEntryAssembly();
System.IO.Stream stream;
stream = assembly.GetManifestResourceStream("ProjectDLL.hoge.txt");
このようなコードなのですが、間違いないでしょうか?
リソースにしたいファイルは「埋め込まれたりソース」にしております。
しかし、いつもNullが返って来る状態です。
DLLにしてしまうとデバッグなどが大変でして・・・どうかご教授ください。
>>389 君の文章が一番はちゃめちゃだな。
> 範囲が色突きで反転すると思いますが、あれを不要なので無効化したいのですが
要するに選択範囲をなくすって事? Cutメソッドを使っても実際にはカットしない状態にしたいと?
ならSelectionLength = 0;だが。
> 最後にもう1つ、<aaa>test</aaa>という文字列をRegexをしようして
なんとなく.NET Frameworkにおける正規表現ライブラリの使い方を分かってないような気がするが……。
System.Text.RegularExpressions.Match match = System.Text.RegularExpressions.Regex.Match("<aaa>test</aaa>", "(<[^>]+>)([^<]+)(</[^>]+>)");
// match.Groups[0].Value == "<aaa>test</aaa>"
// match.Groups[1].Value == "<aaa>"
// match.Groups[2].Value == "test"
// match.Groups[3].Value == "</aaa>"
391さんありがとうございます。しかし、
this.richTextBox1.SelectAll();
this.richTextBox1.SelectionColor = Color.Black;
this.richTextBox1.SelectionLength = 0;
これなんてやるとピカピカ光ってちらつく以上のすごいものが見れてしまいます。
WM_PAINTで抑制すれば収集つくでしょうか?ResumeLayout SuspendLayout
を使用しましたが無意味なようでした。
>>390 リソースはアセンブリに埋め込むモノってのは当然だよね?
アセンブリとは要するに.exeまたは.dllである、と言うのも分かるよね?
> System.Reflection.Assembly assembly = System.Reflection.Assembly.GetEntryAssembly();
エントリポイントがあるアセンブリを取得してるって事は、
実行時にエントリポイントとなるMainメソッドを含むアセンブリを取得するって事で、
通常プロセスを開始した.exeのアセンブリを指すよね?
リソースを持ってる、.dllのアセンブリを取得しないといけないのに。
typeof(*.dllで定義してる何らかのクラス*).Assemblyとやると.dllのAssemblyインスタンスを簡単に取得できる。
> stream = assembly.GetManifestResourceStream("ProjectDLL.hoge.txt");
ProjectDLLってのは、さてどこから出てきたのかな?
名前空間がって言ったって、一つのアセンブリ、一つのファイルに複数の名前空間を持たせる事もできるよ?
リソースファイルの名前が実際にProjectDLL.hoge.txtだったら正しいけれど、多分単にhoge.txtでしょ。
GetManifestResourceStreamメソッドの解説に
> type の完全名が "MyNameSpace.MyClasses" で、name が "Net" の場合、
> GetManifestResourceStream は、MyNameSpace.Net という名前のリソースを検索します。
って書いてるけど、オーバーロードを良く読むとこれはGetManifestResourceStream(Type, string)限定の解説なんだよね。
>>393 ありがとうございます。リソースを取得することができました(^^;
ファイル名は単にhoge.txtですね。
ちなみにProjectDLLはプロジェクト名です。
いろいろ検索して探していたら、リソースの取得は
stream = assembly.GetManifestResourceStream("<プロジェクト名>.<ファイル名>");
で行うと書いてあったので、そちらを参考にしていました。
まだまだAssemblyあたりになると弱いですね。。。
最後の文章が理解できなかったり(^^;
ヘルプをもうちょっと見てみたいと思います。ありがとうございました。
はぁ?
>>336 レスありです!
> そのメソッドの内部で this を使用しないのなら、
> そのメソッドは static になれる。
言い変えれば、thisを使用しないのなら
staticにすべき、ってこと?
それともしたければしてもいいよ、ってこと?
> FxCop を導入すれば機械的に調べることができる。
ほぉ。ちと試してみます。
> 基本的には、インスタンスの所在によって、
> そのインタフェイスが変化することはない、と考えよ。
すいません、書き方が悪かったです。
知りたかったのは、インスタンスをstaticにして呼び出したメソッドは
static扱いになってしまうのでしょうか?
共通部品の中で、あるクラスのインスタンスを(private)staticで定義してまして、
そのインスタンスのメンバを呼んで処理を行うメソッドを実装してるんですが、
そのメソッドを別々な画面から同時に呼ぶとどうなるのかな、と思いまして。
分かり難くくてすいません。。
398 :
デフォルトの名無しさん:05/02/08 10:06:36
staticメソッドはステートレスなものにたいして使用
thisを使わないからstaticにするものではない(staticにすることはできる)
インスタンスがstatictoメソッドのstaticは別物です。
>別々な画面から同時に呼ぶと
おそらく"同時に"は呼んでません。同時かどうかはスレッドの問題だし
複数の場所からというならそれはstaticなインスタンスが複数の場所から扱われるので片一方の変更が影響するということです
class NankaKurasu{
class StaticNaKurasu{
static int s_value;
int m_value;
static void ChangeValue(){s_value++}
public void ChangeValue(){m_value++;}}
static StaticNaKurasu s_staticKurasu=ne=new StaticNaKurasu();
void main(){
StaticNaKurass stackStaticKurasu=new StaticNaKurasu();
s_staticKurasu.ChangeValue();
stackStatickKurasu.ChangeValue();
}
void HokanoMethod(){
StaticNaKurass stackStaticKurasu=new StaticNaKurasu();
s_staticKurasu.ChangeValue();
stackStatickKurasu.ChangeValue();
}
}
でおのおの値見て見れ。コンパイルと押してないので動くか知らん。
399 :
デフォルトの名無しさん:05/02/08 10:07:43
static public void ChangeValue(){s_value++}
二変更
400様!!
みなさんありがとうございました。
>>367 できました!
mshtml.HTMLDocument myDocument = (mshtml.HTMLDocument)axBrowser.Document;
strCharset = myDocument.charset;
ということだったんですね!
本当にありがとうございました(゚∀゚)!
>>397 一応、補足しておくと…
ここでいう this とは、例えばインスタンスフィールドへのアクセスを含みます。
class Item
{
private int value;
public void Hoge()
{
value = 100; // this.value = 100; と同義。
}
}
上記 Hoge() メソッドは static には成り得ない。
static メソッドは this にはアクセスできないため。
(Hoge() はステートを持つ。)
「this にアクセスしないのであれば、
それは(実装・設計の両面から見て)静的メソッドであるはずだ」という発想。
インスタンスが static フィールドであったとしても、
その(非 static)メソッドは、やはり自身へのアクセスを持ち続けるので、
「static 扱い」とはいえない。
メソッド(の呼び出し)はインスタンスの状態を変更する“可能性”がある。
クラスの使用者から見て、メソッドが static であるか否かは重要な意味を持つので注意。
404 :
デフォルトの名無しさん:05/02/08 21:20:05
非常に初歩的かもしれない質問で申し訳ないのですが、
普段は画面右下のところに駐屯していて、設定したキーを押すとフォームが現れて色々操作
するってのを作りたいのですが、
他のソフトなどを操作している時でも、プログラムがキー操作を受け取ることは可能なのでしょうか?
>>404 特殊キーは可能でふ、Windowsとかアプリケーションキーとか
のコンビネーションか、若しくは、デスクトップでのイベント
> 普段は画面右下のところに駐屯していて、
駐屯じゃなくて常駐。
画面右下(というかタスクバーの端)のアイコン群部分はタスクトレイ。
キー入力を受け取るのは無理。
Win32APIのRegisterHotKeyでホットキーを登録する必要がある。
408 :
404エラーw:05/02/08 21:24:25
>>405-406 即レス激しくThx!
例えば、Shift+Ctr+Tとかって可能ですか?
409 :
404エラーw:05/02/08 21:25:39
>>407氏もThx!
キー入力を受け付けるのは無理なんですか?
世の中にはキーロガーみたいなものがあるので、意外に簡単にできるものかとおもってました。
まあキーロガーは.NETでは無理だけどな。
412 :
デフォルトの名無しさん:05/02/08 21:42:42
413 :
404エラーw:05/02/08 22:02:06
>>410-411 え~っと、結局どうなんでしょう?
キーロガーみたいに入力されたキーを監視していて、例えば指定されたキーが押されたら
ソフトを起動するとか、そういうことも無理ではない気がするのですが・・・
特に.netでは無理というのが非常に気になります。
Windowsサービスにして、OS起動時に起動させりゃいいような。
何を難しがってんだ?
SetWindowsHookEx(WH_KEYBOARD_LL)
UnHookWindowsHookEx()
で終わりじゃんか。
GUIについて質問です。
ListViewにアイコンを複数表示したり、ボタンを入れたりってことは無理でしょうか?
ListView純正でできなかったとして、ListViewを継承して自力でなんとかするというのは無理なんでしょうか?
417 :
デフォルトの名無しさん:05/02/08 23:34:14
>>417 C#でもdelegateでWindowProcが書けるから実はサブクラス化なんかもできるんだけど、
んでも
>>416が言うように簡単にはできないなぁ。
普通のUserControlとして自前で実装した方が何かと楽だと思う。
419 :
デフォルトの名無しさん:05/02/08 23:45:54
>>C#でもdelegateでWindowProcが書けるから実はサブクラス化
詳しく教えていただきたい。
普通にやるとGCでアドレス換わるみたく
うまくいきませんでした。
WndProcのOverrideとかじゃなく気楽にサブクラス化したい
>>419 特に特別なことはしてません。
delegate自体への参照を保持していなくて、開放されちゃったりしいませんか?
MyWin32ApiHelper.SetWindowLongAsWndProc(hWnd, GWL_WNDPROC, new delegate hoge( foo.bar ) ); とかして。
TextBoxやRichTextBoxで
aaaaaaa
bbbbb
cccc
などとあった場合、描画された最後の文字がWndow左端から数えて何ピクセル目
もしくは(x,y)座標を知るようなことができるのでしょうか?
レスありがとうございま。
>>398 やはり「片一方の変更が影響する」ということですね。
>>402 >「this にアクセスしないのであれば、
>それは(実装・設計の両面から見て)静的メソッドであるはずだ」という発想。
なんかすげー分かったような気がします!なるほど~
HSPのHMemory.dllみたいにプロセスのメモリを操作したいんです
C#ではどうやるんですか教えて偉い人
>>415 .NETじゃグローバルフックは無理なのよ。
427 :
デフォルトの名無しさん:05/02/09 05:19:46
>>428 無理だよ。
常にフックできるのはグローバルフックのみ。
.NETで出来るのはスレッドフックのみ。
その例のマウスフックだって、自身のウィンドウ上にカーソルが来てる時しか監視できない。
WH_KEYBOARDなら自身のウィンドウがアクティブな時だけ。
ついでにWH_KEYBOARD_LLはグローバルフック専用。
フックDLLをC++で作ってプロセス間通信
まあ頑張れ。
432 :
デフォルトの名無しさん:05/02/09 10:15:53
>>86さんと同じ質問です。
>>88さんが、やらない方がいいと仰っていますが、レジストリ以外でアプリケーションの設定を保存するには、
iniファイルで保存するという見解で良いのでしょうか?
よろしくお願いします。
XmlSerializerやSoapFormatterでシリアライズというのも一案。
私は読み込みは動的プロパティで、書き込みはその XML に 書き込みをしています。
やっちゃいけないんだろうか…。特に問題はおきてないんですが…。
画面の座標や大きさといった状態を保存する目的なら分離ストレージを使います。
ユーザー毎に設定できる上にレジストリも汚れないので重宝してます。
xxx.exe.configは動作環境の定義+簡易リソース的なファイルだから、
アプリで書き出すと必要な情報を壊してしまいそうで怖いです。
>>435 そうすると今度は単純なXCOPYで環境の移行ができなくなる罠。
>>436 だから「画面の座標や大きさといった状態」といったのですよ。
移行の時は持っていかないのが原則。
そうする必要のあるデータは独自にxmlなどのファイルを作るということで。
438 :
デフォルトの名無しさん:05/02/09 14:36:47
listviewのFocusedItem.BeginEdit()は左端のアイテムしか編集できませんが、2列目も
同じく編集するにはどうしたらいいのですか?
ListViewじゃ無理。
自分で組み込む、例えばEditコントロールとか
SharpZipLib って、別アセンブリから使用するだけだと GPL 感染しないよね?
ってことは同人ゲーとして売っても良いの?
DateTimePicker にてカレンダーを表示する↓のボタンをマウスでクリックして
カレンダーを表示させたあと、別のコントロールをマウスでクリックして
そのコントロールへフォーカスを移動します。
その後、TAB キーで先程の DateTimePicker へフォーカスを移動すると
2005/02/09 の部分にフォーカスが移動せず、どうやら ↓ボタンが
フォーカスを取得しているようです(F4でカレンダーが表示しましたので)
DateTimePicker の yyyy の部分にフォーカスをあてる方法があれば
教えてください。
何か壮大な勘違いしている人が多いように思えたが
オブジェクト指向を使用している以上、出来ることはリファレンスに全て書いてある
逆に言うと、リファレンスに書いていないことは出来ない
「これこれこんな裏業を使えばできます」っていう答えを期待しているのかも試練が、
そんなものあったとしてもロクなもんじゃない
>>442 DateTimePicker に該当機能が無ければ、自分で自作したほうが早いっスよ
その書き方だとオブジェクト指向を誤解している気がする
オブジェクト指向と何か関係あるのか?
>オブジェクト指向を使用している以上、出来ることはリファレンスに全て書いてある
この意味がわかりませんが。
C#=オブジェクト指向
M$はそんなこと考えていないよ、
オブジェクトとか関係ないw
C#のViewの描画は、現在表示されている領域外のデータもすべて描画しているの
でしょうか?Paintメソッドの中身やUnManagedMethodの呼び出し部分を見ましたが
どうにもそのような機構になってないように思います。
1Mのデータを読み込み、可視範囲のみを描画するRichTextExを自作している
のですが、この辺りの情報について詳しい方いらっしゃいませんか?
次はGraphics.Clipプロパティだな。
C#というかWindowsの描画の問題だが。
>>449 意味がよくわかりませんが、”すべてを描画しないで必要な部分だけ描画するようにする必要があり”ます。
450さんありがとう。どうにも今までDB専業だったもので描画など
考えたことも無かったため全然閃かなくて助かります。
>>452 そこらへんはC#によるプログラミングウィンドウズに詳しい描画関係はほぼ網羅されてマフ
ref付けて関数の引数として渡すとき、明示的にクラスの変換をしたいんですが、文法はどうすればいいんでしょう?
意味が分からない。
class A {}
class B : A {}
void C(ref A) {}
B b = new B();
A a = (A)b;
C(ref a);
ということ?
スーパークラスなら無問題だが?
class A:TreeView{}
void moge( ref tree ){}
これです。
ツリービュー自体を渡すときに(TreeView)と付けて明示的にする必要があるんですが、
ref(TreeView) とかじゃエラーになるんです。
やっぱりobjectとかからの変換になるんでしょうか。
相変わらず意味不明だな。
> void moge( ref tree ){}
メソッド定義が変(引数の型が不明)だが、void moge(ref TreeView tree) {} でいいのかね。
> ツリービュー自体を渡すときに(TreeView)と付けて明示的にする必要があるんですが、
ツリービュー自体ってなに?
> ref(TreeView) とかじゃエラーになるんです。
A a = new A();
moge(ref (TreeView)a);
でエラーになるって事?
で、結局
>>455じゃん?
>>456 こっちで解決できました。
ありがとうございました。
>>455 こっちも考えたんですが、何か他の文法があるんじゃないかと思って。
というか this にrefつけられなかったんですね・・・しらなんだ。
Microsoft Speech APIを使ったサンプルコードがありましたら紹介お願いします。
>>461 さっそくありがとうございます。
しかし、、、それはMicrosoft Agent APIのサンプルみたいですね。
Office製品に出てくるあのうざいマスコットどもを呼べるAPIらしいです。
それのSpeakメソッド内でSpeech APIが使われているみたいですが
Speech APIそのもののサンプルコードではないようです。
SpeechSDK5.1をインストール後、サンプルソース集の中にC#のもありました。
Microsoft Speech Object Libraryに参照を通せば後は
SpeechVoiceSpeakFlags SpFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync;
SpVoice Voice = new SpVoice();
Voice.Speak("hello", SpFlags);
これだけで動作するというあっさりとしたものでした。
ということで事後報告。
動的プロパティの新規作成・更新ってどうやるんでしょうか?
もしかしてXMLファイルとして自分で作るとか?
465 :
デフォルトの名無しさん:05/02/10 22:05:25
VisualStudio2003にて
さっきまで編集できていたフォームなのに、いつのまにか
,「'Location'の宣言が重複してます」とか「'Size'の宣言が重複してます」などのメッセージが表示され
デザイナ上で配置されていたコントロールがほとんど表示されないようになってしまった。
という症状の対処法を知ってる人はいないでしょうか?
RichTextやTextBoxなどで、this.CreateGraphics()とやって新しい描画
領域を作成し、そこに何らかの処理を描画したあと更新が必要でないので
さきほど作ったGraphicを流用し描画を行うということはできないのでしょうか?
描画毎にGraphicsを作成するのを止めたいです。
>>466 一般的にはBitmap作って保持するわけだけれども、RichTextやTextBox相手に
それやるのは正直全くお勧めしません。
諦めたほうがいいのかなぁうーむ。5000行近くで重くなるのはちと
勘弁してほしいんだが何かいい方法は無いものだろうかな
469 :
370:05/02/11 00:47:30
>>465 いいか、よく聞いてくれ。
そのバグは、なおらない。
2時間悩むなら、30分で新規ウィザード。
4時間後に適切なレスついて、5分で直すより、
いますぐ、新規ウィザード。
くやしいが、有効な手立てはない。
バックアップとってるなら、それをつかえ。以上
(僕も被害者、これが一番の解決法)
そういやイベントプロシージャが
勝手に削除されるとかって言う現象には
遭遇したことがあるな。
アプリケーションが起動した状態でさらに引数を与えられて起動しようとしたときに、
二重起動を抑制して起動状態のアプリで引数を取得する方法のようなものはありますか?
二重起動自体はミューテックスで抑制する方法はわかるのだけど、
引数をどうにかして取得したい。
Mutexでチェックする時点で引数見れば(・∀・)イイ!!やん
>>471 WORDの文書をクリックした場合にWORDが既に立ち上がってれば同じインスタンスで
文書が開く、といったことを実現したいということですよね?
あれはDDEとシェル登録機能を使ってるんだけど.NETじゃサポートしてなかったような。
あと使えそうなプロセス間通信手段は.NETリモート処理ですがポートをひとつ消費して
しまうのが難点です。
>> 464
自分で XML を更新するしか方法はないと思います。私はそうやっています。
>>465 それって継承フォームや継承コントロールを使うとよく起きませんか?
コンストラクタやLoadイベントでいろいろな関数を呼んでると起きる感じで
いくつかコメントにしてリビルドすると治ることがあります。
>>473 > あと使えそうなプロセス間通信手段は.NETリモート処理ですがポートをひとつ消費して
> しまうのが難点です。
プライベートに使えるポートが16383個ほどあるのに、それでも一つ使うのがイヤですかそうですか。
this.SetStyle(ControlStyles.UserPaint, true);
これを適用し、OnPaintBackground、OnPaintをオーバライドしたとき
baseのメソッド呼び出しただけでは、画面がまっしろになってしまいます。
他に何か書かなければいけないのでしょうか?TextBoxでそうなってしまいます
PanelやFormならわかるがなぜTextBoxでUserPaintの必要があるのかわからない。
480 :
デフォルトの名無しさん:05/02/11 14:01:48
神さま仏さま!
C#で簡易SMTPサーバーを作ってそこからメール送信ってことは可能でしょうか?
つまり自分のPC自体をSMTPサーバーにするというヤツです。
ソフトに自分へのメールを送る機能を付けたいのですが、C#だとソースを読まれる可能性が高くて
自分のSMTPサーバーを使うのは少し気がひけるので・・・
要は、C#でSMTPサーバーを立てるDLLかなにかありましたら御紹介頂きたいのです・・・
(前置きが長くて申し訳ありませぬ!
>>480がなぜC#にこだわってるのかサッパリわからん。
「可能か」と言われれば、他の言語でできる事で、C#でだけ不可能な事なんか
1つもないと答えるしかない。
>>480 自前のソフトにSMTP鯖機能なんかつけても、すぐに役に立たなくなるからやめとけば?
Outbound Port25 Blockingがあちこちのプロバイダで導入されつつあるよ。
C#と関係無い話でスマソ。
というか、悪徳スパム業者が逮捕されたときにほう助罪で逮捕される。
そんなことを心配すべきだと思う今日この頃。
>>自分のSMTPサーバーを使うのは少し気がひけるので・・・
??
>>480 おまえ C# の前は HSP 使ってただろ
質問の仕方がソックリだ
486 :
480:05/02/11 18:33:39
一応、自力では無理なんで他力本願、簡易SMTPサーバーのソースを引っ張ってきて
作ることができました。
確かに
>>482さんの云うように使えないプロバイダもありますね。
友人に試して貰ったら、niftyは使えましたがOCNは無理でした。
>>484 自宅サーバーがあるので、そっちのサーバーを使えば簡単なんですが
(むしろHPにCGIに直接の方が・・・w)、C#はソースを見られるので
悪用されるかと少し心配でした。
>>486 C#の前はVB6.0でした、
HSPってもの自体知りません。
それにしてもOutbound Port25 Blocking・・・
恨めしいです。
サーバーがどんな言語で作られたってわかるの?
サーバーがどんなOSの元で動いてるのかは分かるかもしれないが。
意味不明
488 :
480:05/02/11 19:20:22
telnet remotehost 25
それなら、c++でやれば良いじゃん。
言語にこだわるのはナンセンス
だれ?
492 :
480:05/02/11 19:34:37
>>490 一応、C#の勉強にもしたかったので・・・
まぁ結局C++で書いてしまったわけですがw
c++でそこまでできるんなら、c#だって簡単だべ?.NETライブラリ
読むだけだし。意味不明。
質問です。
http://www.gotdotnet.com/japan/student/column/firststep/firststep21.aspx これを参考にタブブラウザもどきのものを作っているのですが、
this.SuspendLayout();
System.Windows.Forms.TabPage tabPage = new System.Windows.Forms.TabPage();
AxSHDocVw.AxWebBrowser axWebBrowser = new AxSHDocVw.AxWebBrowser();
axWebBrowser.BeginInit();
axWebBrowser.Dock = System.Windows.Forms.DockStyle.Fill;
axWebBrowser.EndInit();
tabPage.Controls.Add(axWebBrowser);
this.currentTabPage = tabPage;
this.currentWebBrowser = axWebBrowser;
object URIbuf = (object)strURI;
object o = null;
axWebBrowser.Navigate2(ref URIbuf,ref o,ref o,ref o,ref o);
this.ResumeLayout();
とすると、axWebBrowser.Navigate2(ref URIbuf,ref o,ref o,ref o,ref o);の部分で、
InvalidActiveXStateExceptionの例外が発生します。
なにがいけないのでしょうか?
最終的にFormのControlsに入ってないとダメ。
その例ならtabPageをTabControlのTabPagesに入れて、そのTabControlをFormのControlsに入れてからでないと。
配列の定数ってどうすれば宣言できますか?
int[] list = {1,3,5,7,9,11};
と動的に宣言することはできますが、static constを付けるとエラーになります。
static int[] const list = {1,3,5,7,9,11};
>>497 これ定数の配列じゃないか?
static readonly int[] list = {1,3,5,7,9,11};
thx これで就職できるよ
501 :
デフォルトの名無しさん:05/02/11 22:07:32
WindowsAppliで、
ネットワークに接続されたプリンタを利用する方法を教えてください。
Webアプリケーションではなくて。
503 :
デフォルトの名無しさん:05/02/11 22:19:28
以下のようなコードを実行した場合エラーが出ます。
System.IO.FileStream FS = new System.IO.FileStream(@"画像ぱす",System.IO.FileMode.Open, System.IO.FileAccess.Read);
this.pictureBox1.Image = System.Drawing.Image.FromStream(FS);
FS.Close();
this.pictureBox1.Image.Save(@"画像ぱす");
'System.Runtime.InteropServices.ExternalException' のハンドルされていない例外が system.drawing.dll で発生しました。
追加情報 : GDI+ で一般的なエラーが発生しました。
ハンドルされていない例外 : System.Runtime.InteropServices.ExternalException: GDI+ で一般的なエラーが発生しました。
at System.Drawing.Image.Save(String filename, ImageCodecInfo encoder, EncoderParameters encoderParams)
at System.Drawing.Image.Save(String filename, ImageFormat format)
at System.Drawing.Image.Save(String filename)
・
・
・
ずっと悩んでいます。
回避方法は無いものでしょうか。
宜しくお願いします。
504 :
デフォルトの名無しさん:05/02/11 22:22:46
>>503 FS.Close(); // これ入れちゃ駄目なような気がする
くだらない質問ですが教えてくだちゃい
エクセルライクな家計簿ソフトを作ってみようかと思っとるんですが、
この場合セルってどうやって作ればいいんですかね
DataGridってやつ?それとも、テキストボックスを格子で区切るような
ことができるんでしょーか?
誠に申し訳ない。
別のアプリケーションを終了するにはどうすれば・・・
自分で起動したアプリケーションを終了させるのはできるのですが・・・
つД`) タスケレ !!
あのさー、
あるフォームにクリックイベントハンドラを登録して、
そこに処理を書くのと、
フォームのOnClickイベントをオーバーライドして、
そこに処理を書くのと、
どこが違うんでございましょうか?
Clickイベントはpublic、OnClickはprotected、Formは継承して使うことが多いけど、
Form上のコントロールだと継承することが少ないから外部から使えるのはありがたい。
あとイベントは複数のハンドラを登録できるのが特徴かな。
>>508 仮想kんすうとで利ゲート。まったく異なる
511 :
デフォルトの名無しさん:05/02/12 09:47:48
private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
if(e.KeyChar==(char)Keys.Enter){button1_Click(sender,e);}
}
テキストボックスに入力した後Enterを押すとビープ音が出るんですが、これを鳴らさないように
するにはどうしたらいいのですか?
e.Handled = true;
でいけるんじゃなかったっけ。
>>495 そういうことだったんですか!
ありがとうございました!
>>509-510 なるほど。ありがとうございました。
それらをどう使い分けるかは自分でかんがえてみます。
515 :
503:05/02/12 17:30:44
>>504 アドバイスありがとうございます。
System.IO.FileStream FS = new System.IO.FileStream(@"画像ぱす",System.IO.FileMode.Open, System.IO.FileAccess.Read);
this.pictureBox1.Image = System.Drawing.Image.FromStream(FS);
//FS.Close();
this.pictureBox1.Image.Save(@"画像ぱす");
でも駄目ですた。
なんでだなんでだろう
>>515 ちがうパス名ならうまく行くんで、オブジェクトがファイルを
掴んだまんまなんだね。
別のファイルにセーブ、ってのじゃダメなのかね?
unsage コード内限定の話ですが、Windows 上で動かす限りリトルエンディアンとみなして OK ですか?
unsage ってなんだよ unsafe だよ orz
unsage=age か?
>>517 確実を期すならBitConverter.IsLittleEndian静的フィールドでチェックだ。
がまあ、リトルエンディアンでいいだろうなぁ。
System.IO.FileStream FS = new System.IO.FileStream(@"サンプル.bmp",System.IO.FileMode.Open, System.IO.FileAccess.ReadWrite);
this.pictureBox1.Image = System.Drawing.Image.FromStream(FS);
this.pictureBox1.Image.Save(FS,System.Drawing.Imaging.ImageFormat.Bmp);
これじゃだめか意図が違うって?
>>515 一度 FileStream から MemoryStream に転送し、そこから Image.FromStream というのはどうだろう
コレならば最初の FileStream は閉じられるし
unsage推奨スレ
524 :
デフォルトの名無しさん:05/02/12 23:06:15
C#でクラスの継承を使うとVS2003のデバッグで
クラス内のブレークポイントで止まってくれません。
どうすればクラス内のブレークポイントで止める事が出来ますか?
>>524 Release ビルドで実行してるとか言うオチじゃねぇだろうな。
もしくは、クラス内ってのは、
class AAA
{
static int hoge = 0; // ← こことか?
}
確認面倒だからやってないけど、これは止まらない気も。
初期化コードは static コンストラクタの中にでも書け。
526 :
503:05/02/13 00:08:25
>>516 >>521 >>522 皆さんのご意見を参考にしたら上手く行きました。
どうもありがとうございました。
↓こうなりました。
System.IO.FileStream FS = new System.IO.FileStream(@"画像ぱす",System.IO.FileMode.Open, System.IO.FileAccess.Read);
byte[] BT = new byte[FS.Length];
FS.Read(BT,0,BT.Length);
FS.Close();
System.IO.MemoryStream MS = new System.IO.MemoryStream(BT);
this.pictureBox1.Image = System.Drawing.Image.FromStream(MS);
this.pictureBox1.Image.Save(@"画像ぱす");
MS.Close();
RichTextBox.Rtfに1M以上のデータ食わすとレスポンスが尋常じゃないほど
遅いのですが、このような場合どのようにすれば高速化できるのでしょうか?
今のところ1Mで100秒ぐらいかかり使い物になりません。
528 :
デフォルトの名無しさん:05/02/13 01:20:40
型指定されたDataSetから、DBにそれに対応するようなデータベースもしくは
テーブルを作成するようなメソッド、もしくはCreateTableを行うSQLを出力する
などの機能はないんでしょうか?
コントロール自体をバイナリ等で保存する事って出来ますか?
GraphicsPathとGraphicsPathの重なりを検出することはできますか?
またGraphicsPathをMergeすることはできますか?丸と丸が少し重なっていたら雪だるまのようなpathになってほしい。
>>527 環境にもよるけど100秒はかかりすぎ。こちらの環境では、Wordpadで作った1.7Mの
rtf形式ファイルをPentiumII級のマシンで読み込むのに8秒くらい。
Wordpadで読んでも時間がかかりますか?
質問なんですが、
C#って.Net Framework入ってないと動かないんでしょうか?
普通のC、C++のようにランタイムに左右されず単体で動く
exeを作りたいんですが可能でしょうか?
C# が動くというのもまた珍妙な表現だな
下らんレスならいらないんですが・・・・
下らんなどといっているからいつまでたっても知識が身に付かんのだ。
>>529 シリアライズ
IFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, obj);
>>530 Regionと組み合わせればいろいろできます。
>>528 標準ではないと思います。ただ、XMLスキーマの情報があれば実現できそうな感じの機能ですね。
538 :
デフォルトの名無しさん:05/02/13 14:54:55
初めてC#に挑戦しました。
まず最初にいつもの「こんにちわ世界」を・・・
試しにタスクマネージャーを開いたら・・・
なんでこんな単純なプログラムがメモリを10Mも!!
これって正常なのでしょうか?
.NET のソフトをタスクマネージャで見たときの
メモリ使用量は虚像に過ぎないから
気にしなくていいよ
richTextBox.Rtf = String Data(1M以上のRTFフォーマットの文字列)
とやるとすごい時間がかかるみたいなだけした。この方法がいけないよう
でした。
>>473 >>479 遅レススマソ。なるほど。.NETだと面倒なようだね。
リモート処理だとFWの警告が出そうな気もするし。悩ましいな。
内部同士の通信でFWも無いもんだと思うんだが。
ついでに別に面倒じゃないよ。
はじめに理解するのはちと困難だが、一度理解すればすごく簡単。
コーディングも長くならない。
standalone(XMLテキスト)のDataSetでSQLを扱う場合は
どのDataAdapterを使えばよいのでしょうか?
XMLをSQLで処理する処理系って無いような気がするな。
XPathNavigatorとか使って処理するんじゃね?
>>542,543
自分のアプリではAPIのSendMessageでやってるけど、やっぱり邪道?
>>545 そっか、どうしてもDataSetを使いたいのでDataView使います。
単純な質問スマソ
開始ボタンをクリック→キャンセルボタンを有効→時間のかかる処理→キャンセルボタンを隠す→処理完了
という部分で、処理の途中でキャンセルボタンを押すと処理を止めるってのを作りたいのですが、
キャンセルボタンを有効にしても処理の方が優先されるのか、処理をしている間、キャンセルボタンが有効にならないんです。
試しに、処理が終わった後にボタンを隠す部分をなくしてみたら、
処理が終わった段階で初めてボタンが有効になるという様でした。・゚・(ノ∀`)・゚・。
Application.DoEvents();
を処理のループの中に入れても無理でしたし・・・
このような場合はどのようにすべきなのでしょうか??
550 :
デフォルトの名無しさん:05/02/13 20:26:25
>>549 激しくThx
やっぱ別スレッドにすべきか・・・
ありがとうございました。
というか、今気づいたけど
>>171 の意味が良くわからん
どんなコードだったんだろうか
イベントデリゲートのメソッド内で直接排他してたんでしょ
メッセージキューをデリゲートに分配する部分がスレッドじゃないから
メソッド内で排他してもキューはたまりっぱなしだったかと
553 :
デフォルトの名無しさん:05/02/13 22:26:57
int型の配列を作成した時、各要素はヒープ上にありますか?
昨日書いたコードは忘れてしまう脂質じゃなきゃやってられません
>>553 各要素はint型、つまり構造体です。察して下さい。
DataGridの項目名はDataColumn#Captionでは変更できないのですか?
#ColumnNameが直接反映されてしまってローカライズできずに困っています
DataGridColumnStyle.HeaderText
スクロールバーが出ている状態のRichTextBoxで以下のような操作をします。
richTextBox1.Select(0, 10);
richTextBox1.SelectedLength = 0;
と行っても、最終的に自動的に画面スクロールが発生しますがこれを
上記の2つの操作を行っても発生させないようにするのにどのようにすれば
いいでしょうか?
>>560 RichTextBoxの継承クラスを作って、スクロールさせないフラグを用意する。
WndProcをオーバーライドし、フラグが立ってる時にWM_PAINTが送られた時は基底クラスのWndProcを呼ばないようにする。
後はフラグ立ててSelectionStartを保存してSelectしてSelectionLengthを0にしてSelectionStartを元に戻してフラグをおろす。
>>533 すいません、質問を改めます。
C#で出来たプログラムをバイトコードではなく、
CやC++のようにnativeコードにコンパイルしたいの
ですが、そんなコンパイラは付属してますか?
スルー
>>562 そのつもりはないのだと思うが、それはFAQすぎて煽りと取られかねない質問なのですよ。
javaスレにいって同じ質問をしても同様の反応があると思います。
結論から言えばそんなものはないし、あったとしてもそれはかなり邪道な存在です。
.NET Frameworkとは何か、何を目標にして作られたのかといったあたりを調べてみましょう。
>結論から言えばそんなものはないし、あったとしてもそれはかなり邪道な存在です。
>.NET Frameworkとは何か、何を目標にして作られたのかといったあたりを調べてみましょう。
別にそこにとらわれることないとおもうが・・・
.NET環境で動くものとしてもいいし、そこからアンマネージ生成して使えるようにできると幅も広がると思うが。
>>565 利点もねーだろうし幅も広がらんと思うぜ?その上技術的にも相当厄介だし。
.NETでないC#もあってもいいのだろうけど、それはきっとJ#並みの邪悪さだ。
DataSet & DataTableで仮想テーブル(Accessでいうクエリ)を生成する方法ってありますか?
よくわからんがDataViewのことか。
select 注文.id as 注文ID, 商品.商品名 as 商品名 from (略
SQLだとこんな感じですが、複数のDataTableからひとつのDataTableを作りたいんです
DataViewに結合のメソッドが見当たらなかったのですが、どのメソッドでしょうか?
>>570 最初から、そのようなSQLを打ってDataTableを作れば良いのではなかろうか。
>>571 XMLでやるのでSQLは使えません。
専用のテーブル作って保存の時だけ参照をはずす方法しないのかな。
>>573 関数ポインタはdelegateをmarshallした結果得られているわけであって、
もともとのdelegate のアドレスが変化するか、ということとはちょっと別の話だと思う。
マーシャラはCoTaskMemAllocとかその辺のレガシーAPIでメモリを確保するわけだから、
マーシャリングされた結果の関数ポインタとかTCHARへのポインタとかはunmannagedリソースで
ファイナライザで開放はされても、それまではアドレスは変化しないんじゅない?
大き目のbyte[]をPlaySound APIに渡して非同期再生を行ってる最中にGCを動かせばひどい目にあうように、
delegateもGCがメモリの再配置を仕掛けて
アンマネージコードに渡した関数ポインタが無効になるんじゃないかって思えます。
でも、
http://support.microsoft.com/default.aspx?scid=kb;ja;318804 この例でもそういうのは考慮していないみたいなので
何かdelegateからできた関数ポインタが無効にならない仕様とか決まってるのかなと思ったので。
でも、GCがdelegateをメモリ再配置の対象外にしているとしたら
それはそれでdelegateをメンバに持つクラスのメモリ再配置で困りそうに思えますし。
DataT&DataGridでAutoincrementされているIDを
DataTable & DataGridでAutoIncrementされているIDを初期化する方法ってありますか?
DataTableをClear()したあと、DataColumn#AutoIncrementSeetを0に設定しなおしても連番は残ってしまいます。
うまく初期値に戻せる方法をご存知でしたら教えてください。
>>564-567 ありがとうございました。
.NETという前提をおいといて、C#という言語だけを見たときに
私的にnativeのモジュールを作れれば、C、C++を完全に
捨てても良いのかなーと思ったりしたモノで聞いてしまいました。
お騒がせしました。
AutoIncrementの数値を気にしてちゃいけない。
ただの識別子。
581 :
デフォルトの名無しさん:05/02/15 01:17:45
余りにも初歩的な質問なんですが・・・
別のフォーム(例えばForm2)からForm1でPublicで宣言された変数にアクセスするにはどうすればいいんでしょ??
普通に変数(例えばstring Error1)を出そうとして
MessageBox.Show(Error);
などとやっても無理ですし、
MessageBox.Show(Form1.Error);
とやっても無理です。
三 (lll´ⅴ`)お助け願います・・・
方法は多くあるが、そのError1とやらがどんな意味を持ってるかで推薦するのが変わってくるな。
583 :
581:05/02/15 01:32:13
早速レスありがとうございます!Error1というのはあくまで例えでして・・・
実際は、Form2の方からForm1で動いているスレッドthread1をキャンセル、一時停止、再開などを行いたいと思っています。
Form2にThread型のプロパティを作ってForm2の起動前にForm1から渡してやればいい。
Form2 form2 = new Form2();
form2.TargetThread = thread;
form2.Show();
-------------
public Thread TargetThread {get {return targetThread;} set {taragetThread = value;}}
private Thread targetThread;
スレッド操作専用フォームだというのならForm2のコンストラクタ引数にするのがベターだけど。
Form2 form2 = new Form2(thread);
form2.Show();
------------
public Form2(Thread thread) : this() {
this.targetThread = thread;
}
private Thread targetThread;
RichTextBoxにスクラッチでスクロールバーをつけたサンプル知りませんか?
スクロールで最下行の文字が半分だけ見える状態で、その最下行をクリック
すると自動的にスクロールするという仕様にあきれてスクラッチで実装したいと
思いました。よろしくお願いします。WM_PAINT等では制御は不可能でした。
SPY++ですべての発生イベント調べましたがスクロールイベントが発生していない
のに自動スクロールする糞仕様は勘弁して欲しい。
>>585 Rich Edit コントロールの仕様だからして、RichTextBoxベースじゃどうにもならないだろね。
Controlを直接継承して書く事になるかな。
頑張れとしか言いようがないね。
ところでスクロールイベントがってのはRichTextBox.VScrollイベントの事かな?
これは
>ユーザーがコントロールの垂直スクロール バーをクリックすると発生します。
と書かれてるよ?
> スクロールで最下行の文字が半分だけ見える状態で、その最下行をクリック
> すると自動的にスクロールするという仕様
極めて真っ当な仕様だと思うけど。
>>580 同じDataGridで別データの読み込みをするのでAutoIncrementのリセットは必須です。
現状わかってる一番の問題点は
旧DataTableをRemoveして同名を持つ新規DataTableをAddしてもDataGridは参照を変更しないこと。
それではと再度SetDataBindingしてやっても参照が外れたはずの旧DataTableを表示してしまう。
DataSet#Tablesのインデクサで確認する分には確かにテーブルは新しいものになってる。
この更新不可のなぞの現象に手詰まり状態です。
588 :
465:05/02/15 07:47:27
>>469,
>>475 ありがとうございました。
コメントアウトでメソッド削って部分的に作り直したらなおりました。(クリックイベント消してやり直し)
.netで描画されるStringの送り幅を得る方法を知っている人はいますか?
Fontクラスにそれらしいメソッドがないのですが。
GetHeight()みたいなものはあるのですが
>>588 Graphics.MeasureString
えーと、スマートデバイス用にビルドしたアプリケーションにアイコンを
つけたいのですが…。
コンポーネントの追加でアイコンを編集保存してもビルド時に
「見つからない」とエラーが出てしまいます。
591 :
デフォルトの名無しさん:05/02/15 10:56:35
foreach(FontFamily ff in FontFamily.Families)
{
if (!ff.IsStyleAvailable(FontStyle.Regular))
{
continue;
}
comboBox1.Items.Add(ff.Name);
}
これで使用可能なフォント一覧を出しているのですが、大量にフォントが
あると使用メモリが一気に上がってしまいます。
これを回避するにはどうしたらいいのですか?
GC.Collect()
>>590 普通にくっつけられますが。
アイコンをプロジェクトに追加
フォームのIconプロパティでアイコン指定
アイコンファイルのパスが間違ってるとか?
>>591 フォント入れすぎによる弊害なんて10年以上前から言われてた事だし。
Win32APIか何かのスレでも、フォントを大量にロードした後は、フォントを破棄しても
プロセス終了まで使用メモリが減らないっていう話が出てたような気がする。
文字化けするフォントを排除して、使えるフォントのみ抽出したかったのです。
これだと、大量にあるフォントの中から抽出する事はかなり困難になりそうです。
597 :
デフォルトの名無しさん:05/02/15 16:25:48
timerコントロールより精度の高い計測コントロールってありませんか?
System.Timers.Timerで不服かね。
599 :
デフォルトの名無しさん:05/02/15 17:15:49
NotifyIconクラスのHandleがとりたいんですが、どうすればとれますか?
((System.Windows.Forms.NativeWindow)(notifyIcon1.window)).Handle
だと怒られてしまって・・・。
>>599 Spy++見れば分かるけど、NotifyIcon一つ一つにはウィンドウハンドル割り当てられてないよ。
タスクトレイの実体はToolbarだし。
notifyIcon1.windowってのが何を指すのか知らないけど。
602 :
デフォルトの名無しさん:05/02/15 18:28:57
>>601 notifyIcon1.windowはNotifyIconがもつ内部のメンバ変数で
System.Windows.Forms.NotifyIcon.NotifyIconNativeWindowのようです。(デバッグ情報より)
Ballon Hintを表示させたいので、NotifyIconのhWndが欲しいのですが
window.Handleではとれないのでどうしたものかと。。。
>>602 それはNotifyIconのハンドルじゃなくて
NotifyIconのメッセージを処理するウィンドウ。
601が言ってるようにNotifyIconはウィンドウハンドルを持たない。
604 :
デフォルトの名無しさん:05/02/15 19:07:24
>>602 バルーンヒントならCodeCoreで見たけど
605 :
デフォルトの名無しさん:05/02/15 19:26:40
>>603 なるほど
>>604 CodeCoreのやつは、うまくうごかなくて・・・。
リフレクションでとりあえずとることにします。
System.IntPtrhWnd = newSystem.IntPtr(0);
NativeWindownwwNativeWindow =
null;
System.Type typNotifyIconType = typeof(System.Windows.Forms.NotifyIcon);
System.Reflection.MemberInfo[] aryMemberInfo =
typNotifyIconType.GetMember(
"window",
MemberTypes.Field,
BindingFlags.NonPublic | BindingFlags.Instance);
foreach(
System.Reflection.MemberInfo mifMemberInfo
in aryMemberInfo){
FieldInfofifFieldInfo =
(FieldInfo)mifMemberInfo;
TypetypNotifyIconNativeWindow =
fifFieldInfo.FieldType;
nwwNativeWindow =
(NativeWindow)fifFieldInfo.GetValue(notifyIcon1);
hWnd =
nwwNativeWindow.Handle;
break;
}
>>605 なぜFieldを取得するのにわざわざGetMemberを?
607 :
デフォルトの名無しさん:05/02/15 19:57:39
>>606 コピペの関係で・・・
System.Reflection.FieldInfo fifFieldInfo =
typNotifyIconType.GetField(
"window",
BindingFlags.NonPublic | BindingFlags.Instance);
Type typNotifyIconNativeWindow =
fifFieldInfo.FieldType;
nwwNativeWindow =
(NativeWindow)fifFieldInfo.GetValue(notifyIcon1);
hWnd =
nwwNativeWindow.Handle;
608 :
デフォルトの名無しさん:05/02/15 23:17:06
自分で作ったフォーム(簡単なラベルエディタ)を指定位置に出したいのですが
先に移動させてShowしても、うまく指定位置に出てくれません。
//* これだと移動してくれない
MyForm mf = new MyForm();
mf.Location = new Point(400,300);
mf.Visible = true;
//*/
//指定位置に出すことができるけど
//こうやると一瞬ヘンな位置にでてるのがユーザにばれてしまう。
MyForm mf = new MyForm();
mf.Visible = true;
mf.Location = new Point(400,300);
どなたか、解決方法を御存知ないでしょうか?
StartPosition
610 :
斉藤:05/02/16 00:43:35
ここで問題です。
private void ABC()
{
・
・
・
}
private void HOGE()
{
DEF( ABC );
}
メソッドDEFは、メソッドABCの何を受け取るのでしょうか?
611 :
デフォルトの名無しさん:05/02/16 01:01:38
>>584 遅レスごめんなさい!
ありがとうございました!
Visual Basic、C#、および C++ のサンプルを表示するには、
このページの左上隅にある言語のフィルタ ボタン▼ をクリックします。
そんなボタン、ねーぞ!
>>610 関数ポインタみたいなことやらせたいんだろうか。
それともデリゲートのことをいいたいんだろうか。
615 :
斉藤:05/02/16 02:04:19
>>614 デリゲートで受けたらエラーになっちゃったの。テヘッ
デリゲートについて勉強すれば解決
お前らもっとデリケートなレス付けろって
618 :
斉藤:05/02/16 13:49:33
( ゚o゚)ハッ なるほど!
デリゲートのハンドラとして受けてるのか!
>>616様
>>614様 ありっとっしたー
GDI+遅っ!
620 :
デフォルトの名無しさん:05/02/16 15:56:34
try
{
while(true)
{
System.Web.Mail.SmtpMail.Send(mm);
}
}
catch(System.Threading.ThreadStateException ez)
{
Console.Writeline("処理が中止されました。");
Console.Writeline(ez.ToString());
}
catch(Exception ex)
{
Console.Writeline("送信中にエラーが発生致しました。");
Console.Writeline(ex.Message);
}
こういう無限にメールを送る処理を別スレッドでやらせていて、
送信中にスレッドをAbortさせて終了させようとすると、
なぜかSystem.Threading.ThreadStateExceptionを捕らえられない・・・・
メール送信のスレッドを止めるとメールを送信する方のエラーが先に起きちゃうからかな??
お助け下さいませ。・゚・(ノ∀`)・゚・。
質問です。
プロジェクトをビルドするときには問題はないのに、実行すると
InitializeComponent()の中で以下のような例外がでてしまいます。
心当たりといえば昨日ソリューションエクスプローラの中で
ドラッグアンドドロップしてfrmMain.csのファイルを移動させましたが、
デザイナを表示させたとき、アイコンなどはきちんと表示されるので
resxファイルの場所が間違っているということはないと思います。
'System.Resources.MissingManifestResourceException' のハンドルされていない例外が mscorlib.dll で発生しました。
追加情報 : 指定されたカルチャ (またはニュートラル カルチャ) に必要なリソースがアセンブリに見つかりません。"frmMain.resources" が、アセンブリ "BlogWalker" に正しく埋め込まれているか、またはリンクされているかを確認してください。
baseName: frmMain locationInfo: RSS.frmMain resource file name: frmMain.resources assembly: BlogWalker, Version=1.8.1873.28742, Culture=neutral, PublicKeyToken=null
>>620 なんか怪しいソフトだなぁw
まぁこのスレの住民はそういうの好きだから安心汁
キミの予想通り、恐らくSystem.Web.Mail.SmtpMail.Send(mm); の処理をしている最中にスレッドを止めようとすると
まず、スレッドのステータスがAbortRequestedになって、その後にAbortされる。
System.Threading.ThreadStateExceptionはスレッドがAbortRequestedぢゃなくて、完全にAbortされないと
反応しないから、恐らくAbortRequestedの段階でSystem.Web.Mail.SmtpMail.Send(mm); がエラーを起こしている
と思われ・・・
とは云っても対処法は・・・俺には解らぬ。
詳しい方、後はよろ
2chブラウザのレス番リンクのポップアップのような
親子関係を保持したポップアップはどうやって実装しているんでしょうか?
孫から子に戻ったとき、子だけ残して孫を消していたりとてもスムーズです
>>623 言ってることからは具体的なものがよくわからないんだけど
Control(とかFormとか)のParentを指定しておいて、
子から親に戻ってきたときに親が子コントロールを消してあげれば。
>>620 Mail 名前空間使った事無いから知らないけど
…… ThreadAbortException の間違い?
>>621 ソリューションエクスプローラでfrmMain.csを例えば"FormClasses"フォルダに
入れたとするなら、リソースへの参照は "FormClasses.frmMain.resources"に
変更する必要があるような気がするけど。
>>626 リソースへの参照はどうやって変更すればいいんですか?
>>625 申し訳ない!書き間違いです。
try
{
while(true)
{
System.Web.Mail.SmtpMail.Send(mm);
}
}
catch(System.Threading.ThreadAbortException ez)
{
Cons("処理が中止されました。");
Cons(ez.ToString());
}
catch(Exception ex)
{
Cons("送信中にエラーが発生致しました。");
Cons(ex.Message);
}
でした。
>>622さんの云うとおり、やっぱり無理なんでしょうか?
更にミス!なんでConsole.WriteLineが・・・
正しくは
try
{
while(true)
{
System.Web.Mail.SmtpMail.Send(mm);
}
}
catch(System.Threading.ThreadAbortException ez)
{
Console.Writeline("処理が中止されました。");
Console.Writeline(ez.Message);
}
catch(Exception ex)
{
Console.Writeline("送信中にエラーが発生致しました。");
Console.Writeline(ex.Message);
}
>>628 627 も指摘しているけど、"処理が中止されました。" が表示されているのかいないのか、そこのとこをもうちっと詳しく
すいません。
プロジェクトに明示的にresxファイルを追加したら動くようになりました。
少し後味が悪いんですが、他に解決法はないですか?
>>631 いえ、処理が中止されましたって表示されずに、
System.Web.Mail.SmtpMail.Sendの方のエラーを吐いています、
ですので
送信中にエラーが発生致しました
と表示されています。
>>630 うわぁ!
今読んでますけど、非常に参考になります。
有り難う御座います。
ただ、吐いているエラーが
ThreadAbortExceptionではなくて
System.Web.Mail.SmtpMail.Sendの吐くエラーなのがどうも腑に落ちないのです・・・
636 :
デフォルトの名無しさん:05/02/17 01:00:45
スクロールが必要な領域の、グローバル座標はどのようにしたら取得できるの
でしょうか?印刷コントロールを作成しているのですが、表示の必要がない
オブジェクトの描画を省略したいと思います。、グローバル座標が
が解らないため現在どこからどこまでが表示すべきかの判別をどのように
行えばよいのか解りません。
>>638 何を言いたいのかよくわからないけど、
スクロールとかは設計者の勝ってだっぺ。
ワールド座標は常に見えてる部分が基本だっぺ。
DLLの中身を解析するメソッドとかってあるんでしょうか。
MSIL Disassembler
いや、ツールとかじゃなくて、コード上で。
例えばツリービューにそのDLLが持つクラスを表現するとかの方法です。
Assembly.GetTypes() で型を全部取得して、ツリービューに表示
>>644 Thxです。
インテリセンスで出る説明文等の表示が欲しくて、Xmlとか覗いてるんですが、これって入れ子になってるわけでもなく、上から順番にメンバ並べてるだけですよね・・・?
Xmlの意味あるんでしょうかこれ。
menbersの中に全部memberとしてプロパティからメソッドまで、まったいらで入ってるんですが。
MainFormから飛び出して表示できるPanelを作るとき、ぱっと思いつくのは以下のコードですが、
もっといい方法(本来そのために用意されているクラス)などがありましたら教えてください。
Form frm = new Form();
frm.FormBorderStyle = FormBorderStyle.None;
frm.ShowInTaskbar = false;
frm.TopMost = true;
frm.Show();
とりあえずTopMost = trueは違うだろ。
Owner = thisか、Show(this)か。
648 :
デフォルトの名無しさん:05/02/17 23:23:44
C#でスタンドアロン可能なソフトを作ることって不可能なんですか?
今までVB6.0だったので(ランタイムは必要でしたが)自分で作ったプログラムが
友人のPCでは動かないということが起きており結構困っています。
友人に文句を言ってください
.NETランタイムが必要なだけじゃん。
>648
答え書いてあるじゃん
>>652 子供の名前を使ってtheSpokeを買う
と言ってみるテスト
655 :
デフォルトの名無しさん:05/02/18 09:52:38
C#と直接関係ないんでアレなんだすが、
VS,NETのIDEで作業してるときに、
クラスにインターフェースを継承させると、
自動的にインタフェースのメンバが付加されますよね?
それはいいんですけど、同時に#regionも付加されてしまうのが
わたし的にはウゼーんで、この機能をできれば無効に
したいのですが、そんな設定出来ますかしらん。
>>652 何度も既出で少しごにょごにょすれば可だったと思う。
>>656 いや、この場合RADで作成できないと言うのがネックだろ?
クラスライブラリの作成はStandardでもできるということらしいだし。
私は殆ど使わないのでどうでも良い機能だが。
テンプレートがないといってるだけなので同じくProからテンプレートもってくれば使えると思われ。
デザイナがないかもしれないのではっきりとは言えないが。
どちらにせよ一から手で書く場合は作れるはず。
手間はそんなに変わらないと思うがなぁ・・・
659 :
649:05/02/18 14:29:35
.net frameworkがインストールされていないPCで起動されたら
「.net frameworkをインストールしてください」
とかいうメッセージボックスをC#で出すことは可能ですか??
もし無理ならC++で起動プログラムを書いて、
.net frameworkがインストールされているかC++で調べて、もしもインストールされているようなら
C++の起動プログラムからC#で書かれた本体を起動するっていう方法にしたいのですが・・・
すれ違いですが、C++で.net framewrokがインストールされているか調べる方法ってありますでしょうか?
コンソールウィンドウを表示させないようにする方法ってあります?
ぐぐってもでてこないヽ(`Д´)ノウワァァァン
csc /t:winexe xxx.cs
>>659 ネイティブコードから.NETのVersionを調べるのは、CorBindToRuntimeExと
GetCORVersionを呼び出してみるという方法もありますが、
.NETのまったく入ってない環境ではどうなるかは試せてないです。
エラーコードか補足できる例外が戻ってきてれば使えると思います。
test1クラスからtest2クラスのインスタンスを作成、
test2内のメソッドからtest1にあるフォームを新たに作成するメソッドをコールバックで呼ぶとモーダルダイアログにならない。
test1のフォームを新たに作成する関数
{
Form2 form = new Form2();
form.ShowDialog(this);
}
こんな感じなのだけど、この場合thisはtest2を指すのということでOK?
test1上のモーダルダイアログにしたい場合は、test2にtest1のインスタンスを渡してやらないダメってこと?
>>666 文章がグダグダでひたすら把握しにくいな。
test1にあるフォームって何だ? test1の内部にネストクラスとしてForm2を定義してるのか?
> こんな感じなのだけど、この場合thisはtest2を指すのということでOK?
そりゃtest2の中で定義されてるメソッドではthisはtest2のインスタンスだろ。
> test1上のモーダルダイアログにしたい場合は、test2にtest1のインスタンスを渡してやらないダメってこと?
そう言う事になるな。
>>666 すでに一行目から意味が分からないんだが・・・
C#で簡単なサーバを作っているのですが、ソケット1本に対して1つのスレッドを
立てる形で実装しているのですが現状1700~1800本同時につなぐと
OutOfMemoryで接続が出来なくなります。
スレッド毎で使うメモリを増やすとつなげられる本数が減るのでプロセスで確保してる
メモリの問題かなと思うのですが、この使用できるメモリを増やす方法は
無いのでしょうか。
マシンとしては搭載メモリはまだかなり余裕があります。
タスクマネージャで見ると1プロセス50~60MBくらい食っているようです。
何かポインタでもいいので情報がある方がいらっしゃいましたら教えてください。
質問です。
スレッドA・・・メインのスレッド
スレッドB・・・一通り処理をした後終了(自殺)する
の2つのスレッドがあります。
スレッドBから同時にフォームを何個か表示する必要があるんですが、
Show()で表示するとスレッドBが終了した瞬間に消えてしまいますし、
ShowDialog()だとそのフォームが閉じるまで処理が戻ってこないので
複数同時に表示することができません。
どうかお知恵をかしていただけませんか?
>>670 BeginInvoke使ってUIスレッドでShow()を実行させれば?
>>669 ……1700?
>>671 スレッドBからフォームを表示するのであれば、Invokeする必要は無いのでは?
>>670 流れをもう少し詳細に書いてみてください、消すタイミングが謎です。
>.666
>test1のフォームを新たに作成する関数
これが test1 クラスのメンバなら、その関数内での
this は test1 クラスのインスタンス。
>>669 その設計は少々マズイと思いますが、
とりあえずThreadPoolの方を使うとどうなりますか?
>>670 >>671の言うようにBeginInvokeでメインスレッドに通知してそっちで表示しても良いし、
物事が良くわかっていて、かつスレッドB側で表示したいのなら、自殺前にスレッドB
側でApplication.Run()してあげれば良かったと思う。
この場合フォームが全部閉じられたら自前でApplication.Exitするようにする必要が
あったような無かったような・・・
>>672 スレッドBは複数回の一連の時間のかかる処理を繰り返します。
で、その一連の処理が一度終わるごとに新しいフォームを数秒間表示して結果を表示したいんです。
1.スレッドA(メインのFormのスレッド)
↓
2.ボタンを押す
↓
3.スレッドB開始
↓
4.時間のかかる処理
↓
5.結果を新しいフォームに表示→続きがある場合は4.へ
↓
6.スレッド終了
という流れなんですが、
スレッドが終了すると表示する秒数が経過する前に消えてしまいます。
>>676 単純にスレッド終了時にSleepで適当な秒数まったらOKでは?
UIを持つスレッドをSleepさせるのはお薦めしない。
>>677 すでにApplication.Run()でUI完了を待てと結論が出てるわけだが。
>>679 意味不明なまでに必死だな、何者だよお前?
>>677 すいません。大事なことを書き忘れてました。
1.スレッドA(メインのFormのスレッド)
↓
2.ボタンを押す
↓
3.スレッドB開始
↓
4.時間のかかる処理
↓
5.イベントを発生させてスレッドAに通知
↓↓↓
↓↓└→続きがある場合は4.へ
↓↓
↓└→→続きがなければスレッドB終了
↓
6.スレッドAでイベント受信
↓
7.結果を新しいフォームに表示
でした。
複雑ですが、よろしくおねがいします。
7.結果を新しいフォームに表示
このフォームはどれですか?
メインのFormに表示するなら、メインにInvokeを使って通知する必要があります。
Bのスレッドで表示するなら、全てが終わった所でShowDialogでOKな気がします。
もし、そのFormが複数あるなら、複数のウインドウ全てが閉じるのを待つコードをスレッドの最後に入れることになります。
>>682 全く別のフォームです。
6.で一回一回新しいフォーム(のインスタンスを作成して)表示したいんです。
>>683 6の段階という事は、処理は全て終わった後になると思うので、1回だけだと思いますが(^^;
5の最後ですよね。
それなら、単純に生成したウインドウをArrayListか何かに登録させておいて、
全部完了までスレッドの最後にまてば良いかと思いますが。
5.6.の解釈が間違ってるよ。
イベントを受け取るのはオブジェクト(Form)であってスレッド(スレッドA)ではない。
スレッドBが通知したイベントのハンドラを実行するのはやっぱりスレッドB。
//そのためにInvoke/BeginInvokeが存在するわけで。
だから6.でイベントハンドラにてShowDialogで問題なし。
>>685 そういうことですか!
ありがとうございました。
>>686 エスパーなのかもしれませんねw
ほんとに私の疑問に思っていたことの通りです。
もうひとつ質問なんですが、
例えば
>>681の6.はスレッドBなんですよね?
ということはここから直接Formを操作するのはまずいってことですよね。
>>685氏のいうようにInvokeを使うべきというのは聞いたことがあるんですが、
実際にはどう使えばいいんですか?
また、直接操作するのは何がまずいんですか?
BitmapをStreamに保存したり、Streamから作成する際、
Streamの途中から読み出したり、書き込んだりする方法ってないの?
Bitmap用にStreamを別に作成したり、2つのStreamの間でコピーするために
byte[]も用意しなければならなかったりして、面倒なんだけど…。
>>689 やりたいことは、1つのファイルの中に複数の画像データを保存すること。
Bitmapクラスでは、通常の「画像ファイル」への読み書き以外に、
Streamへの読み書きができるが、Positionが0から読み書きしてしまって
不便に感じている。
Positionを意図的に変えてやっても駄目。
いい方法ないかなと思って。
取り敢えずは、ファイル読み書き用のFileStreamに加えて、
Bitmapのデータを仲介させるMemoryStream、
並びに、これら2つのStreamを仲介させるbyte[]を使っているが、
コードが冗長になる上に、
実行時のパフォーマンスも低下させている。
当然あってもいいメソッドだと思うのだが…。
System.Windows.Forms.Controlから継承したクラスを作ってGrpachicsを描画
したいのですが、画面より大きなサイズの描画領域のときにスクロールバー
を出したいのですが、スクロールバークラスのインスタンスをもつだけでよいの
でしょうか?
>>691 僕の好みはSystem.Windows.Forms.UserControlのAutoScrollプロパティーをtrueにして
中にパネルとかを放り込んで、そこに書くのが好みかな。
あの、すいません。
吹き出しの形したバルーンヘルプを出すにはどうすれば良いんですか?
>>690 いや、あんまり普通じゃない。
Image.Saveは画像ファイルを作るのが目的なわけで、画像2つ分のファイルデータを並べたらそれはもう画像ファイルでなくなるから。
//tiffなら複数画像を収めるSaveAddメソッドがあるけどね。
//あと、リソースにしたいというなら別の解法があるけど。
試してはないけど、Streamを継承した、指定範囲だけを返す(操作できるようにした)ストリームバッファクラスを作ってみるとか。
>>694 やりたいのは汎用の画像ファイルの読み書きではなくて、
画像データを内包した独自のフォーマットのファイル。
無圧縮のRGBのラスタデータでは無駄にファイルサイズが大きくなるので、
ラスタデータをPNGなりJPEGなりの圧縮された形で独自のファイルの中に取り込みたかったのである。
Streamクラス調べた方がいいのかな。
ということで、レスありがとう。
文字列が空かチェックするとき、 string.Empty と
比較するより Length == 0 のほうがいいんでしょうか?
>>656 サンクス!過去ログ調べてみるよ
>>657 まあそんなに使わないんだろうけど
やっぱりコントロール作れると便利だしね
ライブラリに出来ればもっと(・∀・)イイ!!
>>658 あんがとー
テンプレート確保しればいいのか
>>696 str == ""
これが一番自然だと思うがどうか。
ぬるぽは空なのか?
null
class Form1
{
static void Main
{
Hoge obj = new Hoge();
obj.show(this);
}
}
class Hoge
{
public void show(Form1 fm1)
{
Form2 fm = new Form2();
fm.ShowDialog(fm1);
fm.Dispose();
}
}
大まかにはこんな感じのアプリを作ってみたが、Form2がモーダルにならない。どうしたものか。
大まかすぎてコードが間違ってるが。
ソフトウェアの自動アップデート機能を付けたいと思っています。
一応、単純なDLで十分なので
http://dobon.net/vb/dotnet/internet/downloadfile.html こちらにある方法で実装してみました。
ただ、ダウンロードが完了したサイズはSystem.IO.FileInfoから毎秒ごとに取得できるのですが、
ダウンロードするファイルのサイズの取得方法がイマイチ解りません。
5MBほどのファイルなので、プログレスバーで進行状況を表示しないと
流石に不便かと思いまして・・・
どうか宜しくお願い致します。
HttpWebResponse.ContentLength
HttpWebResponse.GetResponseStream
あ、やっぱHttpWebRequestぢゃないと無理でしたか・・・
もとい、HttpWebResponseでしたね
>>689 よくわかりました。
本当にありがとうございました。
//Invokeを使うように修正したら心なしかレスポンスが良くなった感じがします。
708 :
デフォルトの名無しさん:05/02/19 15:24:20
HttpWebRequestで10msecぐらいで連投とかすると(もちろんNewしてオブジェクト
生成している)
GetRequestStreamがnullになるんだな。どうすりゃいいべ?
//Invokeを使うように修正したら心なしかレスポンスが良くなった感じがします。
うそーん(笑)
だれかC#でSMTPサーバー作ってぇぇぇ!!
C#のSMTPサーバーが全然ないから参考にするものがないヽ(`Д´)ノウワァァァン
>>710 やることは C++ 製の鯖でも Delphi 製の鯖でも etc.............. でも変わんないよ
コードの丸写しになるから C# のサンプル探すの止めたほうが
そりゃやり方がまずいだけ。
……って、なんでバイト単位で読み書きしてるんだ >dobonのサンプル
byte配列のバッファを使ったRead/Writeに書き直せば随分変わるはず。
バッファサイズは4kbyteくらいがいいぞ。
>>712 遅い原因は、ReadByte を使っている事
Read を使ってまとまった量のデータを取得した方が早いよ
5MB 程度ならば、5kB ずつ取得すれば良いのでは?
それから、ダウンロード済みのサイズは取得した量から大まかに測れるから、それの方が良いかと
>>713 perl よく分からんが、NET Framework には Net::SMTP モジュールに該当するのが無かったような気がする
(System.Web.Mail が使えるかもしれんが)
この際だから、SMTP プロトコル周辺も含めて勉強してみては?
DOBONは オ㍗ル
>>716 System.Web.Mailは流石に無理だろw
Perl最強説ヘ(゚∀゚ヘ)アヒャ(嘘
>>718 本当だ。調べてみたら全然使えなかったすまぬ
MouseMoveイベントを使わずにアプリケーション上のマウス座標が欲しいのですが
Point p = new Point(Cursor.Position.X - this.Location.X,
Cursor.Position.Y - this.Location.Y);
だとどうしても右下へずれてしまうようです。
うまくいく方法はありませんか?
>>720 境界線なんかを考慮しないといけないんじゃないかな
Point p = new Point(this.Location.X - Cursor.Position.X,
this.Location.Y - Cursor.Position.Y);
こうだった・・・。つまりクライアント領域の0,0を求めたいのです
PointToClient
>>667 >>668 意味不明で申し訳ない。書き直してみた。
メインフォーム上から作成したスレッド上で新たにフォームを作りたい。
そのフォームはメインフォームのモーダルダイアログにしたいが、ただShowDialogするだけでは表示はするがモーダルになってくれない、ってこと。
メインフォームを表示しているスレッドと新たに作成したスレッドが別物なので、単純にShowDialogしただけではダメってことは何となくわかるのだが、
どうやって目的を果たせばよいのかが分からない。
>>696 空文字のチェックは a.Length == 0 が一番速い。
null や同一インスタンスの場合は String.Equals(a, b) が一番速い。
別インスタンスの文字列の比較は a.Equals(b) が一番速い。
a == b は一番遅い。
>>725 >>670-690辺りのと殆ど同じだなオイ。
メインフォームのInvoke使って、メインフォームのUIスレッド上でShowDialogすればいい。
>>726 そんなのがボトルネックになることなんてまずないと思うんだが。
ボトルネックにならない限り、str.Length == 0なんて直感的でないコーディングはどうかと思う。
あんま関係ない話だけれども,Cで int a=123, b=456, c; の a, b を入れ替えるのには
a ^= b; b^=a; a ^=b; よりも c = a; a = b; b = c; の方が速かったよ
CPU は Pentium III
>>726 String.Empty.Equals(a) ってのはどうだろうか
>>727 確かに。100万回繰り返してもたいした差がないな。
でもLength == 0ってそんなに非直感的かなぁ。
>>731 気にしすぎだろ、どっちでも十分直観的、これが直感的でないというなら言う奴が池沼だよ。
WindowsアプリケーションでListViewを使っています。
□←アイコン
x ←文字列 で
□xxxxxxx
□xxxxxxx
□xxxxxxx
□xxxxxxx
というようにある行だけをインデントさせたいんだけど
どうやればいいのでしょうか?
>>733 インデントというか逆インデントというか
あれ?うまくいかなかった。
[ ]←空白とみて下さい。
□xxxxxxxxxx
[ ]□xxxxxxxxxx
[ ]□xxxxxxxxxx
□xxxxxxxxxx
>>735 ListViewItem には該当プロパティは無かった
独自に描画すれば何とかなるかもしれないけど、TreeView に切り替えた方がいいかもしれん
線なし・田なし、クリック時に縮小を禁止にすれば、それらしくなるんじゃないか?
それから、半角スペースは & な
う、 だった
>>736 アドバイスどうもです。
実際には
□xxxxxx AAA BBB CCC
という風にあとに列が続くんだけどそれも
TreeViewで実現可能ですかね?
>>738 そいつは無理だわ
オーナードローで何とかすべし
>>727 サンクス。Invokeを使ったところ問題なく動作した。確かに同じだった。
>>739 オーナードローって自分でオーバーライドして作りこむってことですよね?
なんとかがんばってみます。ありがとうございました。
>>674 ThreadPoolは使った事なかったのですが試しにやってみたところ
今の作りだと1プロセスの上限25というのに引っかかっちゃうみたいで
逆に接続数が減る形になってしまいました。
目標値としては2000人同時接続のサーバとして考えていたのですが
この規模になってくると確かに設計をしなおさないといけないようですね
>>742 それだけの量を捌くのならば、鯖を複数台にした方が簡単かと思う
あと、どんな事をやりたいかによって変わるけど、接続後即切断とか
744 :
デフォルトの名無しさん:05/02/19 20:21:18
スレッド1個だけにソケットでSelectして、メッセージ判断して
ガリガリ受信して計算すればいいんじゃね?
ネットワークゲームとかはそうやってやってるよ。スレッド2000個とか
恐ろしいことはしないですよ。マスタリングTCP/IPとか海外の.NETのネットワーク
プログラミング系の本にネタのってるから見てみぃや
自分のPCで動作するSMTPサーバーを用いてメールを送信することができないか試行錯誤しています。
SMTPやTCPの勉強も兼ねて敢えてTcpClientにしようと思います
Telnetと同じように送りたいのですが、初心者故にどうもうまくいきません。
プログラムが起動されると自動的にSMTPサーバーに接続してListenerを別スレッドで開始します。
tcpcl = new TcpClient();
tcpcl.Connect("localhost", 25);
strm = tcpcl.GetStream();
trdListener = new System.Threading.Thread(new System.Threading.ThreadStart(Listen));
trdListener.Start();
そのListenerのスレッドというのは
String strmtxt;
int blen;
while(true)
{
while(true)
{
byte[] bread = new byte[4096];
blen = strm.Read(bread, 0, bread.Length);
strmtxt = Encoding.ASCII.GetString(bread, 0, blen);
if (blen < bread.Length)
{
break;
}
}
Console.WriteLine(strmtxt);
}
っとやってみたのですが・・・
SMTPサーバーに送るのは
byte[] bsend;
bsend = Encoding.ASCII.GetBytes(txtSend.Text + "\n\n");
strm.Write(bsend, 0, bsend.Length);
strm.Flush();
というようにやっています。
こっちの方は間違いないと思うのですが・・・
お前まだいたのか
??
気付いてない
自分もSMTPを極めたいと思っています。
Googleとか面倒なので誰か手っ取り早く教えてください。
stmp厨は多分ヘルプ代わりにここ使ってるんだと思われ・・・
752 :
デフォルトの名無しさん:05/02/20 04:06:45
>>752 見たいとは思うけど著作権侵害。
やめておいた方が無難。
<html><body>Hello</body></html>
↑こういうHTML文書をWebブラウザで開いたときに表示されるであろうイメージを印刷するにはどうしたらよいですか?
Processクラスで外部IE起動するのは無しの方向で。
>>754 デバイスコンテキスト取得してBitmapに保存する。
P/Invoke使えばできましょう。
P/Invokeって外部起動なんだ
ピンボケ
759 :
デフォルトの名無しさん:05/02/20 17:42:13
EM_POSFROMCHARと同じことをC#で作るならみんなどうする?
C#は関係ないと思うんだが。
762 :
デフォルトの名無しさん:05/02/20 23:07:50
Graphics.DrawStringを使った場合に文字列が画面に収まりきらない場合
どのようにスクロール処理をするのでしょうか?
Graphics.DrawImageであれば範囲描画ができるのですがどのように考えれば
いいのかGraphics.DrawStringの場合わかりません。
763 :
デフォルトの名無しさん:05/02/20 23:10:45
SharpDevelop で,MAPI 使ったアプリケーション作れる?
Graphics.Clip かな?
GetGraphics で取得した Graphics には最初から設定されているだろうから
別に気にしなくても良いかもしれないけど
765 :
デフォルトの名無しさん:05/02/21 00:59:49
Formが元々内包しているScrollBarがの位置が変化した時のイベントがないような
気がするのですがみなさんはどのようにしているのでしょうか?
OnVScrollが見当たらないような気がします。
気がする?
>>762 MeasureStringであらかじめ大きさを調べておくとかどうかな
>>765 .NET2.0でScrollableControlにScrollイベントが追加されるのでそれまでは涙をのんでWM_VSCROLL & WM_HSCROLL。
DataGridでXMLの8000件(500KB)のデータを読み込むと表示まで40秒くらいかかるんですが
時間を短縮するコツみたいなものありますか?
770 :
デフォルトの名無しさん:05/02/21 21:37:34
ASP.NETでソリューションを複数のプロジェクトから構成する時、
お互いのWeb.configを参照するような方法は無いのでしょうか?
相手側のプロジェクトを[参照の追加]で参照設に入れて、
相手側のWebコンフィグ読み込みクラスを呼びだしてみたのですが、
上手く読み出せません。
IConfigurationSectionHandlerを継承する方じゃなくて、
単純なConfigurationSettings.AppSettingsを使ってます。
>>771 自分のweb.configの情報を公開するプロパティを作ればいいんじゃね。
Code Projectが遅いのは仕様ですか?
VS.NET2005の正式リリースって8月くらいかな?
>>772 Web.config読み出すときに、下のようなコード使うんですが、
System.Configuration.ConfigurationSettings.AppSettings[キー]
これを公開するためのクラスを作って関数呼んでも、
値が取れないんです・・・
Web.configを読み込む関数から自作すれば、あるいはなのかも・・・
でも、Web.configってキャッシュとか良きに計らってくれるんですよね・・・
だから、関数自作するって言うのも・・・
正直、よくわかりません。
776 :
デフォルトの名無しさん:05/02/21 23:19:05
ListViewでスタイルの設定がDetailのときの
ColumnHeaderのHeightをとる方法って誰かわかりませんか?
コンポーネントのヘッダ部分だけ使いたいんですけど
おぉ神よ!罪深き我にC#を用いてパソコンのボリュームを変更する方法を享受して下さい!
っとふざけた言い方になってしまいましたが・・・どうかお願い致します。
>>776 直接取れる方法はなかったと思う。
強引に行けばLVM_GETHEADERでハンドルとってGetWindowRect()やれば取れる筈。
ただ、ヘッダだけ使いたいのならヘッダーコントロールを作るべき。
>>777 「享受」してくださいって言われても・・・
質問です。
ソフトで画像を作り出して、送信ボタンを押すと
同じフォルダにbanner.jpgというファイルを作り、それをSystem.Web.Mailで送信しようと思っています。
作った画像を保存するところまではできるのですが、どうも正常にメールを送信できないのです。
画像を添付するところを外すと正常にメール送信できますので、恐らく、banner.jpgというファイル名で保存したあとに
アクセス権みたいなものが残ってしまっていて、巧く添付できないのだと思っています。
一応、画像の保存は
bmp.Save("banner.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
という方法で行い、直後に
bmp.Dispose();
とやって開放してあげているのですが・・・
やはり、プログラム自体を再起動しないと無理なのでしょうか?
>>777 そんなことするくらいなら、ユーザーにメッセージボックスで「ボリュームを大きくして下さい」とか
「ボリュームを小さくして下さい」なんて出した方がてっとりばやいさぁ!オイオイ
>>781 FileStreamだかなんだかを開いて、そこにSaveしたあとCloseすると良いよ。
>>781 正常に送信できないってのは具体的にどうなるの?
//Saveメソッドはファイルをクローズするところまできっちり面倒みてくれるよ?
private Bitmap bmp = null;
~略~
bmp.Save(@"banner.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
bmp.Dispose();
System.Web.Mail.MailMessage mm = new System.Web.Mail.MailMessage();
System.Web.Mail.MailAttachment attachment;
//送信者
mm.From = "";
//送信先
mm.To = "";
//題名
mm.Subject = "掲載申請";
//本文
mm.Body = time.ToString();
//JISコードに変換する
mm.BodyEncoding = System.Text.Encoding.GetEncoding(50220);
//SMTPサーバーを指定する
System.Web.Mail.SmtpMail.SmtpServer = "";
//添付ファイルに追加
attachment = new System.Web.Mail.MailAttachment("banner.jpg");
mm.Attachments.Add(attachment);
//送信する
System.Web.Mail.SmtpMail.Send(mm);
というようなソースです。
具体的に出るエラーは
CDO.Messageオブジェクトにアクセスできませんでした。
というものです。添付ファイルを全く別のファイルにすると正常に送信できますので…
>>787 信用されてないようなのでもう一度書くけど(w
「FileStreamだかなんだかを開いて、そこにSaveしたあとCloseすると良いよ。」
こういう感じ↓
FileStream out_stream = new FileStream( out_file_name, FileMode.Create, FileAccess.Write);
out_bitmap.Save( out_stream, System.Drawing.Imaging.ImageFormat.Jpeg );
out_bitmap.Dispose();
out_stream.Close();
>>788 あ!失礼しました!本当に申し訳ない・・・
早速試してみますね。
やはり
>>769さんのいう方法も試したのですが、結果は同様でした。
以前は、保存するためだけのソフトを別に動かして
保存ソフトを起動→保存→保存ソフトを終了→メールで送信
という無理矢理な方法をしていたんですが、やはり無理矢理なので。。。
試しに保存の方をメール送信とは別スレッドにしてみますね。
試行錯誤せねば・・・
あ、申し訳ないというかなんというか・・・
単純にThread.Sleepで500ms眠らせたらOKでした。
おぉぉ!っと思い、200msにしてもOK、50msにしてもOK、
試しにThread.Sleepを外してみましたが、こんどはエラーが起きませんでした・・・・
一体なんだったんでしょう(涙)
本当に皆様、お騒がせ致しました。
792 :
デフォルトの名無しさん:05/02/22 01:48:51
>>791 で。それで本当にバグ取れたと思ってんの?
頼むから人命に関わるプログラムの開発にだけは関わらないようにしてくれ
超同意
単純に500mgの薬を投与したらOKでした。
おぉぉ!っと思い、200mgにしてもOK、50mgにしてもOK、
試しに投与を中止してみましたが、こんどは症状が起きませんでした・・・・
一体なんだったんでしょう(涙)
797 :
デフォルトの名無しさん:05/02/22 20:27:45
Jpeg変換てのは同期処理じゃなかったけ。
798 :
779:05/02/23 00:32:48
ListViewのヘッダコントロールを作ろうと思ったのですが。
FlowLayoutでButtonとSplitter並べていけば終わるのではと思ったのですが
FlowLayoutはないのでしょうか?
コントロールの上に、Unit := (Left (| Unit)?)
「Left := Button、|:= Splitter」 Dock.LeftとDock.Fillの入れ子にしていく
と線形リストにするのも変な気がするし、どうしようかなぁ。と思っています
いいお知恵はないでしょうか?
>ListViewのヘッダコントロールを作ろうと思ったのですが。
SysHeader32クラスでコントロールを作れば一発
800 :
デフォルトの名無しさん:05/02/23 11:44:21
WAVからMP3へ変換するには外部のDLLとか使わないといけないでしょうか?
使うとしたら商用OK&フリーのDLLとかありますか?
>>798 Dock.Left で並べていけばよかったような気がする。
803 :
781:05/02/23 19:41:40
>>800 簡単な再生だけならWindowsMediaPlayerを追加するのが一番ラクダと思う。
804 :
デフォルトの名無しさん:05/02/23 19:53:09
pictureboxを30個ぐらい並べて全てのpictureBoxのvisibleプロパティを
一斉に切り替えて表示/非表示を切り替えるWindowsフォームを作って
いるんですけど、visibleプロパティをfalseにした際、puctureBoxが一斉
に消えず、コードの上にある順にぞろぞろと消えていきます。
trueの場合は一斉に消えるんだけど。
一斉に同時に消すにはどんな技を使えばいいか知ってる香具師いませんか?
805 :
デフォルトの名無しさん:05/02/23 19:54:59
保存(S)
 ̄
こういうショートカットキーをボタンに設定するにはどうしたらいいのですか?
保存(&S)
>>804 FormのSuspendLayoutとResumeLayoutならどうか。
CSV クラスを探していますがなかなかいいものが見付かりません。
要望としては、
・ダブルクォーテーション内のカンマを意識してくれる
・項目の数を指定しなくても適宜読み込んでくれる
このくらいでいいのですが…。何かよい CSV クラスを御存知であれば
URL を教えて頂けないでしょうか?
よろしくお願いします。
参照設定されているバージョンよりも古いものをロードさせることって出来ませんか?
新しいものをロードさせる例は大量に見つかったのですが……
>> 810
CSV の項目数をあらかじめ指定しなければならなかったり、
ダブルクォーテーションの中のカンマを無視して .split(",") 的な
パースしかしてくれなかったり、という事です。
具体的に何を見つけたかってのは、それを公開している方に申しわけないので
あえて書かないようがよいかと思いました…。
813 :
デフォルトの名無しさん:05/02/23 22:06:45
自分で書けよそんな簡単なもん
れげっくす
>> 813
がんばって書いたんですけど、速度がめっちゃくちゃ遅かったんですよ…。
ですので、コードを参考にしたくて何かよいコードはないかなと探してみたん
ですが、要望の事を行なえるコードがみあたらなかったもので…。
じょーたぃまっしん
↑マジこわい
真性?
すとりんぶいぅでぁ
コワガリスキーってだれや?
はい、まさがです。
>>815 StringBuilderを使ってますか?
これを使ってないことが文字列操作が遅い原因になってるケースが多いです。
ありがとうございます。
>>799,801
FlowLayout普通にできたんですね。
SysHeader32を使うとXpでのExploreにおいての詳細表示のヘッダみたいなのが簡単にできるのかな
ヘッダコントロールで実現したいことは
スプリッタが動いているときにイベントが取れることと、
Columnの順番の取得(Reorderが終わったらイベント発行とかも)なんですけど。
・ ListViewを継承し、WinProcオーバーライドしてイベントをディスパッチ (それって、できるのか?)
・ 独自にButtonとSplitなどからがんばって作る (Exploreみたいにかっこよく作るのは大変そう)
・ SysHeader32を使ってがんばる (難しそう)
どれがいいのだろうか。。どうか、詳しい人お勧めを教えて下さい
なんで改行は\\じゃなく\\\\なの?
string s1 = @"一行目\r\n二行目\r\n";
string s2 = "一行目\\r\\n二行目\\r\\n";
エスケープの話じゃない?
>>809 ""内のカンマ許可、\,でカンマをエスケープして
csvファイルの1行を分割
Regex csvRegex = new Regex("[^,\"\\\\]*(?:(?:\\\\.|\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\")[^,\"]*)*,?", RegexOptions.Compiled);
private string[] SplitValues(string line) {
MatchCollection mc = csvRegex.Matches(line);
string[] values = new string[mc.Count - 1];
for (int i = 0; i < mc.Count - 1; i++) {
values[i] = mc[i].Value.TrimEnd(',');
}
return values;
}
825 :
デフォルトの名無しさん:05/02/24 08:09:16
つかC#使ってみたけど、なんで中身がカラのプログラムがメモリを20MBも消費してるん??
使い物にならんだろ・・・
じゃあ使わないでください
まずカラのプログラム自体に意味がないし使い物にならんだろ
ネイティブコードじゃないんだからさ・・・
超図解C#ルールブックってのに
>配列を返すプロパティは使用しない
>配列を返すプロパティは内部配列のコピーを返します。このためパフォーマンス上問題があります
って書いてあるんだけど、ほんと?
public IntPtr Ptr{get;}
public int[] Array{get;}
public int[] GetArray();
どれもint.MaxValue回繰り返して20秒程度で同じだったんだけど。
ReferenceEquals(target.m_testArray,target.Array)
もtrue返すし。
>>830 それはクラスの設計上、
内部配列を返すプロパティは好ましくないので(値を外部から直接操作できるから)
通常はコピーを返す、って話じゃないのか。
private class RootClass
{
private ArrayList fieldArray = new ArrayList();
public void Add(string fieldName
{
Item i = new Item(fieldName);
this.fieldArray.Add(i);
}
public struct Item
{
public Item(string fieldName)
{
this.FieldName = fieldName;
}
public string FieldName;
}
}
こんな感じのクラスを作り、((Item)fieldArray[i]).FieldName を
クラスの外で得たい場合はどうやればいいでしょうか?
RootClass rootItem = new RootClass();
rootItem.Add("a");
rootItem.Add("b");
rootItem.Add("c");
としたあとに rootItem[i].FieldName のように値の取得を行ないたいのですが
どのように書けばいいのかさっぱり…。
>>832 > rootItem[i].FieldName
となるとインデクサだな。
インデクサはプロパティの一種で、
class A {
public int this[int index] {
get {return index;} //これは意味がないが
}
}
みたいに記述すると
A a = new A();
Console.WriteLine(a[5]);
と使えるようになる。
ArrayListにつっこんである構造体をアンボクシングで取りだしたモノの
値を修正してもArrayList そのものに入っている値は変化しないのですが
これは構造体の値を変更したらその構造体を再度ArrayListにつっこみ
なおすって事が必要なのでしょうか?
struct test { public int a; }
ArrayList ary = new ArrayList();
test t = new test();
t.a = 100;
ary.Add(t)
Test t1 = (Test)ary[0];
t1.a = 10000;
↑ではだめ。
Test t2 = (Test)ary[0];
t2.a = 20000;
ary[0] = t2;
>>834 まあそれは正しいが、それは本当に構造体にすべきなのかってのは常に考えとかないとダメだぞ。
>831
そういう意味なら納得だけど、
その本の例ではメンバの配列を直接返してるプロパティは悪くて、
メンバの配列を直接返してる関数はOKと書いてた
ホームページの一部のテーブルだけを表示するプログラムを作っています。
たぶん、HttpWebRequestでページ丸ごとダウンロードして、
正規表現で<table>...</table>を切り出して、axWebBrowserに渡せばできると思うんですけど、
どうも、axWebBrowser.Documentプロパティーには代入できないみたいです。
こういう場合どうやってaxWebBrowserのデータを渡せばいいのでしょうか?
>>837 about:blankにNavigateしてDocument.Writeで書き込む。
>>838 できました。ありがとうございます。
IHTMLDocument2にキャストすることに気づかないで延々と悩んでしまっていました。
840 :
デフォルトの名無しさん:05/02/25 09:43:10
抽象クラスでインターフェイスを統一させて、処理別に
クラスを呼び分けてます。
処理別だけど、共通して使いたい関数を作成するには
どうしたらいいんですか。
共通関数だけをまとめたクラスを作って、
使いたい場所で参照する、という形が一般的なんでしょうか
>>840 ん?
抽象クラスなら実装を持つメソッドも定義できるけど?
842 :
デフォルトの名無しさん:05/02/25 11:30:31
>>841 ありがとうございます。
抽象クラスに共通関数を書くのが、一般的なんでしょうか
>>842 基底クラスで持つに相応しいメソッドなら基底クラスが持てばいい。
そうでないなら相応しいクラスに置いてそれを使えばいい。
844 :
デフォルトの名無しさん:05/02/25 13:27:23
#include
の代わりに継承使うのはいくないとおもう。
リストボックスにコンテキストメニューを設定した場合、
右クリックでマウスポインタ直下を自動的に選択してくれないんだね。
左クリック(アイテムの選択)→右クリックをする必要がある。
どうにかならないかな?
>>846 MouseDownイベントでコードから選択。
848 :
デフォルトの名無しさん:05/02/26 07:06:36
850 :
デフォルトの名無しさん:05/02/26 07:57:13
なにぃ?じゃ、環境変数設定してないと、
C:\Windows 以下にごみばら撒かれる可能性ありってことか。
とはいえ、通常 Administrator 権限で一般ユーザのプログラムが動いている
Windowsなら、何でもありだけどな。
Visual Studioで時々、プロパティのインテリセンスがバグるんですけど。
例えば、クラスAでstring Propertyというプロパティがあって
他のクラスからみると補完の項目リストがPropertyじゃなくてget_Propertyってなるんですけど
どなたか知りませんか?対処法とか
Visual Studio のインテリセンスで、列挙型(enum) が表示されないんですが
何か方法があるんでしょうか?
例えば public enum EnumFields.... とある classX にて、
そのクラスを参照している別のクラスで classX. とピリオドまで入力しても
その列挙型が表示されてきません。
ただし、インテリセンスに表示されないだけで、手で列挙のフィールドを
入力してやるとコンパイルは正常に通ります。
インテリセンスに表示されないととっても不便なのですが
何か方法があれば教えてください。
853 :
デフォルトの名無しさん:05/02/26 12:19:41
DataGridクラスのスクロールバーを常時出現させる方法はないでしょうか?
困ったことに、DataGridを継承すればスクロールバーのプロパティメソッド
自体はあるのですが、ShowやVisibleを有効にしても出現しない困ったチャン
なのです。
TreeNodeはFullPathプロパティでフルパスで取得できますが、
その逆にフルパスからTreeNodeを取得することはできますか?
フルパスをPathSeparator
で
Splitして調べていく方法しか知りません。
(twintailで書くとたまに改行おかしくなるなあ)
なにせ同じ階層に同じラベルのノードが存在しうるわけだからな。
あるクラス(A)の持つ読み取り専用のデータ(B)をクラスとして公開すると
参照先で(B)が持つ(C)の内容を変更される可能性がある。
class A{
private B dataB;
public B DataB{ get{ return dataB; } }
}
class B{
private C dataC;
public C DataC{
get{ return dataC; }
set{ dataC = value; }
}
}
クラス(B)のメンバであるクラス(C)も読み取り専用すればいいのだろうが、
そうするとクラス(A)でも変更できない。
解決策として、クラス(B)を構造体にして、
外部にはインスタンスをコピーしたものを公開する、という方法は
構造体の使い方として間違っている?
メンバをコピーするメソッドを書かなくていいし、
データが軽ければ複製の負荷もわずかだろうし。
>> 854
すみません。
852 ですが、Visual Studio 2003 です。
アドバイスよろしくお願いします。
862 :
デフォルトの名無しさん:05/02/26 18:07:22
簡単なUDPファイル転送ソフトをプログラムしております。
string fileURLは"C:\sample.jpg"などの送信するファイルの場所、
string filenameは"sample.jpg"などのように送信するファイル自体のファイル名です。
ReadFile()はバイナリファイルを読み込みバイト配列を返すメソッドです。
System.Net.Sockets.UdpClient udp = new System.Net.Sockets.UdpClient(自分のポート);
byte[] sendBytes = enc.GetBytes(ファイル名 + "?" + Convert.ToBase64String(ReadFile(fileURL), 0,ReadFile(fileURL).Length));
udp.Send(sendBytes, sendBytes.Length, 相手のIPアドレス, 相手のポート);
ファイルをバイナリで読み込み、Base64に変換後、ファイル名を添付して再びバイナリに変換して送信しています。
この方法だと、軽いファイル(数十KBくらい?)なら問題なく送信できるのですが、
重いファイルはバッファが一杯になってしまい、送信できません。
パケットに分けて送信するのでしょうが、イマイチ方法が思いつかなく・・・
宜しくお願い致します。
>>852 854じゃないけど2003もってるので試してみた。現象現れず。
(TestA.cs)
namespace test
{
public class TestA
{
public enum TestAEnum{maso, miso, muso, meso, moso};
public TestAEnum m;
(略)
}
}
(Form1.cs)
namespace test
{
public class Form1 : System.Windows.Forms.Form
{
(略)
private void Form1_Load(object sender, System.EventArgs e)
{
TestA a = new TestA();
a.m = TestA.TestAEnum.maso; //出たYO
}
}
}
>>862 送信できません、ていうのはどういう現象が起こる?
何かエラーがでるってこと?
つかファイルをUDPってのはどうよ。
866 :
862:05/02/26 18:17:43
>>864 そうです。今、スクリーンショットを撮ってきます。
867 :
862:05/02/26 18:20:26
868 :
862:05/02/26 18:22:45
>>865 最初はTCPにするはずだったのですが、某有名なファイル共有ソフトもTCPからUDPに切り替えるとのことだったので、
試しにUDPで作ってみようとチャレンジしてみました。
TCPのファイル転送ソフトは@markITなどに参考となるプログラムがあるので…
ダウソ厨か
死ねよ
870 :
862:05/02/26 18:30:02
いや、単に仕組みに興味があっただけですよ、
871 :
デフォルトの名無しさん:05/02/26 18:35:00
いいやお前からは犯罪の匂いがする。去れ
872 :
862:05/02/26 18:37:32
犯罪って・・・
そもそも、UDPでファイル送信すらできない人間に大それたソフト作れるはずがないでしょうっとw
単に、UDPでファイルを送るだけなのに・・・
素直にTCP使うかなぁ
作れない
ぢゃなくて
作りたいけど実力ぢゃ無理
ってことだろ?w
System.Net.Sockets.UdpClient udp = new System.Net.Sockets.UdpClient(自分のポート);
byte[] sendBytes = enc.GetBytes(ファイル名 + "?" + Convert.ToBase64String(ReadFile(fileURL), 0,ReadFile(fileURL).Length));
udp.Send(sendBytes, sendBytes.Length, 相手のIPアドレス, 相手のポート);
………
ループさせて分割しながら送信すればいいのに・・・
それが無理ならTCP使いなさい。そっちの方が良いぞ。
それにUDPなんて使う香具師いるのかと・・・
届く順番が入れ替わるかもしれんし、面倒きわまりないぞ。
>>852 クラスライブラリのプロジェクトを作ってDLLを作成、xmlドキュメントも出力しておく。
そのDLLを参照する別のプロジェクトを開いているときに、DLLとxmlを更新するとインテリセンスは全く効かなくなる。
xmlを出力してないならDLLを入れ替えてもインテリセンスが効くが、当然コメントの表示はない。
ま、インテリセンスに表示されないだけでコンパイルとかは普通にできるから気にするな。
気になるならVisualStudioを立ち上げ直すが、参照設定を削除して設定し直すかあたりをすれば直るし。
それか、エディタの設定のパラメータヒントやインテリセンスを切っているとか?
パラメータヒントはオフにすることは多いけど、インテリセンスを切る必要はあんまりなさそうだけど。
>873
それは(自分じゃ)作れないと等価だろう
876 :
862:05/02/26 19:37:14
>>873 その分割して送信する方法を具体的にお願いできませんでしょうか??
>>876 普通に一部を取る→送信って繰り返すだけぢゃないの?
詳しくないから分からないけど・・・
ていうかほんとTCPにしとけってばさ。
なんでわざわざUDP?
確実に相手にデータが届く保証ないのに。
>>879 まて、UDP ってそこまで信頼性低かったっけ!?
低いよ
ping の応答率かそれ以下くらいじゃないかな
UDPの方が柔軟性はあるから、TCPだとやりづらいことはUDPで良いと思うけど、
TCPが使えるならTCPが一番だと思うぞ、
>>862さんみたいな場合はまだ初心者のようだから(違ったらスマソ)なおさらTCPの方が良いと思われ。
某P2PソフトってShareでしょ?あの作者は糞だよ、ォ㍗ル
まぁUDPは早いけどねぇ、敢えてスピード重視でソフトを作るならUDPも悪くないと思うぞ。
お 前 ら は T C P 信 者 か …
>>884 ロスしても構わないデータ、あるいはリカバリの手間がかからないデータならUDPでいい。
でもファイルみたいな、それなりに大きくて、ロスを許すわけにはいかず、
整合性のチェックも難しい、なんてデータをUDPでやる気はおきんよ。
うむ、昔、WinMXが流行っていたころやっていたが、たしかあのソフトもファイル交換はTCP、チャットはUDPって分けてたような・・・
フォームの閉じるボタンが押されたときにタスクトレイアイコン化するように書いているんですが、
Form1_Closing()の中で
Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
//タスクトレイアイコン化する処理
e.Cancel = true;
}
にしているんですが、
ttp://homepage3.nifty.com/midori_no_bike/CS/reference.html ここをみるとe.Cancel=true;にしてはだめだと書いてありました。
どうやれば代替できますか?
891 :
デフォルトの名無しさん:05/02/26 21:03:32
>>886 そう言えば確かポートを2つ空けていたな。
同じポートでTCPとUDPの両方同時通信ってやっぱ無理なのかなぁ
>> 863
ありがとうございます。同じ事をしてみましたら、出ました。
あれ?と思い自分のプロジェクトを開いてみたらやはりインテリセンスに
出ません。
で、その列挙が定義してある DLL を参照する小さなプロジェクトを
作ってみましたがインテリセンスに出ます。
むー…。表示されない原因がわからない…。
893 :
デフォルトの名無しさん:05/02/26 21:46:37
適材適所だろ
「TCP信者」とかアホかと・・・
894 :
862:05/02/26 22:03:00
皆さんのご指摘通り、今度はTCPでファイルを送受信しようとしたのですが、
TCPを使ってもやはり重いファイルは送信できません。
http://cdrtest.hp.infoseek.co.jp/cgi-bin/snup/src/VisualVision0051.gif このようなエラーです。
送信側ではファイルを開いてBase64でエンコード、これにファイル名と区切り文字として「?」を加えて一つのファイルにします。
つまり
ファイル名+"?"+Base64でエンコード済みの送信ファイルデータ
という形式になるなります。これをバイト配列にしてストリームに乗せてあげてるのですが、
どうも受信側で逆処理、つまりバイト配列からデコードして、これをファイル名とBase64のデーターに分けます。
そしてBase64にエンコードされたデーターをデコードするときに上のエラーがでるんです。
やはり長さが原因だと思うのですが・・・
895 :
デフォルトの名無しさん:05/02/26 22:08:52
>>894 C#みたいな便利な超高級言語から入るとこういう頭悪いことに
なるんだろうね
とりあえずダウソ厨は板違い
897 :
デフォルトの名無しさん:05/02/26 22:24:36
自作コントロールを作ってるのですが、
マウスクリックしている最中も
MouseHoverイベントを発生させるにはどーすればよいんでしょう?
>>892 中間ファイルとか.suoファイルを一度消してみれば?
ふと気になったんですが、WM_QUERYENDSESSIONとか
WM_CLOSEメッセージとかってEnumになってないのでしょうか?
みなさん、自分でWindows.hからコピペで作ってますか?
900 :
862:05/02/27 00:39:38
すれ違いではないと思うんですが・・・
それにダウソ厨ではありませんよ、
コーディングレベルというか、コンピュータそのものの理解が
ゼロなんだろう
>>899 Enumにはなってなかったと思われます。
必要な分だけコピペなんじゃないかな。
>>900 とりあえずTCPとUDPの利点欠点を調べるところから
はじめてみたほうがいいんじゃなかろうか。
あとBase64がどんな変換方式なのか、とかも。
それでも動かないときにまた聞いてみれ。
904 :
デフォルトの名無しさん:05/02/27 02:47:03
一定時間ごとにアプリの特定機能を実行させたい場合はどうしたらいいですか?
(計算ソフトを使ってて、30分毎に乱数を生成する必要があるんですが、「乱数生成ボタン」を自動的に押したい)
>>904 直接コードをさわれない他のアプリに対してってこと?
906 :
904:05/02/27 03:04:12
そのアプリの実装によって方法が変わる。
「乱数生成ボタン」が普通のWindowsが用意しているボタンの場合
ボタンのIDを調べて親ウィンドウにWM_COMMANDメッセージを送る。
SendMessage( 親ウィンドウハンドル, WM_COMMAND,
ボタンID, ボタンウィンドウハンドル );
>>906 .NETの範疇からは2/3くらいはみ出るが。
FindWindow/FindWindowExでボタンのウィンドウハンドルを見つけて、
PostMessageでBM_CLICKを送ってやる。
すいません・・・ソフト自体に自動実行のオプションがありました・・・orz
ああん
よく聞こえねえなあ
まあ、正直TCP、UDP関係の本一冊ほしいんだけど、
C#だと簡単な本しか邦書だとみつからん・・
マニュアルとかわらんことしかかいてないもんなあ。
あーあー
ぜんぜん聞こえない
そもそもC#の邦書は初心者向けTIPSばっかり
ちゃんとしたことが知りたければ洋書読む気力が要る
914 :
デフォルトの名無しさん:05/02/27 15:30:30
.NET Remotingを勉強しようと思いまして
http://www.unisys.co.jp/club/net_view/20030303.html に書いてあったコードを試したのですが、
同じプログラムからMyServerとMyClientを実行させるとうまくいかないんですけど
(MyServerを裏スレッドで実行した後で、MyClientを実行するようにした)
エラー「追加情報 : チャネル tcp は既に登録されています。」とでてしまいます。
なぜでしょうか、知ってる人いませんか
exeで2つ同時起動で、片方 Server実行、片方 MyClient実行ならばうまくいくのですが
MyServerの裏スレッド実行よりも前にMyClientが実行されてるんじゃないの?
>>911 高度なことは、ほかの言語の本で読めばいいんじゃね?
具体的にはFormつくって
ボタンを二つ
1つにはServerStart、1つにはClientStartとしているので
それはないはずなんですが。。
で、二つ起動して、片方ServerStartをクリック、片方ClientStartをクリック
だとうまくいくんです。うーん。。
ソース出せ
919 :
デフォルトの名無しさん:05/02/27 16:50:56
急いでいるので過去ログも読まないまま失礼します。
C#で、テキストファイルを解析してその結果を画面に戻す処理で、読んだテキストファイルの中身が文字化けしてしまいます。
以下はテスト用に作ったソースです。
読み込んだテキスト文字列の内容(readBuff)によって、表示内容(ddt)を書き換えたいだけですが、以下のソースで、どこを変更すればいいでしょうか?
//表示用DataTableの作成
DataTable ddt = new DataTable("testdt");
ddt.Columns.Add(new DataColumn("name","".GetType()));
ddt.Columns.Add(new DataColumn("result","".GetType()));
//テキストファイル解析
string readBuff = "";
System.IO.StreamReader sr;
sr = new StreamReader( this.filename.PostedFile.FileName );
sr.BaseStream.Seek(0,SeekOrigin.Begin);
while( sr.Peek() > -1 )
{
readBuff =(new ut)sr.ReadLine();
if ( readBuff.IndexOf("ちゃねらー") != 0 )
{
ddt.Rows.Add(new string[]{ "ちゃねらーだった",readBuff } );
}
else
{
ddt.Rows.Add(new string[]{ "ちゃねらーじゃなかった",readBuff } );
}
}
sr.Close();
920 :
デフォルトの名無しさん:05/02/27 16:56:50
すみません。
× readBuff =(new ut)sr.ReadLine();
○ readBuff =sr.ReadLine();
です。
ちょっと長いですけど。
>>918 //@class MyServer
//スレッド実行部分
private static void run(){
TcpChannel channel = new TcpChannel(16383);
ChannelServices.RegisterChannel(channel);
RemotingConfiguration.RegisterWellKnownServiceType(
typeof(MyRemoteObject),
"MyRemoteObject",
WellKnownObjectMode.SingleCall);
Console.WriteLine("Listening for requests. Press Enter to exit...");
Console.ReadLine();
}
//@class MyClient
//登録されたリモートオブジェクト呼び出し部分
public void Execute(){
TcpChannel channel = new TcpChannel();
ChannelServices.RegisterChannel(channel);
MyRemoteObject remoteObject = (MyRemoteObject)Activator.GetObject(
typeof(MyRemoteObject),
"tcp://localhost:16383/MyRemoteObject");
if(remoteObject != null)
Console.WriteLine( remoteObject.ToString());
}
//class MyRemoteObject : MarshalByRefObject .....
>>919 エンコーディングではないですか?
つpublic StreamReader(Stream stream, Encoding encoding)
乱数ならぬ乱文字列を生成する方法で良いと思われる方法はありますでしょうか?
今考えているのは乱数を発生して、暗号化すれば乱文字列として扱えると思うので・・・
C#はソースを見られてしまう為に出来ましたらソースを見られても大丈夫な文字列をランダムに生成したいのです。
どうかお願いします。
乱数を暗号化することによって作成される文字列は
元の乱数よりも精度の劣る乱文字列になるんじゃないかな
暗号化という何らかの規則に基づいて変換されるわけなんだから
>>922 > ソースを見られても大丈夫な文字列
ってのがよくわからんが。
シード値を指定せずに(引数無しで)作ったRandomインスタンスをどこかで使えば、基本的に再現不能になるんじゃないか。
>>922 void get_random_string(char *buf, int len) {
int a,b;
while (len > 0) {
a = rand();
b = len < sizeof(int) ? len : sizeof(int);
memcpy(buf, &n, b);
buf += b; len -= b;
}
}
>>921 同じアプリケーションドメイン内でRegisterChannelを2回やっちゃダメ。
927 :
デフォルトの名無しさん:05/02/27 18:17:47
>>921 919です。
初心者で申し訳ありません。エンコードは、何を設定したらうまくいくでしょうか?
デフォルトはUnicodeになっているようです。
UTF-8でも文字化けします。
>>926 はげしくThanxです。
直りました。
ClientサイドではUriで指定されてるからRegisterChannelしなくてもわかるのか。。
仕組み今一わかってないみたいです。ご迷惑おかけしましたm(_ _)m
>>927 漏れに聞かれてもなぁ^^;
書かれたEncodingじゃないのかな。WindowsならS-JISとか
原因違ったらスマソ
>>927 普通はShift_jisだな。
Encoding.GetEncoding("Shift_jis")とかEncoding.GetEncoding(932)とかOSの言語を日本語にしてるならEncoding.Defaultとか。
>>928 > ClientサイドではUriで指定されてるからRegisterChannelしなくてもわかるのか。。
Uriがどうこうじゃなくて、リモーティングはアプリケーションドメイン単位だから。
「このAppDomainはこのChennel使います」って宣言みたいなもんだと思えば。
930 :
デフォルトの名無しさん:05/02/27 19:48:25
printdocument とか、printersettingsとかといった
印刷関係のソース等を細かく公開しているHPはございませんか?
教えてください。
というか、
private void prndoc_PrintPage(object sender, PrintPageEventArgs e)
{
Graphics g = e.Graphics;
Image image = Image.FromFile(fileinfo[number].FullName);
Rectangle rect = new Rectangle();
// myrect(image, rect);
g.DrawImage(image, 0,0, 667, 970);
// g.DrawImage(image, rect.X, rect.Y, rect.Width, rect.Height);
if (++number < _listFilenames.Items.Count)
e.HasMorePages = true;
else
e.HasMorePages = false;
}
ものすごく動作がとろいです。
Microfoft PhotoEditorで印刷するよりも
ものすごくとろいです。なぜでしょうか。
931 :
デフォルトの名無しさん:05/02/27 19:52:34
>>929 919です。
いけました!!
ありがとうございました。
932 :
デフォルトの名無しさん:05/02/27 19:55:22
C#でDOSコマンド使いたい場合は?
VCなんかではSystem("cd")
でオケだったけど。。。
>>932 System.Diagnostics.Process.Start("C:\\WINDOWS\\system32\\cmd.exe",arg);
934 :
デフォルトの名無しさん:05/02/27 20:32:21
VSのデザイナで、ボタン等に表示する絵を設定したとき、
それは実行ファイルにリソース(?)として埋め込まれるんでしょうか。
自動的にリソースファイルができるのかな、と思ってたんだけど、
それらしいものも見当たらない・・・。
ソースに反映されてるよ。
>>935 プロパティウィンドウのImageプロパティに設定した場合って事だよね。
hoge.csに対するhoge.resxファイルに埋め込まれるよ。
普段は#regionで隠されてる自動生成コードの該当コントロール部分を見てみればどういう風にリソースを呼んでるか分かるだろう。
あちゃ、イメージファイルの事か、
>>936は間違いです。
CLIの資料てないですか?
仕様書とか
ECMA-335
何故にECMA?
JavaScriptと何か関係が?
>>941 CLIの仕様もECMA標準になってますが
ん、ANSIみたいなもん?>ECMA
ECMAはヨーロッパの標準化団体の名称。
ちなみに
ISOなら、C#→ISO 23270、CLI→ISO 23271だぞ。
ECMAなら、C#→ECMA-334、CLI→ECMS-335
まぁISOに登録されたって事は、JISになるのは時間の問題さね。
番号まで覚えている奴きもい
>>947 MSの中の人によるとJISになるらすぃよ。
CLIの日本語の資料ないの?
951 :
デフォルトの名無しさん:05/02/28 07:07:20
Datagridがソートされたのを知らせる方法はないでしょうか?
またソートされたとき内蔵してるDatatable(DataSet)を同じようにソートするにはどうしたらいいでしょう
952 :
デフォルトの名無しさん:05/02/28 21:22:12
画像の指定範囲を切り取って保存するのはどうやったらいいですか?
たとえば、SXGA(1280*1024)サイズの画像の、200*200座標から350*350座標の部分を切り取るとか。
サイズ指定でBitmap作ってGraphics.FromImageしてDrawImageしてSave。
処理に負荷がかかる処理だと、(応答なし)となってしまいすが、
これはスレッドを使えばこの表示は出なくなるのでしょうか?
スレッドは関係ない場合(応答なし)の表示を出なくするには
どのようにすればよいでしょうか?
>>954 非同期処理とかスレッド関連のドキュメントを読み漁ると吉
要はイベント処理スレッドを可能な限り早くスレッドループに戻してあげればいい
>>955 スレッドループじゃなくてメッセージループでしたすまぬ
957 :
デフォルトの名無しさん:05/02/28 23:15:54
タスクトレイに常駐アイコンを持つソフトを作っています(言い方が変??)
今まではメッセージボックスでユーザーに状況などを表示していたんですが、
やはりメッセージボックスは目障りだとのことで、WindowsMessengaerのように
タスクトレイの↑からポコって表示させたいと思っています。
ただ、タスクトレイの↑の場所というのはどのように取得すべきでしょうか?
画面の解像度、Windowsのテーマによっても違ってきてしまいますので・・・
>>957 VBPowerPack でぐぐってみ
NotificationWindow っていうズバリなコンポーネントがあるから
959 :
デフォルトの名無しさん:05/02/28 23:41:13
早速、有り難う御座いました。凄いモノがあるのですね・・・Googleで調べ損ねていました。
もう一つ質問なのですが、NotifyIconでタスクトレイにアイコンを作るとアプリケーションを終了後もアイコンが残ってしまいます。
アイコンの上にマウスを持って行くと消えるのですが・・・
>>959 それが既定の動作。
Application.ApplicationExitイベント当たりでVisible=falseにする。
961 :
デフォルトの名無しさん:05/02/28 23:58:09
追加です、早速NotificationWindowを使ってみました。
凄いですね、本当に便利です。
今までメッセージボックスで行っていた作業を全てこっちにしてしまおうかと・・・
アプリケーション終了後もアイコンが残ってしまう件ですが、
終了前にDisposeさせてもやはり無理でした。
引き続き宜しくお願い致します。
962 :
デフォルトの名無しさん:05/03/01 00:03:20
>>960 あ!入れ違いになってしまいました。
さっそく試してみますね。
963 :
デフォルトの名無しさん:05/03/01 00:52:02
Datagridがソートされたのを知らせる方法はないでしょうか?
またソートされたとき内蔵してるDatatable(DataSet)を同じようにソートするにはどうしたらいいでしょう
964 :
デフォルトの名無しさん:05/03/01 00:53:46
DataGridやListBOXで改行なしで100kbのデータとか
入力されたときのエラー処理はみんなどうしてるのですか?
表示しようとするとGDI+エラー出るし、編集は重くて耐えられない
(Ahtlon64FXでも)何かいい知恵ください。
>>963 > Datagridがソートされたのを知らせる方法はないでしょうか?
表示してるDataTableのDefaultViewのListChangedイベント。
> またソートされたとき内蔵してるDatatable(DataSet)を同じようにソートするにはどうしたらいいでしょう
DataTableはもとより行の並びに意味はないのでその質問はナンセンス。
表示されている行の並びを取得するなら
ttp://dobon.net/vb/dotnet/datagrid/currentrow.html >>964 どうやったらそんな事態になるんだ? コントロールの選択を誤ってるとしか思えないが。
その列は非表示にしといて、別に用意したTextBoxに連結させるとかさ。
どうしても表示しなくちゃなんないのなら、
入力文字列のLengthがある程度大きくなったらSubstringすればいいんじゃない?
元文字列は列をキーにしたハッシュテーブルに格納するとか。
いずれ編集を直接行うわけにはいかないでしょ。ユーザからしても。
967 :
デフォルトの名無しさん:05/03/01 10:10:48
前から疑問に思ってたんすけど、
>>960みたいなアプリケーションを終了するときのイベントって
どうやって記述するんでしょう?
VBをやっていたときはコンボボックスから普通に選択すれば勝手に入力してくれたんですが、
C#だと全然わかりませぬ・・・
968 :
デフォルトの名無しさん:05/03/01 10:20:46
>>967 云いたいことがよくわからんのだが、
Application.Exit()
ぢゃだめなの?
イベントぐらい自分の手で書けるようにしておけ。
その書き方をきぼん
969の口調をまねるなら、
それくらい自分で調べられるようにしておけ。
>>970 Application.ApplicationExit +=
と書いてTabキー2回。
973 :
デフォルトの名無しさん:05/03/01 15:18:18
974 :
デフォルトの名無しさん:05/03/01 16:18:53
リストビューの指定した位置にアイテムを追加する方法ってありますでしょうか?
Items.Addを使うとリストビューの末尾に追加されてしまうのです・・・
Insertを使うにしても、InsertできるのはStringなのでSubItemまでString[]で追加することができません。
Insertで追加したあとに、そのアイテムのサブアイテムを指定すると無論、存在すらしていないのでエラーを吐きます。
リストビューの指定したインデックスにアイテムをAddする方法をご存じの方がいましたら宜しくお願い致します。
>>974 Insert(int, ListViewItem)すればいいじゃないか。