C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 >>
■53239  Re[3]: C#で共通ページ
□投稿者/ c# -(2010/09/08(Wed) 07:34:22)
    No53237 (Azulean さん) に返信
    > ■No53236 (やじゅ さん) に返信
    >>C#では無いと判断したのは何故ですか?
    >>「マスターページ C#」で検索しても出てくるかと思うのですが・・・
    >
    > 多分、C# + Windows Forms じゃないかなと思っています。
    >
    > この仮定が正しいとして、Windows Forms ではマスターページはありません。
    > というより、Windows Forms で似たような画面が次々に切り替わるよりは、同じ画面の中で子コントロールが入れ替わっていく形をよく見るかと思います。
    > Panel コントロールに配置したものか、ユーザコントロールに子画面をデザインして配置したものを Visible プロパティで切り替えていくという形でしょうか。
    >
    > 別案として、共通部分をデザインしたフォームから継承した Windows フォームを作成するということもできますが、これはフォームがどんどん変わっていくスタイルになります。

    メッセージありがとうございます。
    WindowsアプリケーションのC#.NETになります。

    共通として使用したいものは、メニュー機能で
    メニューには各画面に遷移するボタンがあります。

    フォームの左側にメニュー、右側に各画面のフォームを
    表示するようなイメージになります。

    アドバイス頂いたやり方で、自分が出来るか
    ちょとやってみたいと思います。

記事No.53234 のレス /過去ログ90より / 関連記事表示
削除チェック/

