wpf2018.01.02 19:05

간략한 소스


MiniDump.cs


wpf에서는 

 AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;


으로 했을시에 작동한다.

첨에 모르고 

this.DispatcherUnhandledException += App_DispatcherUnhandledException;


이렇게 했는데 계속 0kb 로 덤프가 안떠져서 삽질을...


덤프가 만들어지면


1. exe 실행파일

2. pdb 파일

3. dmp  파일


3개 파일을 한 폴더에 넣고 dmp 클릭후 비쥬얼 스튜디오에서 혼합으로 디버그를 선택하면 오류난 위치를 알려준다.



Posted by 동동(이재동)
TAG minidump, WPF
wpf2017.11.24 17:22


C++에서 사용하는 DLL에서 오류가 나면 try catch에서 잡히지 않는문제를 해결 하였다.




AccessViolationException 예외는 네이티브 쪽에서 메모리 접근 위반을 했을 때 발생 하는 예외 이다.

할당되지 않은 메모리 또는 코드가 접근 권을 갖지 않는 메모리를 읽거나 쓰기를 시도하면 네이티브 코드(언 세이프 코드)에서 액세스 위반이 발생한다.

 

그러나 보통 System.Exception의 파생 클래스인 셈이라서 catch에서 이 예외를 포착할 것으로 생각하지만 애플리케이션은 이 예외를 잡지 못해서 이상 종료를 한다.

 

.NET Framework 3.5 이전에는 AccessViolationException을 catch 할 수 있었지만 .NET Framework 4 이후에서는 못하도록 바뀌었다.

 

이 예외를 잡고 싶다면 두 가지 방법을 하나를 하면 된다.

1. HandleProcessCorruptedStateExceptionsAttribute

AccessViolationException을 catch 하고 싶은 메소드에HandleProcessCorruptedStateExceptionsAttribute를 붙여서 잡을 수 있다.

[HandleProcessCorruptedStateExceptions]

void DoSomething()

{

try {

AccessViolationException를 발생하는();

} catch(AccessViolationException e) {

//---포착 가능

}

}

 

 

2.legacyCorruptedStateExceptionsPolicy

하위 호환성 때문에 기존(.NET Framework 3.5 이전)처럼 애플리케이션 전체에서 포착할 수 있도록 하고 싶은 경우. 구성 파일(*. config)에<legacyCorruptedStateExceptionsPolicy>요소를 넣어서 해결할 수 있다.

<configuration>

<runtime>

<legacyCorruptedStateExceptionsPolicy enabled="true"/>

</runtime>

</configuration>

 

 

출처: http://blog.xin9le.net/entry/2015/07/22/053738

Posted by 동동(이재동)
wpf2017.09.12 12:40

listview
1
2
3
4
5
6
7
8
9
10
11
12
                <ListView.ItemContainerStyle>
                    <Style TargetType="{x:Type ListViewItem}">
                        <Setter Property="Background" Value="Transparent" />
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="{x:Type ListViewItem}">
                                    <ContentPresenter />
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </ListView.ItemContainerStyle>


button


1
2
3
4
5
6
7
8
9
10
11
12
13
14
 <Button.Style>
                <Style TargetType="{x:Type Button}">
                    <Setter Property="Background" Value="Transparent"/>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type Button}">
                                <Border Background="{TemplateBinding Background}">
                                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                                </Border>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
</Button.Style>


Posted by 동동(이재동)
wpf2017.09.06 12:13

예를 들면 3이라는 숫자가 바인딩 되어 있고

이걸 3개월로 바꾸고 싶으면 Converter를 쓰면 되지만 일일이 만들기가 엄청 귀찮다


 <TextBlock Text="{Binding Month, StringFormat={}{0}개월}"/>


돈도 

<TextBlock Text="{Binding Money,StringFormat='##,#'}" />


이렇게 하면 300,000 형식으로 나온다.



Posted by 동동(이재동)
wpf2017.08.08 16:18

예를들어 View의 UserControl의 DataContext에 데이터를 주입하고

 <local:CardCancelControl DataContext="{Binding CardCancelData}" />


이런식으로...

유저컨트롤에서 버튼 커맨드를 넣었을때


 <Button Content="확인" Command="{Binding DataContext.CardCancelCommand}"  CommandParameter="Cancel" />


이런식으로 넣으면 안된다. datacontext안에 서 command를 호출하기 때문이다


이렇게 할려면 상위에서 DataContext를 빼야 작동한다.


그러면 상위에서 호출되게 할려면 어떻게 해야할까.


 <Button Content="확인" Command="{Binding Path=DataContext.CardCancelCommand,

                        RelativeSource={RelativeSource Mode=FindAncestor,

                        AncestorType={x:Type local:PopupControl}}}" CommandParameter="Cancel" />


이렇게 하면 된다.

참고 : https://stackoverflow.com/questions/3404707/access-parent-datacontext-from-datatemplate


Posted by 동동(이재동)
wpf2017.08.07 11:29

일반적으로 Grid라든지 컨트롤들은 자동으로 해상도에 맞게 조절해주지만


이미지는 크기가 정해져 있어서 이미지 크기가 유동적으로 변하지 않는다.


그래서 만약 Grid를 사용할때 퍼센트를 이용해서 분할하였다면 이미지를 사용한 Row나 column은 이미지가 짤릴경우가 있다.


이럴때는 ViewBox로 그 Row를 감싸면 깔끔해진다.



Posted by 동동(이재동)
c#2017.07.26 18:57

이전데이터와 새로 받아온 데이터를 비교해서 UI를 Update할지 말지 비교할때 사용한 Class 이다

일단 이전 데이터를 백업 해놓고

1
2
//데이터 비교를 위해서 저장
_previousOrderData = new List<OrderKey>(orderKey);

새로운 데이터를 받으면 비교해서 같은지 다른지 판단해준다.


1
var isEqual = ListDiffManager.CompareList(orderKey, _previousOrderData);


이걸 가능하게 해준 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public static class ListDiffManager
    {
        public static bool CompareList<T>(this List<T> list1, List<T> list2)
        {
            //if any of the list is null, return false
            if ((list1 == null && list2 != null) || (list2 == null && list1 != null))
                return false;
            //if both lists are null, return true, since its same
            else if (list1 == null && list2 == null)
                return true;
            //if count don't match between 2 lists, then return false
            if (list1.Count != list2.Count)
                return false;
            bool IsEqual = true;
            foreach (T item in list1)
            {
                T Object1 = item;
                T Object2 = list2.ElementAt(list1.IndexOf(item));
                Type type = typeof(T);
                //if any of the object inside list is null and other list has some value for the same object  then return false
                if ((Object1 == null && Object2 != null) || (Object2 == null && Object1 != null))
                {
                    IsEqual = false;
                    break;
                }
 
                foreach (System.Reflection.PropertyInfo property in type.GetProperties())
                {
                    if (property.Name != "ExtensionData")
                    {
                        string Object1Value = string.Empty;
                        string Object2Value = string.Empty;
                        if (type.GetProperty(property.Name).GetValue(Object1, null) != null)
                            Object1Value = type.GetProperty(property.Name).GetValue(Object1, null).ToString();
                        if (type.GetProperty(property.Name).GetValue(Object2, null) != null)
                            Object2Value = type.GetProperty(property.Name).GetValue(Object2, null).ToString();
                        //if any of the property value inside an object in the list didnt match, return false
                        if (Object1Value.Trim() != Object2Value.Trim())
                        {
                            IsEqual = false;
                            break;
                        }
                    }
                }
            }
            //if all the properties are same then return true
            return IsEqual;
        }
    }

출처 : http://answers.unity3d.com/questions/1307074/how-do-i-compare-two-lists-for-equality-not-caring.html

Posted by 동동(이재동)
wpf2017.07.17 16:58

Grid 같은 패널에 Add,Clear 하면서 임시로 nagiation처럼 되도록 하는 방법이 있지만


Frame을 이용하면 더 깔끔하게 가능하다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
    public static class NavigationManager
    {
        private static Frame _mainContentFrame;
 
        public static void SetFrame(Frame frame)
        {
            _mainContentFrame = frame;
        }
 
        public static void Navigate(UserControl page)
        {
            _mainContentFrame.Navigate(page);
        }
    }


Xaml


1
2
3
<Grid x:Name="xMainWindowPanel">
        <Frame x:Name="xMainFrame" NavigationUIVisibility="Hidden" />
</Grid>


사용법


1
2
3
4
5
  private void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            NavigationManager.SetFrame(xMainFrame);
            xMainFrame.Navigate(new LoginPage());
        }

추가...

naviagte를 하게 되면 이전 페이지가 필요 있으면 메모리에 남게 되므로 메모리 관리에 문제가 있을수 있다.

 public static void Navigate(UserControl page)
        {
            _mainContentFrame.Navigate(page);

            while (_mainContentFrame.CanGoBack == true)
            {
                _mainContentFrame.RemoveBackEntry();
            }
        }

RemoveBackEntry()로 지워주자


'wpf' 카테고리의 다른 글

Base 모델 클래스에 있는 데이터를 상속 클래스에 COPY 하기  (0) 2017.07.21
listbox에서 오른쪽 정렬하고 싶을때  (0) 2017.07.18
[WPF] NavagionManager  (0) 2017.07.17
MVVM Button Click Command 사용법  (0) 2017.07.17
MVVM을 쓰면서...  (3) 2016.10.24
바인딩이란?  (0) 2016.10.24
Posted by 동동(이재동)
wpf2016.06.08 15:28
public static class IsolatedStorageManager
{
public static void Save(string text)
{
IsolatedStorageFile isolatedStorage = IsolatedStorageFile.GetUserStoreForAssembly();
StreamWriter srWriter = new StreamWriter(new IsolatedStorageFileStream("path", FileMode.Create, isolatedStorage));
srWriter.WriteLine(text);
srWriter.Flush();
srWriter.Close();
}
public static string Load()
{
IsolatedStorageFile isolatedStorage = IsolatedStorageFile.GetUserStoreForAssembly();
StreamReader srReader = new StreamReader(new IsolatedStorageFileStream("path", FileMode.OpenOrCreate, isolatedStorage));
if (srReader != null)
{
while (!srReader.EndOfStream)
{
string item = srReader.ReadLine();
srReader.Close();
return item;
}
}
srReader.Close();
return @"C:\movie";
}
}


















Posted by 동동(이재동)
wpf2016.04.19 13:24

Bitmap 이미지 프로세싱을 이용하여 흑백, 세피아톤, 반전, 투명, 만화 등의 효과를 사용할 수 있다...


C#에 있는 샘플 코드를  WPF에서 사용할수 있도록 바꾸었다.



필터가 추가 될때마다 소스를 업데이트 하겠다.


참고한 사이트 : https://softwarebydefault.com/2013/03/02/bitmap-image-filters/



ImageFilterTest.zip




조금더 추가한 버전(blur,, 가우시안블러,FuzzEdgeBlur)


ImageFilterTest.zip







'wpf' 카테고리의 다른 글

SoundPlayer 사용  (0) 2016.04.25
blend 디자인모드 무시  (0) 2016.04.21
Image Filter 사용하기 (이미지 프로세싱)  (0) 2016.04.19
WPF HtmlToXaml에 Image Add하기  (0) 2016.04.14
image sequence 만들기 (Image Animation)  (0) 2016.04.08
parent usercontrol Owner 상위 찾기  (0) 2016.04.08
Posted by 동동(이재동)
TAG Filter, image, WPF
wpf2016.04.14 16:38

대박이다.... 


HtmlToXaml에서 <img src> 태그를 먹이면 적용이 안되었다.


<P> <BR> 등등 기본적인 태그는 테스트 해보니 잘되었다... 왜 이거는 안된것일까


Nuget에서 최신버전을 포함 많은 버전을 다운받아 보았지만 되지를 않았다...


혹시나해서 소스를 까봤더니 대박........ Image 추가하는 메소드에 아무것도 없던것이다.!!!


이놈들이 귀찮거나 문제가 있어서 소스를 지웠거나 아예 구현을 안했을 가능성이 높다...


내가 짜야하나 했는데 구글신을 검색해보니 역시 능력자가 구현해놨다 ㅋㅋ



참조한곳

http://blogs.spencen.com/?p=656


적용해서 해보니 잘되더라~ 


내가 적용해서 솔루션을 만들어 놓음



htmltoxaml.zip






Posted by 동동(이재동)
wpf2016.04.04 11:53


ImageButton.cs


스타일


<Style TargetType="{x:Type c:ImageButton}">

        <Setter Property="Template">

            <Setter.Value>

                <ControlTemplate TargetType="{x:Type c:ImageButton}">

                    <Border x:Name="buttonBorder">

                        <Border.Effect>

                            <DropShadowEffect Opacity="0.0" />

                        </Border.Effect>

                        <Image  Source="{TemplateBinding NormalImage}" x:Name="img" />

                    </Border>

                    <ControlTemplate.Triggers>

                        <Trigger Property="IsPressed" Value="true">

                            <Setter TargetName="img" Property="Source" Value="{Binding PressImage, RelativeSource={RelativeSource TemplatedParent}}" />

                        </Trigger>

                    </ControlTemplate.Triggers>

                </ControlTemplate>

            </Setter.Value>

        </Setter>

    </Style>


사용예 :


<c:ImageButton x:Name="xStartBtn" Width="300" Height="300" Content="Start" NormalImage="/CartoonMuseum;component/Images/sampleBtn.png" PressImage="/CartoonMuseum;component/Images/samplePressBtn.png" />


Themes/Generic.xaml

<Style TargetType="{x:Type c:ImageButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type c:ImageButton}">
<Border Name="buttonBorder">
<Border.Effect>
<DropShadowEffect Opacity="0.0" />
</Border.Effect>
<Border.Child>
<Image Source="{TemplateBinding NormalImage}" x:Name="img" />
</Border.Child>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsPressed" Value="true">
<Setter TargetName="img" Property="Source" Value="{Binding PressImage, RelativeSource={RelativeSource TemplatedParent}}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>








ImageButton.cs

public class ImageButton : Button
{
public ImageSource NormalImage
{
get { return base.GetValue(NormalImageProperty) as ImageSource; }
set { base.SetValue(NormalImageProperty, value); }
}
public static readonly DependencyProperty NormalImageProperty =
DependencyProperty.Register("NormalImage", typeof(ImageSource), typeof(ImageButton));
public ImageSource PressImage
{
get { return base.GetValue(PressImageProperty) as ImageSource; }
set { base.SetValue(PressImageProperty, value); }
}
public static readonly DependencyProperty PressImageProperty =
DependencyProperty.Register("PressImage", typeof(ImageSource), typeof(ImageButton));
public ImageButton()
{
DefaultStyleKey = typeof(ImageButton);
}
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
}
}



Posted by 동동(이재동)
wpf2015.12.07 18:02

유저컨트롤 안에 WindowsFormHost를 사용하고 Rotate나 움직이면 Layout Error가 난다...


여러가지 방법을 찾아봤지만 MS에서 고쳐줄 수 밖에 없는거 같다..


임시로 그냥 error exception을 날리는 방법으로 해결하였다...


물론 그래도 rotate는 불안정하고 안된다. 하지만 최소 MOVE는 할수 있다.


public class SurfaceWindowsFormsHost : WindowsFormsHost

    {

        public SurfaceWindowsFormsHost()

        {

            this.LayoutError += new EventHandler<LayoutExceptionEventArgs>(SurfaceWindowsFormsHost_LayoutError);

        }


        private void SurfaceWindowsFormsHost_LayoutError(object sender, LayoutExceptionEventArgs e)

        {

            e.ThrowException = false;

        }

    }


참고 : http://thedarksideof.net/post/WindowsFormsHost-on-Surface-ScatterView.aspx




Posted by 동동(이재동)
wpf2015.11.19 11:26

ListBox등을 이용할때 중간 중간에 ItemTempleSelecter를 사용하거나 ItemsPanel을 바꿔야 할떄가 있다..


TemplateSelecter야 워낙 유명하지만 ItemsPanel에 대해서 알아 보자.


코드는 그냥


FrameworkElementFactory factoryPanel = new FrameworkElementFactory(typeof(WrapPanel));
factoryPanel.SetValue(WrapPanel.OrientationProperty, Orientation.Horizontal);

ItemsPanelTemplate template = new ItemsPanelTemplate();
template.VisualTree = factoryPanel;

menu.ItemsPanel = template;

간단하다...


출저 : http://stackoverflow.com/questions/14318929/how-to-set-listbox-itemspanel-in-code-not-in-xaml

Posted by 동동(이재동)
wpf2015.07.13 12:38
<Grid x:Name="LayoutRoot" Background="White">
    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup x:Name="VisualStateGroup" >
            <VisualState x:Name="Hidden">
                <Storyboard Completed="OnHidden">
                    <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="rectangle" d:IsOptimized="True"/>
                </Storyboard>
            </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
    <Rectangle x:Name="rectangle" Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="136" Margin="48,72,0,0" Opacity="0" Stroke="Black" VerticalAlignment="Top" Width="208"/>
</Grid>

이런식으로 Storyboard에 completed 이벤트를 걸어서 확인하자 꼼수~

http://stackoverflow.com/questions/3653394/how-to-wait-for-state-changing-transition-to-finish-in-silverlight-4

Posted by 동동(이재동)
wpf2015.01.16 16:38

 <Viewbox Width="1500">
                <TextBlock MinWidth="1500" >

</Viewbox>

 

저렇게 minwidth로 해버리면 글자가 늘어날때만 글자가 작아진다.

 

Posted by 동동(이재동)
Surface2011.05.27 11:06

WPF에서 이런식으로 스토리를 보여주고 싶었다.(이건 완성된버전 ㅋㅋ)

 

image

 

이건 그냥 TextBlock으로 되는것이 아니다.

 

그래서 FlowDocument를 사용하였다..

 

일단 xaml에서 이렇게 코딩을 했다.

 

<FlowDocumentScrollViewer Grid.Row="1" Grid.ColumnSpan="2" VerticalScrollBarVisibility="Hidden" >
    <FlowDocument Background="Transparent">                                        
        <Paragraph FontFamily="Bell MT" FontSize="24" x:Name="DescriptionParagraph">
            <Floater Width="500"  HorizontalAlignment="Left">                            
                <BlockUIContainer>
                    <Rectangle Height="250" />
                </BlockUIContainer>
            </Floater>
            One Day, most of the town’s roads are ruined by the heavy rain. On that day, school bus-Schoobi happens to be late because of constructions on the road. Worrying that children may be waiting at the bus stop, Schoobi drives through the traffic with full speed, even though other cars are starring at him in a disapproving manner. Schoobi gets to a costal road, however, the road condition there is also messy. Dilly-dallying and regreting to go back. Schoobi ends up ramming into the guardail. Schoobi is now in the danger of falling down the cliff. Can Robocar Poli and his team save Schoobi?
        </Paragraph>
    
    </FlowDocument>
   
</FlowDocumentScrollViewer>
 
보면 알겠지만 FlowDocument에서 Paragraph를 사용하고 안에 Floater를 이용해서 안에 투명한 사각형을 왼쪽에 정렬하고 바깥쪽에 글을 입력하였다.
 
그럼 이제 안에 내용 Text를 계속 유동적으로 바꿔야 한다.
그럼 어떻게 해야할까? behind에서 수정하면 된다.
 
paragrah의 x:name을 DescriptionParagraph를 정의 했으니 이걸 변경하면 된다. 소스를 보자
 
private void SetDescriptionPlaceholder(string param)
        {
            DescriptionParagraph.Inlines.Remove(DescriptionParagraph.Inlines.Where(c => c is System.Windows.Documents.Run == true).Select(c => c).FirstOrDefault());
            DescriptionParagraph.Inlines.Add(param);
        }
 

이렇게 inline을 삭제하고 다시 추가하는 형식으로 바꾸었다.

 

이렇게 하면 끝~

Posted by 동동(이재동)
Surface2011.05.19 16:06

아 이것때문에 시간 아까운데 2시간이나 까먹었다…

 

실버라이트랑 다르게 이상하게

 

Blend로 VisualState를 만들고

 

VisualStateManager.GoToState(this, "Title", true);

 

이렇게 state간의 전환을 할려고 했으나 계속 false를 return 했다. ㅡ.ㅡ!!!

 

인터넷 찾아보니…

 

WPF 버그라던데…

 

해결법은

 

