くだすれ.NET(超初心者向け) at TECH
[2ch|▼Menu]
[前50を表示]
650:デフォルトの名無しさん
08/07/21 20:11:57
ないな…あってもいいと思ったんだが。
手抜くなら、Regex.Replace関連で代用かな…


651:デフォルトの名無しさん
08/07/22 23:34:14
セットアップウィザードを使ってインストーラーを作成しています。
ReadMe.txtのショートカットをプログラムメニューに配置したいのですが、アイコン関係がよく判りません。

手順としては、
アプリケーションフォルダにReadMe.txtを追加する。
ReadMe.txtのショートカットを作成する。
このショートカットをユーザーのプログラムメニューに配置する。
(プロパティはいじっていません。)


実際にインストールしてみると、問題なくReadMe.txtは表示されるのですが、アイコンが、%APPDATA%\Microsoft\Installer
\xxx.exeにあるアイコンが表示されます。

他のプログラムメニューに登録されているReadMeのように、txtファイルに関連付けられたアプリケーションの
アイコンが表示させたいのですが、どこをいじればよろしいでしょうか?
よろしくお願いします。





652:デフォルトの名無しさん
08/07/23 15:10:07
Microsoft.Office.Tools.ExcelとMicrosoft.Office.Interop.Excelの違いがよくわかりません。
それを知りたいのと、
単純にCUIでExcelファイル(.xls)を読み込んでバイナリデータにコンバートしたい場合、

どちらを使えばいいのでしょうか?


653:デフォルトの名無しさん
08/07/26 17:55:38
Visual Basic 2008 Express Editionをインストールして
新しくプロジェクトを作成してみると、以前までコードが自動生成されていたのが
生成されなくなってしまいました。

ex)
Public Class Form1

End Class

のような感じでしか出力されていない状態です。
何か設定を弄らないといけないのでしょうか?

654:デフォルトの名無しさん
08/07/26 18:41:07
>>653
今頃それに気づくということは以前というのはVS2002とか2003なのか?
プロジェクトのすべてのファイルを表示でForm1.Designer.vbが表示されるからそこにいろいろ入ってる。

Sub Newを書かないときにInitializeComponent()を誰が呼んでるのだという問題だったらまた話が違う。


655:デフォルトの名無しさん
08/07/26 21:21:10
>>654
以前に使用していたのは2005です。

問題の解決ができまして
原因は私の勘違いでボタンオブジェクト作成⇒自動挿入と思っていました。
ボタンオブジェクトでダブルクリックしないといけなかったという…
お答えくださりありがとうございました。


656:デフォルトの名無しさん
08/08/09 15:06:32
質問です。
フォルダAppの中にBase.dllとModA.dllが存在しています。
このフォルダのdllはすべてVB.NET(1.1)で書かれており、
Base.dllの中には継承フォームの親クラスなど、
ModA.dllの中にはBase.dllを利用(参照)して作った実際の画面クラスなどがあります。

Base.dllは頻繁に更新されており、
ModA.dllの参照に設定されているバージョン番号よりもかなり新しい状態です。

現状、この内部だけの動作なら問題なく動いています。

現在、新しいWindowsアプリを作成中で、
C#で作ったアプリからModA.dll内の画面クラスを
System.Reflectionを使用して動的に呼び出したいのですが、
Base.dllを継承したフォームを呼び出そうとした瞬間に
「Base.dllが見つかりません。」というExceptionを投げられてしまいます。

・Base.dllとModA.dllは必ず同じAppフォルダに入っている
・Appフォルダそのものの位置は移動可能
・新アプリでは、Appフォルダの位置をユーザーに指定させる
・新アプリの位置も移動できる方が望ましい。

という条件で、上記のExceptionが出ないようにすることは可能でしょうか?
助言をお願い致します。

657:デフォルトの名無しさん
08/08/09 19:36:19
>>656
いろいろ書いてる割には見事にポイントをはずして要領を得ないね。
とりあえず言えることは、「出来るはず、やり方が悪い」

658:656
08/08/09 20:31:55
>>657
では、正しいやり方を教えてください。

659:デフォルトの名無しさん
08/08/09 20:53:21
それは657にエスパーであれっていってるのと同義だと思うけど

660:デフォルトの名無しさん
08/08/09 20:57:54
C#が1.1なのか他のバージョンなのか。
リフェレクションはAssembly.LoadFromを使っているのかそれとも別の方法か?
リフェレクションで読み込んで呼び出している部分のソースをさらす。
VBで同じ手法のリフレクションを使って実現できているのか。
「Base.dllが見つかりません。」じゃなくてスタックトレースを出せ。
E伊東さんとお知り合いか?

とりあえず、このくらいは書いとけよ。

661:デフォルトの名無しさん
08/08/09 22:44:55
リフェレクションえろいな

662:デフォルトの名無しさん
08/08/09 22:47:14
>>656
無理。
依存してるライブラリが更新されたらコンパイルしなおす必要がある。
さもなくば、動的にクラスを構成しないといかん。

663:デフォルトの名無しさん
08/08/09 23:16:46
厳密名を使ってるなら話は別だがPublicKeyToken=nullのときはVersionのチェックはない。


664:デフォルトの名無しさん
08/08/10 20:55:34
LoadFromが原因だろう。
厳密名とかの話じゃない。

LoadFromで読んだ場合、自動的に同じフォルダのBase.dllを
読んだりはしてくれない。
AssemblyResolveなどで自分でハンドリングして読み込むか、
事前にBase.dllもLoadFromで読んでおくことはできる。

でも、アプリのフォルダを自由に指定とかなってくると、
たぶんどっかでトラぶってにっちもさっちも行かなくなると思うぞ…


665:デフォルトの名無しさん
08/08/11 19:50:24
フォーム1で使っている変数(数字の1〜100)を
フォーム2にとばして使いたいのですが、どうすればいいのかわかりません。

自分で調べた所、プロパティを設定すればいいとのことでした。
URLリンク(homepage1.nifty.com)

ここを参考にして色々とやってみたのですが、
どうもうまく実際に使っているXの値を別のフォームに送れません。

どうか、ヒントをください。

666:デフォルトの名無しさん
08/08/11 20:13:58
[ヒント]
プログラミングに王道なし。