■53238  Re[2]: C#で共通ページ
□投稿者/ c# -(2010/09/08(Wed) 07:28:34)
    No53236 (やじゅ さん) に返信
    > 2010/09/08(Wed) 00:06:42 編集(投稿者)
    >
    > ■No53234 (c# さん) に返信
    >>ASP.NET(VB.NET)で、画面側で共通のものを使う場合
    >>マスターページと言うものがあるかと思いますが、
    >>Windows C#.NETには、マスターページ的なものは
    >>ないのでしょうか?
    >
    > C#では無いと判断したのは何故ですか?
    > 「マスターページ C#」で検索しても出てくるかと思うのですが・・・
    >
    > それとも、Windows C#.NETってのは、ASP.NET(WEBアプリ)ではなくWindowsフォームアプリを指してます?


    メッセージありがとうございます。
    無いと判断している訳ではなく、無いのでしょうか?
    と言う疑問形です。
記事No.53234 のレス /過去ログ90より / 関連記事表示
削除チェック/

■75550  Re[2]: C#についての質問です。
□投稿者/ ぽん吉 -(2015/04/07(Tue) 15:56:47)
    フォームが応答なしの状態で、操作ができない状態です。

    invokeは使ってないです。
記事No.75544 のレス /過去ログ127より / 関連記事表示
削除チェック/

■83898  Re[1]: 構造体の入れ子
□投稿者/ 魔界の仮面弁士 -(2017/04/21(Fri) 10:21:16)
    2017/04/21(Fri) 10:26:25 編集(投稿者)

    No83897 (Oboe2001 さん) に返信
    > VB6までは、Typeで宣言すれば入れ子構造を作ることができました。VB.NET以降では
    > TypeではなくStructureやClassを使えば良さそうだ、ということまでは分かりました。

    VB4〜VB6 でも、クラスの入れ子はできますね。
    Class ステートメントではなく、*.cls ファイルでの宣言になりますが。


    > しかしながら、「食材」のところで、「BC30053 配列を'New'で宣言することはできま
    > せん」と怒られてしまいます。

    要素数を指定して宣言すれば、それだけで配列のインスタンスが生成されますので、
    New を使う必要が無いという事です。下記の 4 つはいずれも同じ意味です。


    ★案1★
    Public Class Cls_Food
     Public Fruit(1) As Cls_Fruit
     Public Vegitable(1) As Cls_Vegitable
    End Class


    ★案2★
    Public Class Cls_Food
     Public Fruit() As Cls_Fruit
     Public Vegitable() As Cls_Vegitable
     Public Sub New()
      ReDim Fruit(1), Vegitable(1)
     End Sub
    End Class

    ★案3★
    Public Class Cls_Food
     Public Fruit() As Cls_Fruit = New Cls_Fruit() {Nothing, Nothing}
     Public Vegitable() As Cls_Vegitable = New Cls_Vegitable() {Nothing, Nothing}
    End Class

    ★案4★
    Public Class Cls_Food
     Public Fruit() As Cls_Fruit = New Cls_Fruit(1) {}
     Public Vegitable() As Cls_Vegitable = New Cls_Vegitable(1) {}
    End Class


    > Food.Fruit(1).Apple(7) = 100 ……のような使い方をしたいのですが、
    Cls_Fruit が、VB.NET の「構造体(Strucutre)」や VB6 の「ユーザー定義型(Type)」ではなく、
    Cls_Fruit が、VB.NET の「クラス(Class)」や VB6 の「クラス」として宣言されていた場合、
    単に配列を確保しただけでは、個々の要素の初期値は Nothing になっています。

    ですからクラスの配列であった場合には、VB6 でいうところの
     ReDim Food.Fruit(1)
     Set Food.Fruit(0) = New Cls_Fruit
     Set Food.Fruit(1) = New Cls_Fruit
    のような処理が事前に必要です。


    配列要素の初期化も併せて行うならこんな感じ。
    今回は 0 To 1 な 2 要素な配列だけなので、直接書いてみます。

    ★案5★
    Public Class Cls_Food
     Public Fruit() As Cls_Fruit = {New Cls_Fruit(), New Cls_Fruit()}
     Public Vegitable() As Cls_Vegitable = {New Cls_Vegitable(), New Cls_Vegitable()}
    End Class

    配列の要素数が多い場合は、初期化処理をコンストラクタ内で
    ループ生成した方が良いでしょう。
記事No.83897 のレス /過去ログ143より / 関連記事表示
削除チェック/

■83907  Re[3]: 構造体の入れ子
□投稿者/ Oboe2001 -(2017/04/21(Fri) 13:04:17)
    No83898 (魔界の仮面弁士さん) に返信

     インスタンスの生成や、Newを使った配列要素の初期化の方法について、大変参考になりました。無事プログラムが動作を初め大変感謝しています。
     
    No83903 (大谷刑部さん) に返信

     最初は構造体でプログラムを作り始めたのですが、宣言の中で要素の数を記述するとエラーになってしまったので、クラスに書き直した次第です。

    No83905 (Hongliang さん) に返信

     構造体とクラスのどちらを選択するべきかについて、私は勉強不足であると痛感しました。あまりにもVB6を使っていた期間が長すぎたのだと思います。

     皆様ありがとうございます。
記事No.83897 のレス / END /過去ログ143より / 関連記事表示
削除チェック/

■84093  Re[11]: 有効桁数3桁まででJIS丸めがしたい
□投稿者/ AI -(2017/05/15(Mon) 18:03:08)
    No84084 (魔界の仮面弁士 さん) に返信

    魔界の仮面弁士さん、ご回答ありがとうございます!

    > 》 規則 A,B を 2 回以上使って丸めることは,誤差の原因となる。
    > 》 したがって,丸めは,常に 1 段階で 行わなければならない。
    > 》 例 12.251 は,12.3 と丸めるべきであって,まず 12.25 とし,次いで 12.2 としてはならない。
    >
    > 規則 A はいわゆる偶数丸め、規則 B は四捨五入のことです。
    > VB でいえば
    >
    >   規則 A … System.Math.Round(Decimal値, 小数部桁数, System.MidpointRounding.ToEven)
    >   規則 B … System.Math.Round(Decimal値, 小数部桁数, System.MidpointRounding.AwayFromZero)
    >
    > にあたりますので、JIS丸めで例示されている 12.251 →12.3 は規則B(四捨五入)のことですね。
    >
    >
    > ひとまず、規則 A / 規則 B の双方に対応した、
    > 『有効桁数』での丸め処理を作ってみました。
    >
    > No84065 で示された要件は満たしていると思います。
    > (例2 については、 No84069 で指摘したように記載ミスであると想定)
    >
    >
    > ''' <param name="digits">有効桁数(1〜29)</param>
    > Function JisRound(value As Decimal, Optional digits As Byte = 3, Optional mode As MidpointRounding = MidpointRounding.ToEven) As Decimal
    >   digits = Math.Max(1, Math.Min(29, digits))
    >   Dim fmt As String = StrDup(digits - 1, "#"c) & "0." & StrDup(29, "0"c) & "E0"
    >   Dim s() As String = value.ToString(fmt).Split("E"c)
    >   Dim a As Decimal = Math.Round(CDec(s(0)), 0, mode)
    >   Dim b As Integer = CInt(CDec(s(1)))
    >   Return CDec(String.Format("{0:0}E{1:D}", a, b))
    > End Function

    JisRound関数の作成、どうもありがとうございます。

    作成いただいた「JisRound」について、
    テストさせていただいたのですが、少し気になる事がありました。

    1. JisRound(1.11495, 3) → 1.11 ※No84079の値で確認
    2. JisRound(1.125 , 3) → 1.12 ※No84081の値で確認
    3. JisRound(12.251 , 3) → 12.3 ※No84084の値で確認
    4. JisRound(12.25 , 3) → 12.2

    となってしまいます。

    1と2では欲しい結果になっていると思いますが、
    3と4で両方の結果が異なる理由がよく分かりません。
    おそらく「12.2」になれば正解だと思うのですが...
    この値を求める事はできないのでしょうか。

    試しに、以下のコートを実行してみました。
    System.Math.Round(12.251, 1, System.MidpointRounding.ToEven) → 12.3
    System.Math.Round(12.25 , 1, System.MidpointRounding.ToEven) → 12.2

    アドバイスの程、どうぞよろしくお願いします。

記事No.84065 のレス /過去ログ143より / 関連記事表示
削除チェック/

■85146  Re[16]: C# MVC でのスタックオーバーフロー
□投稿者/ はな -(2017/09/13(Wed) 15:24:58)
    >>double A1() {return B1() == 0 ? 0 : (C1() + func2(func1(D1(), AD5()), A2())) / B1()};
    >>double A2() {return B2() == 0 ? 0 : (C2() + func2(func1(D2(), AD5()), A3())) / B2()};
    >>double A3() {return B3() == 0 ? 0 : (C3() + func2(func1(D3(), AD5()), A4())) / B3()};
    >>・・・

    > ですが、再帰するとだめであるということがわかっている以上それ以外の解決策を模索するしかないので
    > 再帰しない形にアルゴリズムを改める必要があると思います。

    C#が自動的にツリー状に関数呼び出ししている部分を自前で実装するには
    1.各関数内に登場するメソッドを取得
    2.呼び出しツリーを再帰を使わず作成
    3.ツリーの末端から計算する
    でしょうか。

    関数内に登場するメソッドを取得することってできますか?
    (クラスが持っているメソッドは取得できますが・・・)
記事No.85038 のレス /過去ログ145より / 関連記事表示
削除チェック/

■94076  Re[3]: excelと画面の表示スケール
□投稿者/ 魔界の仮面弁士 -(2020/03/11(Wed) 12:43:52)
    No94075 (だんぼ さん) に返信
    > <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>

    dpiAware で指定できる値は、「True」「False」「True/PM」「Per-Monitor」の 4 種ですね。
    実行 OS にも依存します。
    http://grabacr.net/archives/1132


    > error CS103;現在のコンテキストに'ActiveSheet'という名前は存在しません。
    CS103 というのは、CS0103 の書き間違いでしょうか。
    https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/compiler-messages/cs0103


    ActiveSheet プロパティを持っているのは、Global 系を除けば
     Excel.Application オブジェクト
     Excel.Window オブジェクト
     Excel.Workbook オブジェクト
    の 3 つですね。


    > if (workBook.ActiveSheet.Name == workBook.Sheets(i).Name) ←ここで例外

    workBook 変数のデータ型は、以下のうちどれにしていますか?
    (3) であれば大丈夫と思いますが、もし (1) ならばエラーになりそう。


    (1) object 型 (System.Object クラス)
    (2) dynamic 型
    (3) Workbook 型 (Excel.Workbook インターフェイス)
    (4) WorkbookClass 型 (非推奨)


    > workBook = excelApp.Workbooks.Open(path);

    上記の部分は、
     workbooks = excelApp.Workbooks;
     workBook = workbooks.Open(path);
    の形にしておくことをお奨めします。

    COM オブジェクトを変数として受け取っておかないと、
    処理後に Workbooks コレクションを明示的に解放できなくなってしまいますので。

    ※ここでいう解放処理とは、Marshal クラスの (Final)ReleaseComObject メソッドの事です


    workBook.Sheets.Count や workBook.ActiveSheet.何某 も同様です。


    string acitveSheetName = "";

    dynamic activeSheet = excelApp.ActiveSheet;
    if (activeSheet != null) {
     // activeSheetが null になることはほぼ無いが、一応念のため
     acitveSheetName = activeSheet.Name;
    }

    Excel.Sheets sheets = workBook.Sheets;
    listBoxSheet.BeginUpdate();
    int selectedIndex = -1;
    for (int i = 1; i <= sheets.Count; i++) {
     // どちらの構文がサポートされるのかは、
     // C# バージョンおよび相互運用アセンブリによって異なります。
     dynamic sheet = sheets[i] または sheets(i);

     listBoxSheet.Items.Add(sheet.Name);

     if (sheet.Name == activeSheetName) {
      selectedIndex = i - 1;
     }
     if (Marshal.IsComObject(sheet)) { Marshal.ReleaseComObject(sheet); }
    }
    listBoxSheet.SelectedIndex = i - 1;
    listBoxSheet.EndUpdate();

    if (activeSheet != null) {
     Excel.Range a1 = activeSheet.Range("A1");
     a1.Select();
     if (Marshal.IsComObject(a1)) { Marshal.ReleaseComObject(a1); }
     if (Marshal.IsComObject(activeSheet)) { Marshal.ReleaseComObject(activeSheet); }
    }
記事No.94070 のレス /過去ログ163より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -