Devexpress 의 SchedulerControl 을 이용하여 Calendar 제작 하기



▼ 결과 화면


Project 명 : JScheduler



SchedulerControl 을 활용하는 연습을 하기위해 

Google Calendar와 Schedule/Task를 연동할 수 있는 App 을 제작 해 보았습니다.


현재는 간단한 기능 테스트가 목표이기 때문에 Task연동 부분을 하지는 않았고 Schedule(일정) 만 가능합니다만, 언젠가는 Task 도 해볼까 합니다. 언젠가는...


간단히, 초기 셋팅 방법과 주요 method를 살펴 보겠습니다. 

참고로 사용된 주요 소스코드는 첨부되어 있으며 소스의 출처는 : Devexpress Q&A 와 아래 링크의 Google API Guide 입니다.


1. Google 초기 셋팅 및 필요한 라이브러리 

 - https://developers.google.com/google-apps/calendar/quickstart/dotnet

  아래 Quickstart dotnet 버전을 보고 따라 하시면 어렵지 않게 완료 할 수 있습니다.

  간단히 

  -> Google에 Project 생성 후 

  -> C# Winform project 생성

  -> Nuget package 설치


2. Google API Loading



3. Google Schedule loading 후 SchedulerControl이 인식할 수 있도록 Data Conversion

 - 달력의 날짜가 변경되면 해당 기간의 일정 자동 로딩.




4. JScheduler 에서 생성한 Schedule 을 Google로 보내기.




Component를 사용해 보면서 느낀점은 역시나 UI관련 기본적인 부분을 이미 대부분 구현해 놓았기 때문에 데이터 연동 부분만 신경 쓰면 되는게. 저 같은 1인 개발자 나 소규모의 개발집단에 개발 퍼포먼스 향상을 위해 아주 좋은 대안이 될거라는 생각이 듭니다. 물론 비용은 듭니다만, 비용대비 퍼포먼스는 만족할 만 합니다. 


CalendarExporter.cs

CalendarImporter.cs

GoogleCalendarHelper.cs

GoogleCalendarUtils.cs

RecurrencePatternParser.cs

MainForm.cs


'C# > WinForm' 카테고리의 다른 글

C# WebBrowser version 변경  (0) 2016.09.07
CefSharp install  (0) 2016.09.06
블로그 이미지

okgood0412

소프트웨어 개발을 즐기는 사람 입니다.

,

Bit Enum (Flag)

C#/Grammar 2017. 10. 1. 07:28
Bit 연산을 위한 Enum 을 만들수 있다.



'C# > Grammar' 카테고리의 다른 글

C# 에서 사용되는 데이터 타입.  (0) 2017.09.25
블로그 이미지

okgood0412

소프트웨어 개발을 즐기는 사람 입니다.

,
Application 실행시 하나의 Machine 에서 하나의 프로세스만 실행하고 싶을경우 
C#의 Mutex 를 사용하여 제어 할 수 있다. 




Test Environments

- OS : Windows 7

- IDE : Visual Studio 2017

- .NET framework 4.5.2


'C# > Tips & Skills' 카테고리의 다른 글

C#에서 DB2 Connection  (0) 2016.09.07
블로그 이미지

okgood0412

소프트웨어 개발을 즐기는 사람 입니다.

,

C# 에서 사용되는 데이터 타입



아래 테이블의 Short Name 과 .NET Class 타입 모두 사용가능 하다. 

컴파일러는 컴파일시 Short Name 을 .NET Class 로 변환하는 과정을 거치게 된다.




Built-In Data Types

Short Name

.NET Class

Type

Width

Range (bits)

byte

Byte

Unsigned integer

8

0 to 255

sbyte

SByte

Signed integer

8

-128 to 127

int

Int32

Signed integer

32

-2,147,483,648 to 2,147,483,647

uint

UInt32

Unsigned integer

32

0 to 4294967295

short

Int16

Signed integer

16

-32,768 to 32,767

ushort

UInt16

Unsigned integer

16

