ASP.NET でレスポンシブデザインをするなら

最新バージョンのVisual studio 2013は、ASP .NET MVC5に対応しています。

2012までは、MVC4でしたが、2013よりMVC5も使えるようになりました。

MVC5とMVC4との違いは?

MVC5, MVC4ともにASP.NET 4.5(.1)上で動作します。

最大の違いは、OneASP.NETに対応していることです。

つまり、MVC5を満喫するためには、Visual Studio2013が不可欠です。

その他、MVC4との違いは以下となります。

  • MVC5のプロジェクトはBootstrapテンプレートで生成されます。
  • 属性ルーティングのサポート
  • フィルタのオーバーライド
  • 認証フィルタ
  • ASP.NET Identityのサポート

この ASP.NET Identityのサポートがあることにより、ASP.NET上で

簡単にログイン認証のメカニズムが構築できます。

・ユーザーの指定した文字列での認証

・メールアドレスでの認証

twitterアカウント

Facebookアカウント

Microsoftアカウント

など、様々な認証が用意されています。

 

こちらの詳しい実装方法の説明は、以下の本をご覧になるといいと思います。

詳しく解説されています。

 

http://www.wings.msn.to/index.php/-/A-03/978-4-7980-4179-7/

f:id:ace_taka:20140911105749j:plain

 

VB.net技術者のお勧めするレスポンシブなサイト作成方法

 

私は、社内システムの開発者として、Windows業務アプリケーションであれば

70システム以上を開発してきたが、世の中はWEB時代。

しかも、複数のデバイスとブラウザに対応するページを作れるのが一般的になりつつある。

そこで使われるのが、Bootstrap。単一のHTMLファイルで複数デバイスの表示に対応することができます。表示しているデバイスの種類やサイズに応じて表示を最適化することができる優れた技術です。

Bootstrapは、対応ブラウザの種類が多く、ChromeMac, Windows, iOS, Android)、SafariMac, iOS)、FirefoxMac, Windows)、Internet Explorer(8以上: IE8ではrespond.jsが必要)、OperaMac, Windows)で利用でき、ブラウザ間の違いを吸収してページを表示できる点も魅力です。

これを使い、HTML5+CSS3+Bootstrapでサイトを作れる事を目標に勉強中です。

 

現在は、IDE:Visual Studio 2013 DB:SQL-Server 2012の開発環境です。

ここで利用する技術としては、やはりASP.NET MVC5ですね。

いろいろ調べたところ、もうすぐ、この作成方法を詳しく解説する本が出版されるようです。Visual Studio技術者としては必須のアイテムですね。

 

欲しい方はこちら

http://www.wings.msn.to/index.php/-/A-03/978-4-7980-4179-7/

 f:id:ace_taka:20140911105749j:plain

VB .NETからエクセル出力

VB.NETからエクセルに出力するときの備忘録です。

 

参照設定にて「Microsoft Excel 14.0 Object Library」を追加

 

'どのファイルに記入するか指定して、Functionを呼び出し

 Private Sub btnExec_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExec.Click

Dim Ret as Boolean=False

Ret=ExcelOutput("C:\TEST\テンプレート.xls")

End Sub

 

Imports Microsoft.Office.Interopを追加

 Private Function ExcelOutput(ByVal LoadFilePath As String) As Boolean

        Dim xlApp As New Excel.Application
        '==================  起動時の処理  =================== 
        xlApp.Visible = False         'Excelを表示(必ずとも表示しなくてもよい)
        xlApp.DisplayAlerts = False     '保存時の問合せのダイアログを非表示に設定

        Dim xlBooks As Excel.Workbooks = xlApp.Workbooks
        Dim xlBook As Excel.Workbook = xlBooks.Open(LoadFilePath)
        Dim xlSheets As Excel.Sheets = xlBook.Worksheets
        Dim xlSheet As Excel.Worksheet
        Dim xlRange As Excel.Range
        Dim localByName As Process() = Process.GetProcessesByName("Excel")

        xlSheet = xlBook.Worksheets(1)
        xlRange = xlSheet.Range("A1")

        xlApp.DisplayAlerts = False     '保存時の問合せのダイアログを非表示に設定

        xlRange = xlSheet.Range("P3") '記入したい場所
        xlRange.Value = "ここに記入したい文字を書く"
        MRComObject(xlRange)

        'ファイルの名前をつけて保存保存
        SaveFilePath = "C:\TEST\"  '保存先
        xlBook.SaveAs(SaveFilePath)

        xlApp.DisplayAlerts = True     '保存時の問合せのダイアログを表示に設定

        '==================  終了処理  ===================== 
        MRComObject(xlRange)            'xlRange の解放
        MRComObject(xlSheet)            'xlSheet の解放
        MRComObject(xlSheets)           'xlSheets の解放
        xlBook.Close(False)             'xlBook を閉じる
        MRComObject(xlBook)             'xlBook の解放
        MRComObject(xlBooks)            'xlBooks の解放
        xlApp.Quit()                    'Excelを閉じる
        MRComObject(xlApp)              'xlApp を解放

        If localByName.Length > 1 Then
            GC.Collect()                'ガベージコレクターにてEXCELを回収
        End If

        '-------------------------------------------------------------------------
        GC.Collect()   '終了後すぐ再起動したい場合は、強制的にガベージ コレクションを実行して下さい。
        System.Threading.Thread.Sleep(1000)          '回収待ち時間
        '--------------------------------------------------------------------------


    End Function