VisualStateManager.GoToElementState(this.Content as FrameworkElement, "Title", true);

 

이렇게 element단위에서 해야한다.. 내참 인터넷에 왜 이런거 해결하는 법 하나도 없는거야?

Posted by 동동(이재동)
VisualStudio2009.01.15 15:03
F12 : 내가 젤 많이 쓴다.... 메소드 찾아가기 ㅋㅋ 

Ctrl+k,k : bookmark기능 ,해제

Ctrl+k,n,p : bookmark 찾아가는데 n은 다음 p 는 이전

F5 : debuging 모드 실행이므로 실행이 느리다

ctrl+f5: 릴리즈모드

F9: 그냥 마우스 더블클릭이 더편해서 잘안씀 break point

ctrl+shift+F9 : 모든 break point 해제

ctr+R,M : 메소드 만들기..... 만들 소스 드래그후 만들면 편하다.

alt+shift+F12 : 아주 좋은 기능이다 모든 프로젝트에서 찾는데 마치 acroedit의 file에서 찾기 기능과 유사하다.
                    근데 shift+f12로도 되는거 같다 이게 더 편한듯?

ctrl+i : ctrl+f도 좋지만 자동완성처럼 오페라나 크롬 파폭처럼 한글자씩 찾을때 유용하다..
 
blend에서 창 다 지우는거 (안지우면 느리기때문에)
ctrl+shift+w .

shifht+f12 : alt+shift+f12와 같은 기능같은데 아주 좋다 이거 자주 이용해야지 ㅋㅋ

Ctrl+K,Ctrl+K : 코드 정렬해주는거 좋다 소스 정리할때

Ctrl+M,M : Region 을 쓸때 닫고 열고 아주 유용한 단축키이다. 많이 쓸예정

Ctrl+K,S : Surround with 기능으로 try catch나 region 묶을때 유용하다


ctrl+f4 : 탭창을 닫을때 쓴다 그냥 누르고 있으면 다 닫아진다 아주 굿~


Shfit+Alt+Enter 천체 화면 코딩에 집중할때 쓴다.

정말 좋은거 발견~~~~

Shfit+Ctrl+8 : 항상 우리가 정의(F12)로 갔을때 다시 돌아오고 싶을때쓴다. 

Shfit+Ctrl+7 : 다시 돌아왔는데 다시 가고 싶을때 쓴다. 신기 신기

visual studio에서 창 다 닫는거 current 창 빼고(단축키가 기복적으로 없어서 설정해주어야함)
Options>Environment>Keyboard에서 
File.CloseAllButThis
를 찾아서 ctrl+shift+w로 바꾼다(블랜드랑 같다ㅋㅋ)

한개의 문장 선택법(아주유용하다)

마우스 (해당부분을 더블클릭)
키보드 (CTRL+Shift+화살표키)

Ctrl + "M" + "M"

코드 블록을 열었다 접었다 할 수 있는 단축키 입니다. 혼잡한 코드를 정리해서 보고 싶을 때 유용한 단축 키 입니다.
아래는 코드가 열려있는 화면입니다.

ctrl+f3 대부분 Ctrl+f 해서 찾는데 처음에 ctrl+f3을 해서 f3을 누르면 현재 커서에 있는 것을 찾는다.

Ctrl+K+S Surround with 기능이다 Try~ catch 문 같은것을 편리 하게 묶어준다^^

Ctrl+K+F 라인정렬 으로 인터넷에서 가져온 소스 정렬할때 유용 ㅋ

2012 3.19 추가

Ctrl+Alt+L 솔루션 익스플로러 바로 이동(파일찾을떄 유용) 돌아갈땐 그냥 ctrl+esc

CTRL+[ + S

이건 현재 문서가 어디에 있는 찾도록 해준다.. 이게 디폴트로 있는지 몰라서 계속 익스텐션에 있는걸 썻었는데 ㅠㅠ


Tab 이동할때

Ctrl+ALT PageUP or PageDpwn or Home or END 키로 이동 가능하다 나름 ctrl+esc보다 유용한거 같다?


모든 단축키 : http://msdn.microsoft.com/en-us/library/da5kh0wa.aspx

Posted by 동동(이재동)