0 to 65535

long

Int64

Signed integer

64

-9223372036854775808 to 9223372036854775807

ulong

UInt64

Unsigned integer

64

0 to 18446744073709551615

float

Single

Single-precision floating point type

32

-3.402823e38 to 3.402823e38

double

Double

Double-precision floating point type

64

-1.79769313486232e308 to 1.79769313486232e308

char

Char

A single Unicode character

16

Unicode symbols used in text

bool

Boolean

Logical Boolean type

8

True or false

object

Object

Base type of all other types

string

String

A sequence of characters

decimal

Decimal

Precise fractional or integral type that can represent decimal numbers with 29 significant digits

128

±1.0 × 10e−28 to ±7.9 × 10e28


출처 : https://msdn.microsoft.com/en-us/library/ms228360(v=vs.90).aspx


'C# > Grammar' 카테고리의 다른 글

Bit Enum (Flag)  (0) 2017.10.01
블로그 이미지

okgood0412

소프트웨어 개발을 즐기는 사람 입니다.

,

WCF 게시 중. 에러

 

 

 

Dot Net Framework 가 Server에 설치 되어 있지 않을경우 발생했음. full버전.

아래 경로에서 확인가능.

 

 

 

 

'C# > Web' 카테고리의 다른 글

C# WCF data 송/수신 buffer 설정  (0) 2016.09.12
블로그 이미지

okgood0412

소프트웨어 개발을 즐기는 사람 입니다.

,

추가적인 세팅없이 기본적으로 65535 bytes 까지 송/수신 가능하지만, 그이상의 큰 데이터를 송/수신 하기 위해서 WCF(Server)와 클라이언트에 추가적인 세팅이 필요함.


1. WCF 

 - Web.config

bindings>

      <basicHttpBinding>

        <binding name="basic" maxReceivedMessageSize="2147483647" maxBufferPoolSize="2147483647" sendTimeout="00:10:00" receiveTimeout="00:10:00" >

          <readerQuotas maxArrayLength="2147483647" maxStringContentLength="2147483647" />

        </binding>

      </basicHttpBinding>

    </bindings>



2. Client.

 - Web Service를 Reference로 추가한 후 아래 코드 입력.

 - App.config

<bindings>

            <basicHttpBinding>

                <binding name="BasicHttpBinding_IService" maxReceivedMessageSize="2147483647" maxBufferPoolSize="2147483647"  >

                  <readerQuotas maxArrayLength="2147483647" maxStringContentLength="2147483647" />


                </binding>

            </basicHttpBinding>

        </bindings>

'C# > Web' 카테고리의 다른 글

HTTP Error 500.19 - Internal Server Error  (0) 2016.10.17
블로그 이미지

okgood0412

소프트웨어 개발을 즐기는 사람 입니다.

,



1. DB2로 접속할 PC에 driver 설치.

  - DB2 version에 맞는 driver 을 IBM 홈페이지 에서 찾아 다운로드. 

    (file name : ibm_data_server_driver_package_win64_v10.5.exe)

  - 설치가 완료되면 Windows->assembly에서 확인 가능




2. Project에 IBM.Data.DB2.dll 추가.

  - DLL 파일은 아래링크 샘플에 포함되어 있음.

  - 접속이 되지 않는다면, 동일명의 다른버전을 사용 해서 테스트 권장.



Sample : https://code.msdn.microsoft.com/windowsdesktop/How-to-connect-IBM-DB2-a9eec85e




* 주요. C# 소스 *


/// DB 객체

private static IBM.Data.DB2.DB2Connection mDBconn = null;


// 객체 생성

mDBconn = new IBM.Data.DB2.DB2Connection(mConnectionString);

// Connecting

Service.mDBconn.Open();



// Select Data - multiple rows

IBM.Data.DB2.DB2Command cmd = new IBM.Data.DB2.DB2Command(query, mDBconn);

IBM.Data.DB2.DB2DataReader dr = cmd.ExecuteReader();

dt.Load(dr);


// Select Data - single value

IBM.Data.DB2.DB2Command cmd = new IBM.Data.DB2.DB2Command(query, mDBconn);

cmd.ExecuteScalar();           


// Insert/Update Data

cmd = new IBM.Data.DB2.DB2Command(sql, mDBconn);

cmd.ExecuteNonQuery();

'C# > Tips & Skills' 카테고리의 다른 글

Single instance application  (0) 2017.09.26
블로그 이미지

okgood0412

소프트웨어 개발을 즐기는 사람 입니다.

,

Visual Studio C#에서 기본 제공하는 WebBrowser 컴포넌트는 구 버전인 Internet Explorer 7 엔진을 사용 하므로, 차세대 웹 기술인 HTML5 또는 Google map v3 최신 버전 등을 지원하지 못하는 문제가 있다. 


구글링으로 알아본 바로, 해결 방법으로는 3 party component 를 사용는 방법과 프로그램에 Registry 를 조작하는 코드를 심어 놓고 프로그램 구동시 설치된 IE버전과 같은 버전으로 셋팅하는 방법등이 있다.


두번째, Registry 조작(등록) 방법!

  - 현재 PC에 Install 된 IE 버전을 사용하도록 Registry 등록.


* Visual Studio 2015 버전 사용.

* 아래 링크를 참조 하여 테스트 하였습니다. 

1. http://stackoverflow.com/questions/23356194/cannot-force-webbrowser-control-to-render-using-current-version-of-ie


2. http://stackoverflow.com/questions/17922308/use-latest-version-of-ie-in-webbrowser-control



1. Winform Project 생성




2. Program.cs 파일에 소스추가.

  


namespace WebBrowserIEVersionTest

{

    static class Program

    {

        static Mutex mutex = new System.Threading.Mutex(false, "jMutex");


        /// <summary>

        /// The main entry point for the application.

        /// </summary>

        [STAThread]

        static void Main()

        {

            if(!mutex.WaitOne(TimeSpan.FromSeconds(2), false))

            {

                //another application instance is running

                return;

            }


            try

            {

                Application.EnableVisualStyles();

                Application.SetCompatibleTextRenderingDefault(false);


                var targetApplication = Process.GetCurrentProcess().ProcessName + ".exe";

                int browserver = 7;

                int ie_emulation = 11999;


                using (WebBrowser wb = new WebBrowser())

                {

                    browserver = wb.Version.Major;



                    if (browserver >= 11)

                        ie_emulation = 11001;

                    else if (browserver == 10)

                        ie_emulation = 10001;

                    else if (browserver == 9)

                        ie_emulation = 9999;

                    else if (browserver == 8)

                        ie_emulation = 8888;

                    else

                        ie_emulation = 7000;

                }


                try

                {

                    //string tmp = Properties.Settings.Default.Properties.

                    SetIEVersioneKeyforWebBrowserControl(targetApplication, ie_emulation);

                    Application.Run(new Form1());


                }

                catch (Exception ex1)

                {


                }


            }

            catch (Exception ex2)

            {


                

            } finally

            {

                mutex.ReleaseMutex();

            }            

        }


        private static void SetIEVersioneKeyforWebBrowserControl(string appName, int ieval)

        {

            RegistryKey Regkey = null;

            try

            {

                Regkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", true);


                //If the path is not correct or 

                //If user't have priviledges to access registry 

                if (Regkey == null)

                {

                    MessageBox.Show("Application FEATURE_BROWSER_EMULATION Failed - Registry key Not found");

                    return;

                }


                string FindAppkey = Convert.ToString(Regkey.GetValue(appName));


                //Check if key is already present 

                if (FindAppkey == ieval.ToString())

                {

                    MessageBox.Show("Application FEATURE_BROWSER_EMULATION already set to " + ieval);

                    Regkey.Close();

                    return;

                }


                //If key is not present or different from desired, add/modify the key , key value 

                Regkey.SetValue(appName, unchecked((int)ieval), RegistryValueKind.DWord);


                //check for the key after adding 

                FindAppkey = Convert.ToString(Regkey.GetValue(appName));


                if (FindAppkey == ieval.ToString())

                {

                    MessageBox.Show("Application FEATURE_BROWSER_EMULATION changed to " + ieval + "; changes will be visible at application restart");

                }

                else

                {

                    MessageBox.Show("Application FEATURE_BROWSER_EMULATION setting failed; current value is  " + ieval);

                }

            }

            catch (Exception ex)

            {

                MessageBox.Show("Application FEATURE_BROWSER_EMULATION setting failed; " + ex.Message);

            }

            finally

            {

                //Close the Registry 

                if (Regkey != null)

                    Regkey.Close();

            }

        }

    }

}


