C#でシンプルでわかりやすい遷移を書く

ポイントは1週間後にソースを見て、「何をしたい」記述となっているのかを瞬時に思い出せる・理解できるかどうかです。

具体的には

private void test()
{
int caret_x = 10;
bool caret_Hankaku = true;

Func<string>get_caret_status=()=>
{
if(caret_x<0)
return "画面外";
if(caret_Hankaku==true)
return "半角";
return "全角";
};
string tmp_caret_status=get_caret_status();
switch(tmp_caret_status)
{
case "画面外":
・・・画面外のときの処理・・・
break;
case "半角"
・・・半角のときの処理・・・
break;
case "全角"
・・・半角のときの処理・・・
break;
}
}

のようにすることで、処理する種類を事前に仕分けしてから、switch文などで処理を分けて書けます。
同様のことはclass単位でも当然できるのですが、関数単位ならこのように「匿名関数の匿名じゃない版」を利用してみると、思い出しやすいソースになると思います。