C♯, C#相談室 Part35
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/11/03(金) 03:07:45前スレ
C♯, C#相談室 Part34
http://pc8.2ch.net/test/read.cgi/tech/1157549657/
過去スレは>>2-5あたり。
※スレタイに「#」を入れても消えちゃうので新スレ立てる人は要注意だ。
0611デフォルトの名無しさん
2006/11/27(月) 01:56:43mobileでのwebアプリを作るにあたって、DBから値を引っ張ってきてそれを元にmobilelistitemを作成し、selectionlist.items.add(item)してるんだが、通常はこんなことしないんだろうか?
itemの横にcheckboxをつけてそこを選択してから確認ボタンを押すとチェックのついた項目だけ何か操作を行う、といったことがしたいんだが…。
selectionlistに動的にitemを加える作業をすると確認ボタンを押したときにエラーが起こる。indexが不正だというエラーが出る。なんでだろう?
0612デフォルトの名無しさん
2006/11/27(月) 03:22:03はん、おかしいことにおかしいといったら日本語云々だあ?
たく最近はこんなのばっかだな。
こっちはちゃんと説明してるってのにな。
それともこんな簡単な内容すら理解できん馬鹿だったか。
0613デフォルトの名無しさん
2006/11/27(月) 03:24:16簡潔におながいします
0614デフォルトの名無しさん
2006/11/27(月) 06:29:56まだこんなに煽りに過敏に反応する奴がいるのか。
まだまだ捨てたもんじゃないなwww
0615474
2006/11/27(月) 09:13:010616474
2006/11/27(月) 10:16:59word2003の修復を3回、
word2003の再インストール直後のofficeのアップデート1回
これで直りました。
特に、「word2003の再インストール直後のofficeのアップデート1回
」が決め手だったような気がしました。
みなさんも、僕と同じエラーが出たときには、
決して、OSの再インスコなどせずに、
word2003の再インスコなどを試してみてください。
それじゃ、さようなら、ごきげんよう、へけけのけ。
0617デフォルトの名無しさん
2006/11/27(月) 11:00:43一つ質問だが、>600はintとかstringとかを使ってて
「滅させる処理書かないとと構文的にシンメトリーじゃないじゃん」とか
考えてる?
0618611
2006/11/27(月) 12:39:33要するにmobile用のフォームでチェックボックスが使いたいんです。そこでselectionlistを使おうと思ったんだけど、普通これってすでに中に入るitemが決まってるもんじゃん?例えば男と女を選択させるみたいな。
でも今回はそうじゃなくてDBからとってきたものにチェックボックスをつけて選択させたいのよ。
0619デフォルトの名無しさん
2006/11/27(月) 15:44:02具体的に言えば、リストを二つ並べて、右側のリストをスクロールさせた際に、
左側のリストも連動してスクロールするようなプログラムを作りたいのですが…
WndProcからスクロールイベントを取得する事はできたのですが、そこで行き詰ってしまいましたm(_ _)m
0620デフォルトの名無しさん
2006/11/27(月) 16:37:070621デフォルトの名無しさん
2006/11/27(月) 16:47:20ListView.TopItem
0622デフォルトの名無しさん
2006/11/27(月) 21:38:56インデックス取るだけならLVM_GETTOPINDEX投げるほうが速いかもね。
0623デフォルトの名無しさん
2006/11/27(月) 22:44:35でKeyの長さでソートするようにSortedDictionary<string,int>のコンストラクタに指定したいんですけど
どうすればいいですか?
0624デフォルトの名無しさん
2006/11/27(月) 22:52:12なんてVC++を使っているように思えるが、そんな人にする質問にはとても
思えん
0625デフォルトの名無しさん
2006/11/27(月) 23:13:250626デフォルトの名無しさん
2006/11/28(火) 00:49:030627デフォルトの名無しさん
2006/11/28(火) 01:00:29後は private なインスタンスフィールド辺りだな
0628デフォルトの名無しさん
2006/11/28(火) 01:01:10CLRはフィールドとメソッドの引数が小ラクダ式で、その他は大ラクダ式になってるが。
0629デフォルトの名無しさん
2006/11/28(火) 01:13:500630デフォルトの名無しさん
2006/11/28(火) 01:16:550631デフォルトの名無しさん
2006/11/28(火) 01:27:07http://www.atmarkit.co.jp/fdotnet/special/pdc2005_02/pdc2005_02_02.html
0632デフォルトの名無しさん
2006/11/28(火) 10:22:35>SmtpException
>SMTP サーバーへの接続に失敗しました。
>または
>認証に失敗しました。
>または
>操作がタイムアウトしました。
とあります。
認証失敗等はともかく、このメソッドでタイムアウトが原因でこの例外が発生することはあり得るのでしょうか?
0633デフォルトの名無しさん
2006/11/28(火) 10:41:41別スレッドで起きた冷害はボタン(元スレ)のcatchでは処理できないですよね。
別スレッドの例外をフォーム側で処理したい(メッセージボックスを出すとか)
のですが、どうしたらいいですか?
0634デフォルトの名無しさん
2006/11/28(火) 10:43:35Application.ThreadException
0635デフォルトの名無しさん
2006/11/28(火) 14:26:36これを容易にするコントロールなどは標準で提供されているのでしょうか?
0636デフォルトの名無しさん
2006/11/28(火) 14:31:30なんでもそれで対応出来ると思ってんのか?
0637デフォルトの名無しさん
2006/11/28(火) 14:43:38スレッド内で発生した例外はそのスレッドでcatchする。
必要なら UI スレッド側のフォームのメソッドをinvokeするとかしてユーザに通知する。
処理完了の通知と何ら変わるトコないですよ。
0638デフォルトの名無しさん
2006/11/28(火) 16:09:320639デフォルトの名無しさん
2006/11/28(火) 16:31:39ユーザはtrueを渡して、ランタイムライブラリはfalseを渡すことになっている。
0640デフォルトの名無しさん
2006/11/28(火) 16:43:300641デフォルトの名無しさん
2006/11/28(火) 17:40:35postDataってどーやれば文字列型に変換できますか?
0642デフォルトの名無しさん
2006/11/28(火) 18:03:51if(e.postData != null)
{
s = System.Text.Encoding.ASCII.GetString((byte[])e.postData);
}
てな具合で文字列に変換できる
0643デフォルトの名無しさん
2006/11/28(火) 18:07:07642に加えてmime-encodingかURLEncodeかされてると思うんで、
そいつをdecodeして素のbyte[]にしたうえで、適切なencodingで
GetStringする。
0644デフォルトの名無しさん
2006/11/28(火) 18:11:32641です
ありがとうございます
今のところ、アルファベットと数字だけなので642の方法でうまくいきました
日本語使うようになったら643の方法にトライします
0645デフォルトの名無しさん
2006/11/28(火) 21:36:37文中でカタログの例と言っている彼の論理C#コード(脳内コード)をどなたか補完して頂けないでしょうか。
(できれば次のイベントを使った例まで行きたいのですがここでつまづいています)
ttp://vsug.jp/tabid/63/forumid/51/postid/3057/view/topic/Default.aspx
0646デフォルトの名無しさん
2006/11/28(火) 22:26:11俺はこういう風に理解した。
----
interface IHogeFactory
{
IHoge CreateInstance();
}
static class HogeCatalog
{
private static Dictonary<Type, IHogeFactory> catalog = new Dictonary<Type, IHogeFactory>();
public static IHoge CreateInstance( Type type )
{
return catalog[type].CreateInstance();
}
public static void Regitster( Type type, IHogeFactory factory ) {
catalog[type] = factory;
}
}
class HogeA: IHoge { }
class HogeFactoryA : IHogeFactory
{
public static HogeFactoryA() { HogeCatalog.Register( typeof(HogeA), new HogeFactoryA(); }
public IHoge CreateInstance() { return new HogeA(); }
}
0647デフォルトの名無しさん
2006/11/28(火) 22:40:43ファイナライザでは実行順序が不定のため他のマネージ参照に
触ってはいけないから、ユーザーコードから呼び出されたDisposeと
ファイナライザから呼び出されたDipsoseで処理を分ける必要がある。
C++/CLIでもデストラクタ、ファイナライザはこのパターンを利用して
ILを生成している。雑談だが。
0648デフォルトの名無しさん
2006/11/28(火) 22:41:15一つのFormで2つのBackgroundWorkerをつかっているのですが、
Formでの処理が重ならないように、どこかで同期させたいのですが、
タイミングは手動でとるしかないのでしょうか?
手動でとるにはどのような方法がありますか?
ManualResetEvent などをうまく使うのでしょうか?
どなたか教えてもらえませんか?
0649デフォルトの名無しさん
2006/11/28(火) 22:42:31その程度ならこれくらいでいいんじゃねーかな。
IHoge CreateInstance<T>() where T : IHoge, new()
{
return new T();
}
0650デフォルトの名無しさん
2006/11/28(火) 22:47:01Invokeじゃだめなん?
0651デフォルトの名無しさん
2006/11/28(火) 22:50:36Tをハードコーディングできるなら、直接newするだろ
0652デフォルトの名無しさん
2006/11/28(火) 23:07:57わろた。
newって書くのとかわんねー
ちなみに
Activator.CteateInstance<T>()
てのが標準であるぞw
0653デフォルトの名無しさん
2006/11/28(火) 23:08:35処理はメインスレッドで行われるので同時にってことはあり得ない
0654デフォルトの名無しさん
2006/11/28(火) 23:16:570655デフォルトの名無しさん
2006/11/28(火) 23:27:350656デフォルトの名無しさん
2006/11/28(火) 23:28:32使えるならその方法を教えてください
0657デフォルトの名無しさん
2006/11/28(火) 23:30:34翡翠石よ
クラスを継承させたりした場合で、必ず呼び出してほしい
メソッドがある場合に、インターフェースを入れると、
コンパイラが警告を入れてくれる。
0658デフォルトの名無しさん
2006/11/28(火) 23:31:040659デフォルトの名無しさん
2006/11/28(火) 23:36:31そんな事初めて聞いたわ
0660デフォルトの名無しさん
2006/11/28(火) 23:45:140661デフォルトの名無しさん
2006/11/29(水) 00:41:14多重継承の代わりじゃないのかな?くるみちゃん
0662デフォルトの名無しさん
2006/11/29(水) 00:43:50Microsoft.Win32.NativeMethods.CreateFileMappingを参考に自前でDllImport汁
0663デフォルトの名無しさん
2006/11/29(水) 01:19:39やめておけ
エディタって何の編集するするものか知らんが
テキストエディタは相当難しい。
3Dグラフィックのほうがはるかに簡単。
つか、.NETで実用的なテキストエディタを作ることは不可能と思って
間違いない。
0664デフォルトの名無しさん
2006/11/29(水) 01:31:33SettingProvider から継承して作れって・・・
LocalFileSettingsProvider のタコ!!!
・・・愚痴でした。
みんなは、どうやってる?
アプリケーションの設定保存
0665デフォルトの名無しさん
2006/11/29(水) 01:40:370666デフォルトの名無しさん
2006/11/29(水) 01:47:570667デフォルトの名無しさん
2006/11/29(水) 07:19:290668デフォルトの名無しさん
2006/11/29(水) 12:21:17壊れたらどうするのよ
0669デフォルトの名無しさん
2006/11/29(水) 15:51:22サルベージする
0670デフォルトの名無しさん
2006/11/29(水) 15:53:34http://dobon.net/vb/dotnet/programing/storeappsettings.html
上のサイトで紹介されているアプリケーションの設定を保持するクラスを、”俺”ライブラリに追加しようとして難儀しています。
各々の静的メソッドとシングルトンであることを基本クラスで定義しておき、これを継承するクラスでシリアライズするプロパティを追加したいのです。
試行錯誤してみましたが、「静的メソッドとシングルトンであること」を基本クラスでうまく定義できなくて行き詰っています。
最近ようやくOOPを意識しはじめたので的外れな質問かもしれませんが、指針についてアドバイス頂ければと思います。
0671デフォルトの名無しさん
2006/11/29(水) 16:37:53その時点で破綻してないか?
0672デフォルトの名無しさん
2006/11/29(水) 17:07:36Orz
恥の書き捨てで伺いますが、それなら継承後のクラスをシングルトンにするのは如何なものなのでしょうか。
でも、それだと当初の目論見から外れてめんどうになりそうだなぁ。
0673デフォルトの名無しさん
2006/11/29(水) 17:14:28その程度のシングルトンなら
class MyClass {
static MyClass _cur = new MyClass();
static public MyClass Current {
get { return _cur; }
}
}
でいいんじゃないか?
何のためにがやりたいのか日本語で普通に説明してみて。
0674デフォルトの名無しさん
2006/11/29(水) 17:27:33>>670のURLを参考に、「アプリの設定を保持するためのクラス」を作りました。
シリアライズしたいオブジェクトをプロパティに持たせて使います。
シングルトンなのは「設定が複数できるとマズいから」です。
それを使ってみて便利だったので、シリアライズ用のメソッドと、保存する値を書き込むプロパティを別個のクラスにしたいなと思いました。
ここまで書いておもったのだけど、シリアライズ用のメソッドがstaticである必要は特に無いのかもしれません。
派生したオブジェクトについてはインスタンスが複数できるとマズいけど、>>673で頂いたような手法で良いのかも…。
検討してみまふ。どうもありがとうございました。
0675デフォルトの名無しさん
2006/11/29(水) 17:42:300676デフォルトの名無しさん
2006/11/29(水) 18:53:41VSってRTFでコピーできるんだね。
色がついてて驚いた。
0677664
2006/11/29(水) 20:46:21今まで俺Setting的 Singleton 使ってたけど、
.NET Framework 2.0 での System.Configuration.ApplicationSetting が用意されてるから
わざわざ自分でつくるのは、すでに「車輪の再発明」的かな、と思ったです。
Settings.cs のコンストラクタに、this.Upgrade() 入れておけば
バージョンアップの際、結構自動で管理してくれるみたいだし。
ただ、デフォルトの LocalFileSettingsProvider がタコだなーと
バージョンアップした時の、以前の user.config の扱い次第では
自分で Provider 実装か、LocalFileSettingProvider か、
そこまではよくわかってません。
ttp://msdn2.microsoft.com/ja-jp/library/ms181001(vs.80).aspx
# Mono を意識するなら、現時点では
# 俺Setting になるから、これがベストかどうかはわからない
0679645
2006/11/29(水) 21:17:51レスが遅れて申し訳ありません。補完して頂き大変参考になりました。m(_ _)m
自分は2003なので、多少修正したのと返すクラスがシングルトンでもOKなように
改造しました。一応載せますです。
public interface IHoge
{
void ShowMessage(string str);
}
public interface IHogeFactory
{
IHoge CreateInstance();
}
public sealed class HogeCatalog
{
private static Hashtable catalog = new Hashtable();
public static IHoge CreateInstance( string key )
{
return ((IHogeFactory)catalog[key]).CreateInstance();
}
public static void Register( string key, IHogeFactory factory )
{
catalog[key] = factory;
}
private HogeCatalog(){}
}
0680645(続き)
2006/11/29(水) 21:18:15{
public static void Register() { HogeCatalog.Register( "A", new HogeFactoryA()); }
public IHoge CreateInstance() { return HogeA.CreateInstance(); }
private HogeFactoryA(){}
}
sealed class HogeA: IHoge
{
private static HogeA myclass = new HogeA();
public void ShowMessage(string str)
{
Console.WriteLine(str);
}
public static HogeA CreateInstance()
{
return myclass;
}
private HogeA(){}
}
[STAThread]
static void Main()
{
HogeFactoryA.Register();
IHoge hoge = HogeCatalog.CreateInstance("A");
hoge.ShowMessage("ぬるぽ");
}
0681デフォルトの名無しさん
2006/11/30(木) 00:37:44これってEclipseのような自動インポート機能ってないのでしょうか?
いちいち
using
を自分で書いていかなきゃだめっすか?
0682デフォルトの名無しさん
2006/11/30(木) 00:54:320683デフォルトの名無しさん
2006/11/30(木) 00:54:540684デフォルトの名無しさん
2006/11/30(木) 01:18:32Ctrl+スペース
0685デフォルトの名無しさん
2006/11/30(木) 01:23:01それだと
using
追加知れくれませんでした。
eclipseなら追加してくれるんだけど・・。
0686デフォルトの名無しさん
2006/11/30(木) 01:34:430687デフォルトの名無しさん
2006/11/30(木) 02:00:34最初に使うときに型名を明示的に書かせてusingに追加させるスタイルなんだね
0688デフォルトの名無しさん
2006/11/30(木) 08:44:20パスから鋭角を丸める→パスグラディエントブラシ?
0689デフォルトの名無しさん
2006/11/30(木) 10:28:28ReSharperっつーアドオンいれるとQuickFixでusingの追加できる。
けど、アドオンってことでVS2005 Expressだと無理で、ReShaperも有料だ。
ReSharperいれると、リファクタリングもeclipseレベルにまで拡張される。
0690デフォルトの名無しさん
2006/11/30(木) 17:37:21なんつーか( ゚Д゚)<氏ね!
0691デフォルトの名無しさん
2006/11/30(木) 17:53:21印刷と表示と色の設定で別々になってるよ
0692デフォルトの名無しさん
2006/11/30(木) 18:10:16それ設計思想が間違ってるだろう。
0693デフォルトの名無しさん
2006/11/30(木) 18:14:05画面でみるときには黒背景にしてるやつってたまにいるぞ。
うちの会社にも1人いる。
0694デフォルトの名無しさん
2006/11/30(木) 18:37:14テキストエディタの設定をコピーする機能があるから問題なし
0695デフォルトの名無しさん
2006/11/30(木) 19:21:430696デフォルトの名無しさん
2006/11/30(木) 19:24:480697デフォルトの名無しさん
2006/11/30(木) 19:31:29無効にしてどうしたいんだ?
0698デフォルトの名無しさん
2006/11/30(木) 19:33:560699デフォルトの名無しさん
2006/11/30(木) 20:01:29蛍光灯凝視しているようなもの。
黒地に白がベター
印刷は別設定できるほうが絶対優れていると思うが、>>692みたいに
ねじ曲がった奴もいるんだな。
0700デフォルトの名無しさん
2006/11/30(木) 22:07:30薄緑地に黒が良い
0701デフォルトの名無しさん
2006/11/30(木) 23:53:490702デフォルトの名無しさん
2006/12/01(金) 09:38:10当方 CRT で背景 rgb(215,215,215)
結構見易い
0703デフォルトの名無しさん
2006/12/01(金) 16:05:00ユーザIDとパスワードを入力して、ログオンする機能をつけたいのですが、作り方の定石があれば教えてください。ID/Passは両方ともサーバ側で認証を行います。
ちなみに前身のAccessアプリではID/Passテーブルというものが設けられていました。
0704デフォルトの名無しさん
2006/12/01(金) 19:32:11ODBC接続の接続文字列変えるだけでいいのかも。
0705デフォルトの名無しさん
2006/12/01(金) 22:01:25PropertyGridで、項目を展開できるようにしたはいいのですが、その数値変化した時にイベント取得が出来ません。
基本的に、位置は関係なく起こりさえすればいいのですが、ABCの値変化はMyClassChangedが発生しません。
結果、ABC変化は取得できない状況です。この取得は難しいでしょうか?
ソースはこんな感じです。
0706デフォルトの名無しさん
2006/12/01(金) 22:04:05public Class Class1
{private CustomClass myClass;
public event EventHandler MyClassChanged;
public Class1()
{ myClass.DataChanged += new EventHandler(Triggar);}
[DefaultValue(0,0,0)]
public CustomClass MyClass
{get{return myClass;} set{ myClass = value; Triggar(); }}
public void Triggar()
{if(MyClassChanged != null) MyClassChanged(this,EventArgs.Empty);}}
public Class CustomClass
{private int a,b,c;
public event EventHandler DataChanged;
public CustomClass(){a = 0; b = 0; c = 0;}
public int A
{ get{return a;} set{a = value; Triggar(); }
public int B
{ get{return b;} set{b = value; Triggar();}}
public int C
{ get{return c;} set{c = value; Triggar(); }}
public void Triggar()
{if(DataChanged != null) DataChanged(this,EventArgs.Empty);} }
0707デフォルトの名無しさん
2006/12/01(金) 22:12:010708デフォルトの名無しさん
2006/12/01(金) 22:12:190709デフォルトの名無しさん
2006/12/01(金) 22:13:14public class Class1{
private CustomClass myClass;
public event EventHandler MyClassChanged;
public Class1(){
myClass.DataChanged += new EventHandler(Triggar);
}
[DefaultValue(0,0,0)]
public CustomClass MyClass{
get{return myClass;} set{myClass = value; Triggar();}
}
public void Triggar(){
if(MyClassChanged != null) MyClassChanged(this,EventArgs.Empty);
}
}
public class CustomClass{
private int a,b,c;
public event EventHandler DataChanged;
public CustomClass(){ a = 0; b = 0; c = 0; }
public int A{
get{return a;} set{a = value; Triggar();
}
public int B{
get{return b;} set{b = value; Triggar();}
}
public int C{
get{return c;} set{c = value; Triggar();}
}
public void Triggar(){
if(DataChanged != null) DataChanged(this,EventArgs.Empty);
}
}
0710酔いちくれ ◆J0rwikii8c
2006/12/01(金) 22:14:21■ このスレッドは過去ログ倉庫に格納されています