3. 실행결과.

  - 처음 실행시, 변경 됐음을 알림.


  - 동일한 프로그램 재 실행시 이미 변경되었다고 알림.


  - 기존 Default 버전 WebBrowser component 에서 발생했던 Script error가 이 방법을 통해 나타나지 않는것을 확인함!! 




'C# > WinForm' 카테고리의 다른 글

Google Calendar 연동 하기 (Schedule Sync)  (0) 2017.10.04
CefSharp install  (0) 2016.09.06
블로그 이미지

okgood0412

소프트웨어 개발을 즐기는 사람 입니다.

,

CefSharp install

C#/WinForm 2016. 9. 6. 06:00

Visual Studio C#에서 기본 제공하는 WebBrowser 컴포넌트는 구 버전인 Internet Explorer 7 엔진을 사용 하므로, 차세대 웹 기술인 HTML5 또는 Google map v3 최신 버전 등을 지원하지 못하는 문제가 있다. 


구글링으로 알아본 바로, 해결 방법으로는 3 party component 를 사용는 방법과 프로그램에 Registry 를 조작하는 코드를 심어 놓고 프로그램 구동시 설치된 IE버전과 같은 버전으로 셋팅하는 방법등이 있다.


먼저, CefCharp 설치 방법 확인.



* Visual Studio 2015 버전 사용.

* 아래 링크를 참조 하여 테스트 하였습니다. 

1. http://ourcodeworld.com/articles/read/173/how-to-use-cefsharp-chromium-embedded-framework-csharp-in-a-winforms-application 


2. https://www.nuget.org/packages/CefSharp.WinForms/




1. Test Project 생성 (File -> New -> Project)



2. CefSharp 설치 (Tools -> NuGet Package Manager -> Manage NuGet Package Solution...)

  2.1. 먼저 CefSharp.Common 을 설치


 CefSharp.Common 이 참조하는 아래 패키지도 같이 설치됨.



Output에 Finished 가 나오면 끝.


2.2. 동일한 방법으로 CefSharp.WinForms 설치.



2.3. 최종 설치 목록 확인


3. Solution Platform 변경.

  - CefSharp 는 Any CPU 를 지원하지 않으며, x86 또는 x64만 중 성택해야함.

  - 아래 와 같이 Any CPU만 있을경우 target Platform을 생성해줌.



  - x64 추가



4. Project에 Library 추가




Project 경로 내에 packages/Cefsharp.WinForms.dll 추가



5. Source code 추가




6. Compile & Running





7 Trouble shooting

  1. DLL 간에 버전이 맞지 않으면, InitializeChromium() 호출시 에러 발생.

  2. 출력물 폴더에 DLL 이 복사 되지 않으면, DLL을 찾을수 없다는 에러 발생.

    - 아래 Cef 관련 DLL 목록 확인

  3. 관련 DLL이 모두 포함되어 있지만 DLL을 찾을수 없다는 에러가 발생하면

    - 수동으로 한번더 설치해 준다.

  





'C# > WinForm' 카테고리의 다른 글

Google Calendar 연동 하기 (Schedule Sync)  (0) 2017.10.04
C# WebBrowser version 변경  (0) 2016.09.07
블로그 이미지

okgood0412

소프트웨어 개발을 즐기는 사람 입니다.

,