MRComObjectは下記をコピーしておく


#Region "メモリ解放"

    Public Sub MRComObject(Of T As Class)(ByRef objCom As T, Optional ByVal force As Boolean = False)
        Dim IDEEnvironment As Boolean = False  'メッセージボックスを表示させたい場合は、True に設定
        If objCom Is Nothing Then
            If IDEEnvironment = True Then
                'テスト環境の場合は下記を実施し、後は、コメントにしておいて下さい。
                MessageBox.Show("Nothing です。")
            End If
            Return
        End If
        Try
            If System.Runtime.InteropServices.Marshal.IsComObject(objCom) Then
                Dim count As Integer
                If force Then
                    count = System.Runtime.InteropServices.Marshal.FinalReleaseComObject(objCom)
                Else
                    count = System.Runtime.InteropServices.Marshal.ReleaseComObject(objCom)
                End If
                If IDEEnvironment = True AndAlso count <> 0 Then
                    Try
                        'テスト環境の場合は下記を実施し、後は、コメントにしておいて下さい。
                        MessageBox.Show(TypeName(objCom) & " 要調査! デクリメントされていません。")
                    Catch ex As Exception
                        MessageBox.Show(" 要調査! デクリメントされていません。")
                    End Try
                End If
            Else
                If IDEEnvironment = True Then
                    'テスト環境の場合は下記を実施し、後は、コメントにしておいて下さい。
                    MessageBox.Show("ComObject ではありませんので、解放処理の必要はありません。")
                End If
            End If
        Finally
            objCom = Nothing
        End Try
    End Sub
#End Region

C1PrintDocumentの用紙サイズの設定

       C1PrintDocumentを使い、定型用紙サイズではなく、指定用紙サイズに

  したい場合は、下記のように記述する。

 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        doc = New C1PrintDocument           'ドキュメントのインスタンス

        doc.MaxPages = 1                      'ドキュメントは1ページのみ

       '用紙サイズを 30000 twipsに設定します。

       doc.DefaultUnit = UnitTypeEnum.Twip

       doc.PageLayout.PageSettings.SetPaperSizes(30000, 30000)

   'マージン設定
        doc.PageLayout.PageSettings.TopMargin = New Unit(0, UnitTypeEnum.Cm)
        doc.PageLayout.PageSettings.LeftMargin = New Unit(0, UnitTypeEnum.Cm)
        doc.PageLayout.PageSettings.RightMargin = New Unit(0, UnitTypeEnum.Cm)
        doc.PageLayout.PageSettings.BottomMargin = New Unit(0, UnitTypeEnum.Cm)

 

    'ドキュメントの表示
        C1PrintPreviewControl1.Document = doc

    End Sub

C1PrintDocumentの文字列に囲み枠の指定

f:id:ace_taka:20140616110144j:plain

 

 Private Sub MakeDoc1(ByVal doc As C1PrintDocument)
        ' ドキュメントのタイトルを作成
        Dim rp As New RenderParagraph()

      rp = New RenderParagraph()
        'フォントの指定

        rp.Style.Font = New Font("MS Pゴシック", 36)
  '文字列の指定

        rp.Content.Add(New ParagraphText("ここに文字列を入力", TextPositionEnum.Normal))
  '文字の表示

        doc.Body.Children.Add(rp)
  

   ' GetCharRectメソッドを使用するためには、文字の位置を計算するために
        ' まず最初にドキュメントを作成しなければなりません。
        ' その後再びドキュメントを作成して、個々の文字の周囲に
        ' 赤い四角形を描画します。
        doc.Generate()

         Dim textLength As Integer = rp.TextLength
        ' フラグメントには描画オブジェクトに関する情報が含まれます:
        ' rpオブジェクトの最初のフラグメントを取得
        Dim rpf As RenderParagraphFragment = CType(rp.Fragments(0), RenderParagraphFragment)
        ' テキストの中のすべての文字に対して繰り返し
        Dim i As Integer
        For i = 0 To textLength - 1
            ' 文字の座標を取得
            ' 座標はC1PrintDocument.ResolvedUnit単位で返却されます
            Dim charRect As RectangleD = rpf.GetCharRect(i)

 

            ' 文字を囲む四角形を作成

           Dim r As New RenderRectangle()
            ' すべての四角形の座標を指定
            r.X = New Unit(rpf.Bounds.Left + charRect.Left, doc.ResolvedUnit)
            r.Y = New Unit(rpf.Bounds.Top + charRect.Top, doc.ResolvedUnit)
            r.Width = New Unit(charRect.Width, doc.ResolvedUnit)
            r.Height = New Unit(charRect.Height, doc.ResolvedUnit)
            ' 図形(四角形)の座標をオブジェクトの相対位置で指定
            r.Rectangle.X = 0
            r.Rectangle.Y = 0
            r.Rectangle.Width = r.Width
            r.Rectangle.Height = r.Height
            r.Style.ShapeLine = New LineDef("1pt", Color.Blue)
            ' オブジェクトに四角形を追加
            doc.Body.Children.Add(r)
        Next i
    End Sub