いやまじめな話、そのレベルから掲示板で解説しろってそりゃ無理あるぞ。

667:656
08/08/11 22:59:52
>>660
C#は1.1です。
try
{
 Assembly a;
 a = Assembly.LoadFile("C:\App\ModA.dll");
 foreach(Type type in a.GetTypes())
 {
  if(type == typeof(インターフェース))
  {
   return true;
  }
 }
}
catch(Exception e)
{
 MessageBox.Show("エラー発生");
}

ソースはこんな感じです。スタックトレースってのはよく分かりません。
ごめんなさい。

>>664
Base.dllを先に読み込めばいいんですね。
明日試してみます。

668:デフォルトの名無しさん
08/08/11 23:05:34
ってしかもLoadFileじゃねーかよ

669:デフォルトの名無しさん
08/08/11 23:28:49
>a = Assembly.LoadFile("C:\App\ModA.dll");

もしかして〜
a = Assembly.LoadFile(@"C:\App\ModA.dll"); 
とか
a = Assembly.LoadFile("C:\\App\\ModA.dll"); 
で直ったりして

670:デフォルトの名無しさん
08/08/11 23:44:47
まさかね
まあBase〜っていってるから違うと思うけど。

しかしなー、LoadFromやLoadFile系はトラブるんだよなー
できればフォルダを自由に指定ってのはやめた方が無難だけどなー


671:デフォルトの名無しさん
08/08/11 23:50:07
LoadFileはいろいろ制限が多いし、
LoadFromは署名がないと相対パスしかダメなんだっけ。
やっぱ構成ファイルを書きまくるとか。

672:デフォルトの名無しさん
08/08/12 00:25:37
MSDNから
>LoadFile は、LoadFrom メソッドとは異なり、ファイルを LoadFrom コンテキスト内には読み込みません。
>また、読み込みパスを使用して依存関係を解決することもできません。

ModA.dllのあるディレクトリから依存のあるBase.dllを探してくれない

673:656
08/08/12 00:41:21
>>669
書き込みミスです。@付きになってます。すみません。


LoadFromにすれば直るのでしょうか?
>>664の先に読み込むというのが気になるので、
それをまず試してみようと思います。

どちらにしても今すぐ確認はできませんので、
確認し次第再度書き込みます。

いろいろ助言をありがとうございます。

674:デフォルトの名無しさん
08/08/12 00:45:38
>>664はLoadFileの制限ぽい感じだな


675:デフォルトの名無しさん
08/08/12 00:53:41
C#でアプリ作ってるのですが、.NET Framework入ってない環境で起動した場合、
強制終了になる前に任意のメッセージ出して終了するにはどうすればよいでしょうか?


676:デフォルトの名無しさん
08/08/12 08:07:28
環境を調べるネイティブアプリ作って、入って無ければエラー出して終了、
入っていればC#アプリを起動するとか。

677:デフォルトの名無しさん
08/08/12 13:27:53
>>676
そのつもりでDOSスタブみたいな形で埋め込めればいいなぁと
あれこれ模索してたりしてたんですが、やっぱ分けるしかないでしょうか。

678:デフォルトの名無しさん
08/08/12 14:33:44
>>677
先頭のほうにmscoree.dll::_CorExeMainを呼ぶjmp命令があるから、
その飛び先を変えてやればいいと思う。

ちなみに、XP以降のWindowsローダーはマネージドアセンブリを読み込んだ場合、
このネイティブなスタブコードを実行せずに、_CorExeMainから直接実行し始める。

679:678
08/08/12 15:15:17
何が言いたいのかよく分からない文章になってたけど、
要するにXP,Vistaあたりでは必要なバージョンのランタイムがないときに、
実行前に任意のメッセージを出すことはできない言うことです。

スタブコードを書き換えるのはやったことがないけど、そこに感染するウイルスがいくつかあるんで、
もしかしたらアンチウィルスソフトウェアに文句言われる可能性はあるかもしれないですね。

680:656
08/08/13 00:01:05
LoadFromを使用して、先にBase.dllを読み込んでおけば
無事動くようになりました。

新たな問題はいくつか出てくるようになりましたが、
今のところ少しずつ解決していけてるので大丈夫だと思います。

丁寧な回答ありがとうございました。

681:DD
08/08/20 13:29:19
ASP.NET2.0のGridViewで質問があります。使用言語はC#です。
1つの画面に以下のコントロールがあります。
・TextBox (TextBox1)
・Button (Button1)
・GridView (GridView1)
・SqlDataSource (SqlDataSource1)
TextBox1に検索する主キーの値を入れ、Button1をクリックすると、
その主キーの行の背景色を変更する、といったことをやりたいと思っています。
GridView1のSelectedRowStyleのBackColorに適当な色を指定して
DataBoundイベントでGridView1.DataKeys[i].Valueをループで検索。
見つかったらGridView1.SelectedIndex = iとすることで
ほぼやりたいことは実現できています。

この状態でGridView1のAllowPagingをTrueに設定し、
Button1クリック時に、検索してヒットした行のあるページに
自動的に切り替えるにはどのようにすればよいのでしょうか?
現状のコードでは、現在のGridView1のページしか検索出来ないためうまく出来ません。
どなたかご教授願えないでしょうか?

682:デフォルトの名無しさん
08/08/22 14:15:56
>>681
PageIndexで表示したいページを設定できる

683:デフォルトの名無しさん
08/08/23 09:19:12
VC# 2005とWindows Forms(.Net Framework 2.0)でOfficeライクにお絵かきできるコントロールを探しています。

実はVisioのDrawing Control(ActiveXベース)がやりたいことを網羅しているのですが、
アプリケーションを動作させる全ての端末にVisioを入れなければいけないので
泣く泣くあきらめました。
URLリンク(www.c-sharpcorner.com)

実行環境が無料で何か良いコントロールをご存知の方は
お教え頂けますでしょうか。よろしくお願いします。

684:デフォルトの名無しさん
08/08/23 22:54:37
VC++2005EEとForm(.NET2.0)で作ったアプリを配布したいのですが
どのような配布形式が一般的でしょうか?
VS.net2003bootstrapper plug-inのようなものがあれば使いたいです。

685:デフォルトの名無しさん
08/08/24 02:37:40
.NET2.0はかなり普及してるし、そのままでも良いとは思う。

必要ならこの辺を参考に
URLリンク(dobon.net)

686:DD
08/08/25 18:12:57
>>682
PageIndexで表示したいページを設定できることは分かっております。
問題なのは、DataBoundイベントでGridView1.DataKeys[i].Valueをループで検索した場合、
現在のPageIndex内のデータしか検索できないのです。
やりたいのは、全てのページを検索し、ヒットしたらそのページを表示することです。
DataBoundイベントではなく、何か別のイベントで検索する必要が
あるのではないかと思うのですが、
そのイベントが何なのかが分かりません。
どのようにしたら良いのでしょうか?

687:デフォルトの名無しさん
08/08/25 22:01:53
GridViewではなく、DataSource自体をぐるぐる回って調べていくとか。
泥臭いかw

688:DD
08/08/27 13:39:15
>>687
例えばDataSource自体をぐるぐる回って調べるとしたら、
どのイベントを捕まえればよいんでしょう?
実はそれをやろうとしてみたんですが、どのイベントで処理すればよいのか
分からなくて・・・。


689:デフォルトの名無しさん
08/08/27 23:57:48
一端DataViewに取って、後はそれ使えば?
常識的に考えて並びは一緒だから、現在のページ×1ページあたりの行数+indexで行けるハズ

690:デフォルトの名無しさん
08/08/28 10:34:42
>>687
泥臭いも何もそれが正しいやり方だと思うんだが。
>>688
イベントって、Button1のクリック以外に何があるん?
GridViewのDataSourceにセットしたものがDataTableオブジェクトだった場合、
Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
If e.Row.RowIndex = -1 Then Return
If e.Row.Cells(1).Text.Contains(Me.TextBox1.Text) Then
' 検索ワードが入っている行の背景を緑に
e.Row.BackColor = Drawing.Color.LightGreen
End If
End Sub

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim rIndex As Integer
Dim tbl As DataTable = CType(Me.GridView1.DataSource, DataTable)
For rIndex = 0 To tbl.Rows.Count - 1
If tbl.Rows(rIndex)(1).ToString().Contains(Me.TextBox1.Text) Then
' 検索ワードが見つかったらループから抜ける
Exit For
End If
Next
' ページインデックスを算出
Dim pIndex As Integer = rIndex \ Me.GridView1.PageSize
' GridViewに算出したページインデックスをセット
Me.GridView1.PageIndex = pIndex
' 適応実行
Me.DataBind()
End Sub

691:DD
08/08/28 18:27:18
>>689
一端DataViewに取る、その方法が分からないんです(T_T)
そこのところ、ご教授願えないでしょうか。

>>690
Dim tbl As DataTable = CType(Me.GridView1.DataSource, DataTable)
とありますが、当方C#なもので、よく意味が分かりません(^^ゞ
C#で書くと
DataTable tbl = (DataTable)GridView1.DataSource;
なのかな、と思って試してみましたが、GridView1.DataSourceがNULLでうまくいきませんでした。


692:DD
08/08/28 18:42:28
>>689
>>690
おかげさまで解決いたしました!
以下のコードでDataTableに取り出すことが出来ました。
DataView dv = (DataView)SqlDataSource1.Select(DataSourceSelectArguments.Empty);
DataTable table = dv.Table;
丁寧な解説、どうもありがとうございました。


693:デフォルトの名無しさん
08/09/01 20:47:23
C#で作ったプログラムからExcelを操作するプログラムを作りたいのですが、
Excelを操作する方法についてインターネットで調べてみると
どうやらExcelのバージョンによって参照設定するCOMってやつのバージョンが違うみたいです。

今作ってるプログラムをそのまま実家にメールで送って使ってもらう予定なのですが、
COMのバージョンが違うと正しく動かない可能性もあるのでしょうか?

使う予定の機能はExcelを読み込んで決まった位置に値を書き込むぐらいなんですが、
不具合を起こしにくいコツなどがあれば教えてください。

694:デフォルトの名無しさん
08/09/01 21:33:36
> 不具合を起こしにくいコツ
.NETでOfficeのCOMを利用しないというのが一番の対策じゃないかw
xlsファイルなどを直接操作できるライブラリを使うのがお勧め

695:デフォルトの名無しさん
08/09/01 21:40:40
>>694
すみません、できれば.NETを使用することを前提にお願いします。
COMって、自分で作ったdllみたいにReflectionで動的に探してきたりはできないんでしょうか?

696:デフォルトの名無しさん
08/09/01 22:17:30
それはできる。
でもメンバアクセスまで全部リフレクションでやる羽目になる。

悪いことは言わないからせめてVB.NETにしとけ。


697:デフォルトの名無しさん
08/09/01 22:59:19
>>696
ありがとうございます。
とりあえずGoogleってた結果、
Type.GetTypeFromProgID()というのを見つけたので実装はできそうです。

VBを1から勉強するかは後で考えるとして、
COMを動的参照するときって、普通はどういうクラスのどういうメソッドで参照先dllを探すのですか?

今までは自分で作ったdllを動的参照することしかしたことがなかった上、
インターフェースは静的に参照してそれを実装したクラスをReflectionで見に行く
ってことしかしたことがないので、COMの一般的な探し方を教えてくれませんか?

名前はともかくとして、COMのdllがある場所ってどうやって調べるんですか?

698:デフォルトの名無しさん
08/09/01 23:11:05
>>697
レジストリ(HKCR)を探せば見つかるが、プログラミング目的では普通やらない。
みんなProgIDとかClsIDとかで識別するから。

それに、DLLなら直接読み込んでオブジェクトを作ることも可能だが、
EXEに実装されているとどの道COMのAPIを介さないといけない。

699:デフォルトの名無しさん
08/09/02 00:19:01
>Type.GetTypeFromProgID()
を使うんだからおかしなことを考える必要はない。

問題は、インターフェイスを参照できないから、
メソッド呼び出しとかまですべてリフレクションでやらなきゃならないこと。


700:DD
08/09/02 11:03:35
>>697
とりあえず、VC#2005なら、ソリューションエクスプローラーの参照設定右クリックから
参照の追加。
COMタブを選択して、Microsoft Excel XX.X Object Library を選択して
OKボタンクリック。
これで一応使える。
COMオブジェクトは最後に必ず開放。こんな感じでどうでしょう。

/// <summary>
/// COM オブジェクトの参照カウントを解放する
/// </summary>
/// <param name="comobj">COMオブジェクト</param>
private void ReleaseComObject(Object comobj)
{
    // COMオブジェクトだったら
    if (comobj != null && System.Runtime.InteropServices.Marshal.IsComObject(comobj))
    {
        try
        {
            System.Runtime.InteropServices.Marshal.ReleaseComObject(comobj);
        }
        catch { }
        finally
        {
            comobj = null;
        }
    }
}



701:デフォルトの名無しさん
08/09/02 12:14:10
>>700
それだと複数バージョンのExcelに対応できないだろ>>693読め。

702:DD
08/09/02 13:11:52
>>701
あ、その通りですね(^^ゞ
以前Excelを扱った時はSpreadsheetGearを使ったので
COMを使った操作は良く分からないです。。。
サードパーティのライブラリを使用したくないとのことですので
これは使えませんね。
お役に立てずm(__)m

703:デフォルトの名無しさん
08/09/02 15:25:27
> comobj = null
意味ないじゃんw

704:DD
08/09/02 15:26:49
>>703
ですね(^^ゞ
はった後私もそう思いました。

705:デフォルトの名無しさん
08/09/02 19:07:53
>>701
バイナリになってしまえば問題ないんだよ。
「複数バージョンのExcelに対応できない」のはあくまで開発環境のみ。

一部バージョンが違うと例外が発生するメソッドがあったりするけど、
そこだけ個別に対応すれば問題ない。


706:697
08/09/02 21:11:51
いろいろなご解答ありがとうございます。

今回は複雑なエクセル操作をするわけではないので、
すべてリフレクションでやるクラスを作って、それを使いまわそうと思います。
ありがとうございました。

707:デフォルトの名無しさん
08/09/02 21:33:39
VBでクラスライブラリ作った方が簡単だと思うけどな。

708:デフォルトの名無しさん
08/09/02 23:26:51
>>705
え?まじで?
うっそーん?


709:デフォルトの名無しさん
08/09/04 20:20:35
VBAではセルの文字列の色をCellsのCharactersで調べられるのですが
.NETではどうればいいのでしょうか?

msdnにはRangeにCharactersがあるのですが
書いてみると定義がありませんと
エラーがでます。
using Excel = Microsoft.Office.Interop.Excel;

var xls = new Excel.Application();
var book = xls.Workbooks.Open(略
var rng = (Excel.Range)book.sheet.Cells[1, 1];

こんな感じでRangeクラスを取得してます。
ちなみにVS2008SP1を使っています。

710:DD
08/09/08 10:36:38
>>709
rng.Font.Color
で取得できるのでは?

711:709
08/09/08 19:52:53
>>710
すいません、質問の内容を微妙に間違えてました。
取得したいのは文字列のn番目の文字の色なんです。
Characters(4, 1).Font.ColorIndex
と書くとVBAでは4文字目の色の取得や設定が
出来るんです。

それだと多分セルに設定された文字列の色になるんですかね?

712:デフォルトの名無しさん
08/09/08 21:09:12
net導入するときはVB6を残したままでもいいですか?

713:DD
08/09/09 11:55:55
現在Visual Studio 2005 C#で以下のようなことを実現したいと考えております。
DropDownList(値にはIDが入っている)で選択した項目に一致するレコードをGridViewに表示する。
DropDownListにはALLという項目があり、これを選択すると
すべてのレコードを表示する。
このようなことをやりたいのですが、どうやったらいいのか分かりません。
現状ではALLを静的に追加しており、その値は0となっています。
また、GridViewのデータソースにSqlDataSourceを割り当て、
SqlDataSourceのSelectParameter(ID)にDropDownListの
SelectedValueを設定し、ALL以外の項目を選択した場合は
正常に動作しています。
どなたかご教授ください。

714:DD
08/09/09 12:06:29
自己解決しました。
URLリンク(bunise.seesaa.net)
このページを参考にしてやってみてはいたのですが、なかなかうまくいかず
質問させていただきました。
結局は、SqlDatasourceのCanselSelectOnNullParameterをFalseにするのを
忘れていただけでした(^^ゞ
お騒がせいたしました。

715:デフォルトの名無しさん
08/09/09 23:36:55
.NET2005環境を利用しています。

Private Sub ShowMsgBox(ByVal PromptText As String, Optional ByVal Type As Integer = 0, _
Optional ByVal Title As String = "")
に対して、配列CmdArgsの1番目(0番目ではない)〜3番目の要素を
引数として渡したいのですが、2番目・3番目の要素は省略される可能性があります。

呼び出しについて例としてPerlで書くと、「$ShowMsgBox(CmdArgs[1..$#CmdArgs]);」のように
不定要素数の配列をインデックス1から最後まで指定して投げることが出来ますが、
VBではどのような形で呼び出せばいいでしょうか。

要素数を判別して、条件毎に呼びだし方を変更するしかないでしょうか。

716:デフォルトの名無しさん
08/09/09 23:58:56
>>715
ShowMsgBox(ParamArray args as Object())でも多重定義しとくとか。
まあどのみちその中で要素数を調べてToStringして別のシグネチャのShowMsgBoxを
呼び出すコードを書くわけで、同じといえば同じかもしれないけど。

っていうか趣味の問題かもしれんがOptionalは使わない方がいいんじゃないか?

717:715
08/09/10 00:20:30
>>716
なるほど、即レスありがとうございます。

要素数判定で呼び出し方を返る、という形で書いてみましたが
かなり冗長な呼び出し方になってしまい、本末転倒な感じがしてきました。

If CmdArgs.Length > 3 Then
ShowMsgBox(CmdArgs(1), CmdArgs(2), CmdArgs(3))
ElseIf CmdArgs.Length > 2 Then
ShowMsgBox(CmdArgs(1), CmdArgs(2))
Else '←必ず0、1番目の要素は定義されている
ShowMsgBox(CmdArgs(1))
End If

ShowMsgBox側で配列としてまとめて受け取ってから、
処理した方が良さそうですね・・・。

>Optionalは使わない方がいいんじゃないか?
C感覚で勉強中だったので、多重定義が可能なことを忘れていました。
もう少し勉強してみます(`・ω・´)

718:デフォルトの名無しさん
08/09/10 01:26:13
ドレミファソラシドの周波数を算出するため、十二平均率
Wikipedia項目リンク
の周波数比を計算させたいのですが、ExcelのPOWER関数のような累乗根計算の方法はありませんか?

719:デフォルトの名無しさん
08/09/10 01:36:09
Math.Pow

720:デフォルトの名無しさん
08/09/10 02:17:05
>>719は累乗と累乗根の違いすら分かってないから参考にしないように。

721:デフォルトの名無しさん
08/09/10 03:17:17
ニヤニヤ

722:デフォルトの名無しさん
08/09/10 08:55:11
Math.Pow( >>720, 1.0/12.0);


723:デフォルトの名無しさん
08/09/10 11:37:07
>>720
やる夫

724:718
08/09/10 12:12:07
>>719,722
ありがとうございます!
以下のようにしたら十二平均律の周波数を算出できました。

Dim i As Integer, fr(12) As Double
For i = 0 To 12
    fr(i) = Math.Pow(Math.Pow(2, i), 1.0 / 12.0)
Next

725:722
08/09/10 12:35:12
>>724
素直に
Math.Pow( 2.0 , i / 12.0)
と書くべし

726:デフォルトの名無しさん
08/09/10 12:49:08
ワロタ

727:デフォルトの名無しさん
08/09/10 12:53:46
素直なのは>>724なんじゃない?
整理したら>>725だけどさ

x  _
 √a  = a^(1/x)

であるから、

x  __
 √a^b = (a^b)^(1/x)

となり、十二平均律では、x = 12, a = 2, b = (1から12)となるので、

12 __
 √2^b = (2^b)^(1/12)

bをiとして、

2^i = Math.Pow(2,i)

これにより、

Math.Pow(Math.Pow(2, i), 1.0 / 12.0)

728:デフォルトの名無しさん
08/09/10 13:02:47
意味が分からずに言われたとおりに簡略化して書いてる奴って職場だとホント困るんだよな・・・。

729:デフォルトの名無しさん
08/09/10 13:04:56
中学数学でしょ

730:722
08/09/10 13:09:00
主観入ってたわ。
頭の中で
x  __
 √a^b = a^(b/x)
になってた。

というわけで、>>725を訂正して、
Math.Pow()を2回呼ぶより、整理して1回にしたほうが良いと思う。
分かりにくかったら無視してくれ。

731:デフォルトの名無しさん
08/09/10 13:15:30
Math.Powは見るからに処理長そうだしねえ
慣れるまでは理解するまでベタ書きが無難だが
慣れたら呼び出す回数を減らすことを勧めたい

732:デフォルトの名無しさん
08/09/10 13:44:50
問題にはならないだろうけど、一応精度の問題もある

733:デフォルトの名無しさん
08/09/10 17:19:53
ここぞとばかりにOOoのMath使ってみたんだけど
ほんとハナクソだな・・・('A`)モウツカワネ

URLリンク(www1.axfc.net)

734:デフォルトの名無しさん
08/09/10 17:30:52
404 Not Found

735:デフォルトの名無しさん
08/09/10 17:32:29
すまん、リファラ読んでるっぽいな。
URLリンク(www1.axfc.net)

736:デフォルトの名無しさん
08/09/10 20:34:53
>>727
発想が逆立ちしてるよw
数学できない子にありがちだけど、問題を自分でわざわざ複雑にしてるよ。

12音階というのは2(1オクターブ)を対数軸上で12等分したもの、
というのが全ての出発点で12乗根√2っていうのはそこから導出した値に過ぎないんだよ。

対数軸(y = log(x))上の等差数列はxの世界では等比数列になる、って考えてもいいけど
普通は直感的に基準となる音からn番目の音の周波数は2の(n/12)乗倍だってわかるだろ。

737:デフォルトの名無しさん
08/09/11 16:35:43
すみませんが、質問です。

Googleなどの検索エンジンで .NET の情報を効率よく集めるには、どのような
検索語にすればよいでしょうか?

ただ入力すると、.netというドメイン名にばかりヒットしてしまいます。


738:デフォルトの名無しさん
08/09/11 16:40:29
>>736
>数学できない子にありがちだけど、問題を自分でわざわざ複雑にしてるよ。
>数学できない子にありがちだけど、問題を自分でわざわざ複雑にしてるよ。
>数学できない子にありがちだけど、問題を自分でわざわざ複雑にしてるよ。

739:デフォルトの名無しさん
08/09/11 16:43:02
検索エンジンの使い方までサポートする幅広いスレだな

せめてVBで検索しろ

740:デフォルトの名無しさん
08/09/11 16:53:14
>>739
ありがとうございます。C#で検索することにしました。
.NETは別にC#だけではないのですが、関係ないページばかり見つかるよりマシです。


741:デフォルトの名無しさん
08/09/11 16:55:30
いやVisualStudioだろ

742:デフォルトの名無しさん
08/09/11 17:14:38
VisualStudio は .NET だけじゃないんじゃ?

743:デフォルトの名無しさん
08/09/11 17:23:41
だから.NETと組み合わせるんじゃ?
でもVisualStudioじゃ取りこぼし多そうだがなあ

744:デフォルトの名無しさん
08/09/11 17:40:51
うん、組み合わせのつもりで言ったぞ
VisualStudio .NET 2005 +言語名なら確実だろう

745:デフォルトの名無しさん
08/09/11 17:45:11
マイクロソフトは一般名詞を商標にして
いつの間にか自社製品を示す言葉にするのが得意だからな。

746:デフォルトの名無しさん
08/09/11 17:54:08
そうだね。あれは本当に迷惑。
昔の話だけど .doc という拡張子は元々テキストファイルのものだったのに、
勝手に MS Word のものにされた。
Word という名前といい、いまだに腹が立つ。


747:デフォルトの名無しさん
08/09/11 17:56:00
それはそれとして、ノイズが混じらなくて、取りこぼしをなるべく少なくする
には、どんな検索語がいいかな。
VisualStudioは、ちょと取りこぼし多そう。


748:デフォルトの名無しさん
08/09/11 18:14:16
そろそろスレチじゃね
.NET資料の探し方とは言え、googleの検索仕様に左右される話題だし

749:デフォルトの名無しさん
08/09/11 18:31:12
正規表現を使うって発想がないWindowsの天下で
わざわざ正規表現を実装する検索サイトはないよな

あったら凄まじく便利なんだが

750:デフォルトの名無しさん
08/09/11 18:34:42
有るわけがない。
文化の問題ではない。

751:デフォルトの名無しさん
08/09/11 18:59:48
ここで正規表現が使える奴が居るかも怪しい

752:デフォルトの名無しさん
08/09/11 19:45:57
.NETにも正規表現クラスあるけどちょっと使い方がまどろっこしい

753:デフォルトの名無しさん
08/09/11 23:27:37
正規表現は一種のツールだからな。
プログラミングサイドで実装されてても、
OS側が環境として提供してくれないと・・・

754:デフォルトの名無しさん
08/09/11 23:44:32
>>746
外国だとテキストファイルに.docはマイナーだったって聞いている。
わざわざかぶること前提で.docに決めたわけなかろう。

755:デフォルトの名無しさん
08/09/12 00:04:36
少なくとも.NETはトップレベルドメイン.netとかぶること前提だけどな

756:デフォルトの名無しさん
08/09/12 09:57:40
しかし readme.doc は国内外を問わず添付されてた気が

757:デフォルトの名無しさん
08/09/12 10:03:53
拡張子の制約で使い勝手を縛るのはWindowsとhttpのMIMEtypeだけだよ。

758:デフォルトの名無しさん
08/09/12 10:26:40
知ったようなことを言う


759:デフォルトの名無しさん
08/09/12 11:59:51
反論すら成立してない

760:デフォルトの名無しさん
08/09/12 19:55:34
そういやマックのファイルっていまだにマックバイナリ付いてるの?

761:デフォルトの名無しさん
08/09/13 09:07:27
ビジュアルベーシック.NETでOSは作れますか???

762:デフォルトの名無しさん
08/09/13 09:09:50
>>761
少なくともバカは治せない

763:デフォルトの名無しさん
08/09/14 03:50:40
>>760
マックバイナリが何なのか理解してないね

764:デフォルトの名無しさん
08/09/14 12:43:56
>>763
意味が分からない。
どうせ絡むならはぐらかしたような言い方せずに全部言えよ。
「何なのか理解していない」のが君の方でなければなw

765:デフォルトの名無しさん
08/09/14 12:51:38
調べればいいだろ
「いまだに」とかつける勘違い名人には教えません

766:デフォルトの名無しさん
08/09/14 13:04:24
>>765
一般的事実なら調べれば分かるかもしれないが、
馬鹿なお前さんの独善的「思い込み」の意味をどう調べろって言うのかね。

本当、最近こういうセカイ系的メンタルの奴が多くて困る。

767:デフォルトの名無しさん
08/09/14 13:08:06
というか、何も具体的なこと言えないから最初から人に絡むなよ。

768:デフォルトの名無しさん
08/09/14 23:24:20
C++スレで自分では答えられないザコから誘導されてきました


VC++ 2005 Express
自分のアプリから、別のアプリが起動してるかどうか見たい



207 名前:デフォルトの名無しさん[] 投稿日:2008/09/14(日) 20:48:40
iniファイルは釣りでした。
起動してるプロセス(リスト)の取得教えて

210 名前:デフォルトの名無しさん[sage] 投稿日:2008/09/14(日) 21:59:34
くだすれ.NET逝け

769:デフォルトの名無しさん
08/09/15 03:05:51
うん。見れば

770:デフォルトの名無しさん
08/09/15 04:23:42
>C++スレで
やっぱりC++/CLIとC++の区別が付いてなかったのか、VIPに逝け

771:デフォルトの名無しさん
08/09/15 19:45:31
質問です。
WINDOWS XP使用で、コンパイラはBorlandC++compiler5.5です。
インストールしたあとパスの設定で、
%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Program Files\Common Files\GTK\2.0
とあったところに\bin;c:\Borland\Bcc55\binと付けました。
なのに、実際コマンドラインでメモ帳を開こうと>C:\WINDWS\NOTEPAD.EXEと打ち込んでも、
指定されたパスは見付かりませんとでます。(NOTEPAD.EXEはCディスクの中のWINDWSに入れてあります。)
他にもカレントディレクトリを変えようとして、>cd ○○と打っても、
確かにあるはずなのに指定された(ryになってしまいます。
誰か助け手ください(涙)

772:771
08/09/15 20:08:40
スレ違いのようでしたので、他に聞いて見ます。
すみませんでした。

773:デフォルトの名無しさん
08/09/16 22:58:28
質問ですお願いします。

C#でUDP通信するソフト作ってるんですが、
通信時の暗号化に3DES使おうとプラグロミングして
reflectorで覗いたらキー丸見えで萎えました。

クラックを防げる暗号化ってどう実装したらよいでしょうか
制限事項としては
(制限1)クライアントで暗号化したものをサーバで複合できる(逆も然り)
(制限2)上記制限1のため、暗号化キーは固定する必要あり?

3DESのキーをまた暗号化してしまうとか、
キー生成アルゴリズムを埋め込んで、キー自体を持たないとか
外部にキーを持たせてdll参照するとか色々考えたんですが
結局トレースされたらばれてしまうのでティンときませんでした。

道かよろしくお願いします。


774:デフォルトの名無しさん
08/09/16 23:04:49
3DESじゃなきゃだめなの?
公開鍵じゃだめなの?

775:デフォルトの名無しさん
08/09/16 23:09:06
公開鍵も考えたんですが、ようは、誰かが作った偽クライアントがサーバに接続されるのを防ぎたかったので
鍵自体バレると・・・と思ったけど

今よく考えたらreflectorでソース見れる時点で暗号化どうのこうののまえに偽クライアントは作れてしまいますね。。。
.netで作るのをやめる事にします。

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


776:デフォルトの名無しさん
08/09/16 23:42:59
これは酷い思考停止

777:デフォルトの名無しさん
08/09/16 23:44:50
ネイティブで作ったって一緒。
まあ解析しにくいことは否定しないが。

本当に安全にやるなら、SSLとかでやってるのと同じような仕組みを作らにゃならん。


778:773
08/09/16 23:59:23
すみません775は私です。

私は生産者側なのでクラックにはあまり興味ないですが、.NETの形態上ソースが見えてしまうのは仕方がないんですよね。
今まで、いかに破られない認証をするかを考えてきましたが、認証の部分だけ省いてソースをコピペしたらちゃんと動いてしまうんですよね。

生産対象物がきわめて専門的なBtoBのようなソフトであれば、ソースをほしがるような客先は少ないです。
逆に、保守のことを考え、わざわざソースをセットで渡してしまうこともありますが、
たとえばネットゲームのような、完全なBtoCまたはCtoCの形を取るソフトであれば、不特定多数のクライアントがいるわけで
そのなかには必ず中身を解析したり、場合によっては不正な手順でサーバにアクセスする人たちが出てきます。

そういった人たちのモチベーションに反比例するのが解析の難しさ、めんどうさだと思います。
もちろん従来のネイティブコードでクラックできないわけではないですが、.NETよりはめんどうです。
そうした意味では、.NETという、言ってしまえば実行ファイルのソースが公開されているプラットフォームを避けるのも一つの手かなと思いました。

長くなりましたが、つまり、知りたいことは、
1).NETでClient/Server作ってる人は、どういう実装をされてるんでしょうか。
2)そもそも.NETは使わないんでしょうか。

度々すみませんがもう少し知恵をお貸しください。

779:デフォルトの名無しさん
08/09/17 00:04:57
だから本当に確実な認証が必要なら、パスワードか証明書かICカードかUSB鍵か、
とにかくソースを解析しても不可能な方法をとるわけだよ。

>いかに破られない認証をするかを考えてきましたが、認証の部分だけ省いてソースをコピペしたらちゃんと動いてしまうんですよね。
それってどんな認証だよっていうか認証って言わないだろそんなの。


780:デフォルトの名無しさん
08/09/17 00:12:17
ん?
ひょっとして接続が許可された人間でも偽クライアント(というかその許可情報)を使用した接続とか
できないようにしたいって言ってる?
そんなことは基本的には不可能だよ。

たとえばソース解析するまでもなくそのクライアントアプリをコピーして別のマシンで動かした場合はどうなるんさ?
※パスワードやらその他認証用の情報も基本的に同じようなもの


781:773
08/09/17 00:12:45
>>779
すみません話を混ぜて書いてしまいました。
>いかに破られない認証をするかを考えてきましたが、認証の部分だけ省いてソースをコピペしたらちゃんと動いてしまうんですよね。
これは、キーさえわかっていれば他の部分コピペして新たに偽クライアント作ったらサーバ側からは偽クライアントだとはわからないという意味です。

パスワードか証明書かICカードかUSB鍵がいらない偽クライアントが出来てしまえばサーバ側では対処できないだろうという意味で書きました。
ネットゲームのBOTツールとかがそれにあたるんでしょうか。

782:773
08/09/17 00:15:19
>>780
そうです!それが言いたかったんです。
クライアントアプリの複製は問題ないです。

クライアントアプリを騙って不正なパラメータでアクセスをされるのを防ぎたいんです。

783:デフォルトの名無しさん
08/09/17 00:27:03
不可能。
だってクライアントが正しいかをサーバ確認できるのは通信内容によってのみだから。
基本的にクライアントプログラムが本物かを「確実に」確認する方法はない。


784:773
08/09/17 00:42:33
だとすると、暗号化の議論の中では邪道とされている、処理の隠蔽しか暫定的な回避策は無いですね。
.NETには不可能ですが。

逃げにしかなりませんが、Client側はネイティブな別の言語に移植する事にします。
また、暗号化のクラック対策としては、定期的にClient/Serverともアップデートをかけて、
実行前にキーを変更する仕組みにしようと思います。

勉強になりました。
ありがとうございました。

785:デフォルトの名無しさん
08/09/17 00:47:00
つーか難読化とか耐タンパとかでググれって誰も言わないのは何でなんだぜ?

786:773
08/09/17 01:03:15
>>785
そんなのがあったのですね。勉強不足でした。

早速フリーの難読化ソフトで実験してみたら、実行は出来るのにコンパイルが通らないソースが出来上がり感動しました。
さすがに定数は難読化されなかったですが。
ソフトの種類によっていろいろなのかな。

ちょっと色々調べてみます。ありがとうございました。

787:デフォルトの名無しさん
08/09/17 01:42:37
本格的には使いにくいからじゃね?


788:デフォルトの名無しさん
08/09/17 14:36:03
javaseで掲示板へ投稿するスクリプト作れますか?
ポストリクエストを少々いじるのはjavaeeになるのでしょうか?
よろしくお願いいたします


789:デフォルトの名無しさん
08/09/17 19:48:25
ここ数件の 書き込みに 対して スレタイ 欲嫁 と 言ってやりたい


790:デフォルトの名無しさん
08/09/17 20:29:49
Form2が閉じた時にForm1を更新するにはForm.Closedイベントを使えばいいのはわかるんだけど、
Form1から、Form2が”閉じてる”て状態を捉えるにはどうすればいいのですか?
Form2.Enabled = Falseじゃ駄目みたいなんだけど
VB.NETです

791:デフォルトの名無しさん
08/09/17 21:02:32
Visible

792:デフォルトの名無しさん
08/09/17 21:53:24
IsDisposed

793:デフォルトの名無しさん
08/09/17 22:10:00
どういう動作を意図してるかわからんけど
閉じてるかどうか判断して閉じてたら開きなおすならこんな漢字化

Public Class Form1

  Dim f2 As Form2 = Nothing

  ''' <summary>
  ''' Form2をShowする
  ''' </summary> '''
  Private Sub ShowForm2()
    'Form2をはじめて開く場合
    If f2 Is Nothing Then
      f2 = New Form2
    Else
      'Form2が閉じてた場合
      If f2.IsDisposed Then
        f2 = New Form2
      End If
    End If
    f2.Show(Me)
    f2.Activate()
  End Sub

End Class


794:デフォルトの名無しさん
08/09/17 23:11:49
>>790
Application.OpenFormsで現在開いている(表示されている)フォームのコレクションが取得できる。
こんなかに、Form2が入っているかどうか見ればいいかと思われる。

795:デフォルトの名無しさん
08/09/17 23:21:14
790です
色々ありがとうございました
勉強になりました
意図していた動作は、Form1にある、Form2をshowするボタンを、Form2が開いてる間は無効にする、というものでした。


796:デフォルトの名無しさん
08/09/17 23:42:27
>>795
それだと状態を常に監視する為にコールバックしないといけないような

というかそもそもその動作ならForm2が開いているかどうかは関係ないよ

button1が押されたときに
button1.Enabled=False

Form2が閉じるときに
DirectCast(Me.Owner, Form1).Button1.Enabled = True


797:796
08/09/17 23:44:17
途中で送信してしまった
スマソ

Form2を開くボタン(仮にbutton1)のスコープをForm2から参照可能にしておいて
>>795みたいなかんじでやれば、Form2の状態など監視せずにスマートにいけるんじゃね

798:797
08/09/17 23:45:59
安価間違いグダグダスマソorz

×>>795みたいなかんじ
>>796みたいなかんじ

799:デフォルトの名無しさん
08/09/17 23:46:33
>>795
そういうのはForm1の適当なメソッドにForm2の適当なイベント(例えばFormClosed)を
紐付けするんだよ。

VBならForm2の参照をWithEventsで持つ方法でもいい。

というか、くだすれか何か知らんけど、
こんなレベルの話は入門書を一冊軽く斜め読みすれば分かることで
掲示板で人に聞くような内容じゃない。

800:デフォルトの名無しさん
08/09/17 23:49:26
799
まぁまぁ「くだすれ」なんだから
ごもっともだけども。

801:デフォルトの名無しさん
08/09/17 23:52:38
>>794のやつが一番スマートだと思われるが。
Form2のNameプロパティに"Form2"と設定してあれば
If Application.OpenForms("Form2") Is Nothing Then
MessageBox.Show("Form2は閉じてる")
Else
MessageBox.Show("Form2は開いてる")
End If
と判断できるし

802:デフォルトの名無しさん
08/09/17 23:57:13
>>801

ずっとチェックするの?
>意図していた動作は、Form1にある、Form2をshowするボタンを、Form2が開いてる間は無効にする、というものでした。

僕はその意見には反対ですが、

まぁ、一番スマートなやり方はどうかは別にして、やり方はいくつもあるってことだね
初心者はいろいろやってみて、一長一短あるのを自分なりにとらえるようになるのも勉強だ

803:デフォルトの名無しさん
08/09/18 00:11:44
>意図していた動作は、Form1にある、Form2をshowするボタンを、Form2が開いてる間は無効にする、というものでした。
であれば、

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim f2 As New Form2()
f2.Show()
Button1.Enabled = False
AddHandler f2.Disposed, AddressOf Me.Form2_Disposed
End Sub
Private Sub Form2_Disposed(ByVal sender As Object, ByVal e As EventArgs)
RemoveHandler CType(sender, Form2).Disposed, AddressOf Form2_Disposed
Button1.Enabled = True
End Sub

804:デフォルトの名無しさん
08/09/18 11:10:57
Disposedで良かったっけ?
Showなら良かったんだっけかな。


805:デフォルトの名無しさん
08/09/18 14:48:09
クラスにこういうプロパティを実装しています。
------------------------------
Private mHOGE As String

Public Sub New()
  Me.HOGE = ""
End Sub

Public Property HOGE() As String
  Get
    Return HOGE  ←※
  End Get
  Set(ByVal value As String)
    mHOGE = value
  End Set
End Property
------------------------------
※のところで、
「変数 'HOGE' は、値が割り当てられる前に使用されています。Null 参照の例外が実行時に発生する可能性があります。」
という警告が出るのですが、これは書き方がどこか間違っているのでしょうか。

806:デフォルトの名無しさん
08/09/18 15:15:46
それ以前に無限ループになるのは確実だわな。

807:デフォルトの名無しさん
08/09/18 15:24:02
これは俺もたまにやっちまう。
セッターの方だといきなりスタックオーバーフローでめげるぜ。

808:デフォルトの名無しさん
08/09/18 15:25:43
いやセッターとも限らんか。
ともかく実行したらアウチ

809:デフォルトの名無しさん
08/09/18 15:37:55
すみません。
Return mHOGEですよね。

よくよく読んだら理解できましたorz

810:デフォルトの名無しさん
08/09/18 17:20:06
XP3
.NET C#のSDKのURLください

811:デフォルトの名無しさん
08/09/18 17:38:58
kaiketusita


812:デフォルトの名無しさん
08/09/18 21:36:31
質問です。
パスワードを設定したExcelのファイル(オープン時にパスワードを求められる)があるのですが
これをC#からパスワードを自動入力で開く方法ってありませんか?

普通にダブルクリックしたときはパスワード入力、
C#で作ったプログラムで開くボタンをクリックすれば
パスワード入力なしでエクセルを起動するってしたいんです。

詳しいかた宜しくお願い致します。

813:デフォルトの名無しさん
08/09/19 01:47:24
.NET1.1はSDKを含め、全てアンインストールしてもいいのでしょうか?
マイクロソフトは.NET1.1をどのような位置付けで考えているのでしょうか

814:デフォルトの名無しさん
08/09/19 11:44:15
Change系のイベント連鎖についてですが

避けたくてもどうしてもTextBox1のChangeイベントでTextBox1.Textに
値を代入しなくてはならない、なんて場面はよくあると思いますが、
みなさんどうやって連鎖を回避されていますか?

フォームレベルのフラグ変数とか、
他コントロールのフォーカス使ったりとか、
わざわざ条件を自作するような技しかないんでしょうか。

815:デフォルトの名無しさん
08/09/19 19:13:53
>>814
>なんて場面はよくあると思いますが
いやそうそうないと思う。
というより、そんなことを思った時は大抵ロジックが不適切なんだと思う。

少なくとも処理内容と目的を具体的に書かないと納得できないよ。

816:デフォルトの名無しさん
08/09/20 10:12:29
>>815
不適切なロジックでもやらないといけない場面はよくある
書く人の志向だけで作れるような、そんな恵まれた職場や
案件ばかりじゃないよ、実際


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4661日前に更新/234 KB
担当:undef